主题 : S3C6410裸奔地址映射问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 34238
精华: 0
发帖: 27
金钱: 135 两
威望: 27 点
综合积分: 54 分
注册时间: 2010-12-13
最后登录: 2017-09-13
楼主  发表于: 2011-03-07 11:19

 S3C6410裸奔地址映射问题

我买的是mini6410  256MB配置的板,我想裸奔测试下,我的设想是从SD卡启动,整个裸奔程序远远超过8KB,整个程序要拷贝到DDRAM(开始地址是0x50000000)里面运行,当从SD启动后IROM的代码会把SD卡的前8K拷贝到0x0C000000 SteppingStone区域运行,代码完成CPU相关初始化后判断自身是否在DDRAM里面(0x50000000)运行,如果不是就把SD卡指定扇区重新拷贝到DDRAM里面,再重新运行自己,我的问题是这个程序的地址链接文件该怎么写,就这个代码应该是链接到以0x50000000开始地址的空间还是以0x0C000000的空间,因为在前面CPU相关初始化会调用一些初始化代码,调用就会有地址空间的问题,我看了下U-BOOT的u-boot.lds的链接地址是从0地址开始的,但是在start.s里面有个bl lowlevel_init调用,这段代码应该是在0x0c000000地址空间运行的,这个确实由于刚学习ARM,搞得有点晕哦。
级别: 新手上路
UID: 34238
精华: 0
发帖: 27
金钱: 135 两
威望: 27 点
综合积分: 54 分
注册时间: 2010-12-13
最后登录: 2017-09-13
1楼  发表于: 2011-03-07 11:28
如果是从0地址开始链接程序的话,那么就要开MMU把0x00000000映射到0x50000000去,就是没搞明白这个start.s等开始程序也有程序调用啊,因为这些子程序应该是连接时链接到以0地址开始的空间去了,但是这个时候这个空间还没初始化好,是不能用的啊,请大侠们指点下
级别: 新手上路
UID: 34238
精华: 0
发帖: 27
金钱: 135 两
威望: 27 点
综合积分: 54 分
注册时间: 2010-12-13
最后登录: 2017-09-13
2楼  发表于: 2011-03-07 12:39
晕,B,BL指令用的是相对地址,不是绝对地址
级别: 新手上路
UID: 39770
精华: 1
发帖: 32
金钱: 220 两
威望: 44 点
综合积分: 84 分
注册时间: 2011-03-12
最后登录: 2014-11-04
3楼  发表于: 2011-03-14 10:49
前几天刚看到一个U-BOOT移植的问题,这个问题似乎是位置无关代码的问题,你说的那个初始化代码一般都用相对跳转指令,所以编译出来的代码是与位置无关的,也就是说可以在内存的任何地方运行,所以你的程序最开始是在0x0c000000运行,这个地方在刚开机启动的时候会自动映射到0x00000000的地址。初始化DRAM后拷贝自己到DRAM中,再用绝对跳转指令跳到DRAM中去