主题 : mini2440用ADS分散加载方法裸奔 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 4843
精华: 0
发帖: 102
金钱: 810 两
威望: 554 点
贡献值: 0 点
综合积分: 204 分
注册时间: 2009-03-31
最后登录: 2012-11-14
楼主  发表于: 2010-03-20 20:51

 mini2440用ADS分散加载方法裸奔

  ADS的Linktype可以选择“Scattered”模式,也即分散加载。但在中文网站上找了一下,详细的例子不多,只知道详细的用法得去查看《ADS_LINKERGUIDE_A》文档。没办法,只好硬着头皮去看。

  大致来说,scatter文件里面定义了程序各个段所在的区域(region)。在程序里面想要知道某个region的加载位置(或者长度、末尾),其方法是引用标号 |Load$$region_name$$Base|  (或 |Load$$region_name$$Length|、|Load$$region_name$$|Limit|) ;想要知道执行域的对应信息,只要把“Load”替换为“Image”就行了。所以,在使用“Simple”连接类型的时候,以“Image”为前缀的标号指的是镜像的执行域位置,大家非常感兴趣的“2440init.s”文件使用了某种技巧获得它的实际加载域位置,因为加载域也可以是位置无关的。

  本人打算在程序中使用2个加载域,一个作为bootloader,一个作为……,嗯,或许以后自己写个系统吧。bootloader的作用应该是一次性的,使用完之后可以覆盖/丢弃的,而且没必要加入MMU、中断向量等复杂的东西——我打算在第二加载域里实现这些功能。

  现在是在nor启动方式之下使用下载到SDRAM的方式调试程序,但友善的vivi加载完程序之后并没有关闭MMU,所以SDRAM某些地方是不能使用的,估计是在这些地方放置了TBL,覆盖到这些位置的话会导致异常(写按键的扫描程序,没有并口,不能用JTAG调试,痛苦了一天才估计到是这个问题)。由于是在SDRAM中调试,所以没有从NAND中加载程序,也省略了SDRAM的初始化等。目前还没有实现加载域位置无关,所以只能下载到SDRAM 0x30000000位置运行,这个以后有时间再修改。目前实现了程序代码从加载域到执行域的搬运,led的显示,按键的扫描。

  ……
ofme-100320-bak.rar (32 K) 下载次数:286
级别: 新手上路
UID: 6629
精华: 2
发帖: 22
金钱: 230 两
威望: 78 点
贡献值: 2 点
综合积分: 84 分
注册时间: 2009-06-09
最后登录: 2011-08-15
1楼  发表于: 2010-03-21 23:02
大侠。。。。仰望之。。。
armboy@qq.com