我的硬件平台是S3C2410,NAND FLASH 64M,SDRAM 64M。研究UBOOT的start.S时发现他本身有一段代码用来复制自身到SDRAM中去的,如下:<br />relocate: /* relocate U-Boot to RAM */<br /> adr r0, _start /* r0 <- current position of code */<br /> ldr r1, _TEXT_BASE /* defined position of code =0x33f8'0000*/<br /> /* test if we run from flash or RAM */<br /> cmp r0, r1 /* don't reloc during debug */<br /> beq stack_setup <br /> ldr r2, _armboot_start <br /> ldr r3, _bss_start <br /> sub r2, r3, r2 <br /> add r2, r0, r2 <br />copy_loop:<br /> ldmia r0!, {r3-r10} <br /> stmia r1!, {r3-r10} <br /> cmp r0, r2 <br /> ble copy_loop<br />为什么资料上还要移植vivi中的一大段代码(如下),用来做为复制uboot代码到SDRAM?两个功能有区别吗?<br />#ifdef CONFIG_S3C2410_NAND_BOOT<br />copy_myself:<br /> mov r10, lr<br />@ reset NAND<br /> mov r1, #NAND_CTL_BASE<br /> ldr r2, =0xf830 @ initial value<br /> str r2, [r1, #oNFCONF] @ #define oNFCONF 0x00<br /> ldr r2, [r1, #oNFCONF]<br /> bic r2, r2, #0x800 @ enable chip<br /> str r2, [r1, #oNFCONF]<br /> mov r2, #0xff @ RESET command<br /> strb r2, [r1, #oNFCMD] @ #define oNFCMD 0x04<br /> mov r3, #0 @ wait<br /> ...<br /> ... |
|