关于S3C2440启动代码的问题

[复制链接]
2473|4
 楼主| sxh924 发表于 2008-11-18 09:45 | 显示全部楼层 |阅读模式
我用的开发板的SDRAM为64M,NAND&nbsp;FLASH也是64M,从NAND&nbsp;FLASH启动,ARM&nbsp;Linker的ro-base&nbsp;设为0x30200000,rw-base设为空。2440init.s有如下相关代码:<br />LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;=|Image$$RO$$Limit|&nbsp;;&nbsp;Get&nbsp;pointer&nbsp;to&nbsp;ROM&nbsp;data<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;=|Image$$RW$$Base|&nbsp;&nbsp;;&nbsp;and&nbsp;RAM&nbsp;copy<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;=|Image$$ZI$$Base|&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;;Zero&nbsp;init&nbsp;base&nbsp;=&gt&nbsp;top&nbsp;of&nbsp;initialised&nbsp;data<br />&nbsp;&nbsp;&nbsp;&nbsp;CMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;r1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Check&nbsp;that&nbsp;they&nbsp;are&nbsp;different<br />&nbsp;&nbsp;&nbsp;&nbsp;BEQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%F2<br />1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;r3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Copy&nbsp;init&nbsp;data<br />&nbsp;&nbsp;&nbsp;&nbsp;LDRCC&nbsp;&nbsp;&nbsp;r2,&nbsp;[r0],&nbsp;#4&nbsp;;--&gt&nbsp;LDRCC&nbsp;r2,&nbsp;[r0]&nbsp;+&nbsp;ADD&nbsp;r0,&nbsp;r0,&nbsp;#4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;STRCC&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1],&nbsp;#4&nbsp;&nbsp;&nbsp;&nbsp;;--&gt&nbsp;STRCC&nbsp;r2,&nbsp;[r1]&nbsp;+&nbsp;ADD&nbsp;r1,&nbsp;r1,&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;BCC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%B1<br />2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;=|Image$$ZI$$Limit|&nbsp;;&nbsp;Top&nbsp;of&nbsp;zero&nbsp;init&nbsp;segment<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;#0<br />3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;r1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Zero&nbsp;init<br />&nbsp;&nbsp;&nbsp;&nbsp;STRCC&nbsp;&nbsp;&nbsp;r2,&nbsp;[r3],&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;BCC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%B3<br />经过编译及反汇编发现代码是从0x30200000开始的,说明程序是在SDRAM运行,由于我的程序一直没完成,就没有烧写到FALSH,那在烧写时是否应该将ro-base&nbsp;设为0x0,rw-base设为0x30200000,让程序的RO段在FLASH中运行,而RW段在SDRAM中运行,是这样的吗?我一同学在ro-base&nbsp;设为0x30200000,rw-base设为空的情况下直接将程序烧到FLASH的0x0也可运行,怎么回事?
 楼主| sxh924 发表于 2008-11-18 09:57 | 显示全部楼层

补充说明

以下是别人在S3C2440的一段起动代码.Ro_Base:0x0&nbsp;Rw_Base:0x30000000,从以下代码来看,先是将ROM里的RO和RW段全拷贝到了RAM的起始位置,那么在接下来的代码中有:CMP&nbsp;&nbsp;R0,&nbsp;R1,这样又会拷贝RW段到RO,从ARM&nbsp;Linker的设置来看,数据不就被复盖了吗?请大家帮忙解答一下?<br />;---------------------------------------------------<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;r0,&nbsp;=&nbsp;pROM_BASE&nbsp;&nbsp;;ROM&nbsp;0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;r1,&nbsp;=&nbsp;pRAM_BASE&nbsp;&nbsp;;RAM&nbsp;30000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;r2,&nbsp;=&nbsp;|Image$$RO$$Limit|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;r3,&nbsp;=&nbsp;|Image$$ZI$$Base|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;r4,&nbsp;=&nbsp;|Image$$RW$$Base|<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;r3,&nbsp;r3,&nbsp;r4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;r2,&nbsp;r2,&nbsp;r3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />COPY_CODE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;r0,&nbsp;r2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldrne&nbsp;r3,&nbsp;[r0],&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strne&nbsp;r3,&nbsp;[r1],&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;&nbsp;COPY_CODE<br /><br /><br />;-----------------------------------------------------<br /><br />InitVar<br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;&nbsp;&nbsp;|Image$$RO$$Limit|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;&nbsp;&nbsp;|Image$$RW$$Base|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;&nbsp;&nbsp;|Image$$ZI$$Base|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;&nbsp;&nbsp;|Image$$ZI$$Limit|&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;R0,&nbsp;=|Image$$RO$$Limit|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;R1,&nbsp;=|Image$$RW$$Base|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;R3,&nbsp;=|Image$$ZI$$Base|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CMP&nbsp;&nbsp;R0,&nbsp;R1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;BEQ&nbsp;&nbsp;%F1<br />0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CMP&nbsp;&nbsp;R1,&nbsp;R3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LDRCC&nbsp;&nbsp;R2,&nbsp;[R0],&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;STRCC&nbsp;&nbsp;R2,&nbsp;[R1],&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;BCC&nbsp;&nbsp;%B0<br />1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;R1,&nbsp;=|Image$$ZI$$Limit|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;R2,&nbsp;#0<br />2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CMP&nbsp;&nbsp;R3,&nbsp;R1&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;STRC&nbsp;&nbsp;R2,&nbsp;[R3],&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;BCC&nbsp;&nbsp;%B2&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;PC,&nbsp;LR<br /><br />
阿南 发表于 2008-11-18 12:52 | 显示全部楼层

楼主需要详细分析启动代码才能清楚

有些启动代码中会将目标文件(或称自身)从NAND拷贝到SDRAM中的,所以此时的RO就直接设置到SDRAM的区域<br /><br />阿南建议楼主亲自去详细分享启动代码,只有这样才能掌握好它。如果别人给你了答案,你在这一块永远都会不清不楚,从长远的学习角度思考是不可取的
 楼主| sxh924 发表于 2008-11-18 14:54 | 显示全部楼层

谢谢提醒

谢谢版主的建议,我下去再分析一下.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

59

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部