打印

关于S3C2440启动代码的问题

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

相关帖子

沙发
sxh924|  楼主 | 2008-11-18 09:57 | 只看该作者

补充说明

以下是别人在S3C2440的一段起动代码.Ro_Base:0x0 Rw_Base:0x30000000,从以下代码来看,先是将ROM里的RO和RW段全拷贝到了RAM的起始位置,那么在接下来的代码中有:CMP  R0, R1,这样又会拷贝RW段到RO,从ARM Linker的设置来看,数据不就被复盖了吗?请大家帮忙解答一下?
;---------------------------------------------------

        ldr  r0, = pROM_BASE  ;ROM 0x0               
        ldr  r1, = pRAM_BASE  ;RAM 30000000                
        ldr  r2, = |Image$$RO$$Limit|
        ldr  r3, = |Image$$ZI$$Base|
        ldr  r4, = |Image$$RW$$Base|

        sub  r3, r3, r4                        
        add  r2, r2, r3                    
COPY_CODE
        cmp  r0, r2
        ldrne r3, [r0], #4
        strne r3, [r1], #4
        bne  COPY_CODE


;-----------------------------------------------------

InitVar
    IMPORT    |Image$$RO$$Limit|        
    IMPORT    |Image$$RW$$Base|        
    IMPORT    |Image$$ZI$$Base|        
    IMPORT    |Image$$ZI$$Limit| 
       
    LDR  R0, =|Image$$RO$$Limit|      
    LDR  R1, =|Image$$RW$$Base|         
    LDR  R3, =|Image$$ZI$$Base|        
            
    CMP  R0, R1                 
    BEQ  %F1
0        
    CMP  R1, R3            
    LDRCC  R2, [R0], #4
    STRCC  R2, [R1], #4
    BCC  %B0
1        
    LDR  R1, =|Image$$ZI$$Limit|      
    MOV  R2, #0
2        
    CMP  R3, R1    
    STRC  R2, [R3], #4
    BCC  %B2    
    
    MOV  PC, LR

使用特权

评论回复
板凳
阿南| | 2008-11-18 12:52 | 只看该作者

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

有些启动代码中会将目标文件(或称自身)从NAND拷贝到SDRAM中的,所以此时的RO就直接设置到SDRAM的区域

阿南建议楼主亲自去详细分享启动代码,只有这样才能掌握好它。如果别人给你了答案,你在这一块永远都会不清不楚,从长远的学习角度思考是不可取的

使用特权

评论回复
地板
sxh924|  楼主 | 2008-11-18 14:54 | 只看该作者

谢谢提醒

谢谢版主的建议,我下去再分析一下.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

59

帖子

0

粉丝