[U-Boot-Users] Question about ld script for s3c44b0

hi guys, I have a doubt about the following code which is from u-boot-dist/board/dave/b2
/*code*/ 0 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") 1 OUTPUT_ARCH(arm) 2 ENTRY(_start) 3 SECTIONS 4 { 5 . = 0x00000000; 6 7 . = ALIGN(4); 8 .text : 9 { 10 cpu/s3c44b0/start.o (.text) 11 *(.text) 12 } 13 14 . = ALIGN(4); 15 .rodata : { *(.rodata) } 16 17 . = ALIGN(4); 18 .data : { *(.data) } 19 20 . = ALIGN(4); 21 .got : { *(.got) } 22 23 . = .; 24 __u_boot_cmd_start = .; 25 .u_boot_cmd : { *(.u_boot_cmd) } 26 __u_boot_cmd_end = .; 27 28 armboot_end_data = .; 29 30 . = ALIGN(4); 31 __bss_start = .; 32 .bss : { *(.bss) } 33 _end = .; 34 } /*code*/
My question:
Let's assume it boots from ROM which starts at 0x0(address) and s3c44b0 has no remap mechanism by the way. After bootloader relocates section .text,.rodata,.data and .got from ROM to RAM, we get two copies of codes and data. So here come the question: ldr pc, _start_armboot
_start_armboot: .word start_armboot When the above code is executed, which start_armboot is called, the one is ROM or the one in RAM? I mean how we can assure cpu fetches code from RAM instead of ROM to be more efficient?
I think u-boot.lds acts just like a scatter file.(Am I right?) So maybe we can write like this: .=ROM_BASE section: { start.o(.text) lowlevel_init.o(.text) } .=RAM_BASE section: { *(.text) } . = ALIGN(4); .rodata : { *(.rodata) }
...and so on
OK,this is my opinion. I need you guys comment on it. If i am wrong, please give me the right answer so i won't doubt any more. Sincelely, i need your help.
participants (1)
-
gwunangle