載入位址和執行位址 2

2021-07-01 21:25:46 字數 1142 閱讀 4915

/* _start == _text_base, 從flash 啟動

_start != _text_base, 從ram 啟動

relocate: /* relocate u-boot to ram */

adr r0, _start /* r0 <- current position of code */

ldr r1, _text_base /* test if we run from flash or ram */

cmp r0, r1 /* don』t reloc during debug */

beq clear_bss

ldr r2, _armboot_start

ldr r3, _bss_start

sub r2, r3, r2 /* r2 <- size of armboot */

bl  copycode2ram    /* r0: source, r1: dest, r2: size */
add r2, r0, r2      /* r2 <- source end address         */
copy_loop:

ldmia r0!, /* copy from source address [r0] */

stmia r1!, /* copy to target address [r1] */

cmp r0, r2 /* until source end addreee [r2] */

ble copy_loop

載入時位址就是程式放置的位址,執行位址就是程式定位的絕對位址,也即在編譯連線時定位的位址。如果程式是在flash裡執行,則執行位址和載入位址是相同的。如果程式是在ram裡執行,但程式是儲存在flash裡,則執行位址指向ram,而載入位址是指向flash。**一般是燒寫在nand裡面,比如s3c2440 如果開機從nand啟動 其開始的4k**會被copy到2440內部的4kram 用於對關鍵硬體的初始化 這時候內部ram被對映為0x0位址。如果從nor啟動,因為nor支援片上執行,**可以直接在nor上執行 此時nor便被對映成0x0,s3c2440 內部的4kram便被對映到了0x40000000處。

執行位址和載入位址

在連線目標 時,會提到執行位址和載入位址。這兩者有什麼區別呢?載入時位址就是程式放置的位址,執行位址就是程式定位的絕對位址,也即在編譯連線時定位的位址 如果程式是在flash裡執行,則執行位址和載入位址是相同的。如果程式是在ram裡執行,但程式是儲存在flash裡,則執行位址指向ram,而載入位址是...

執行位址和載入位址

在連線目標 時,會提到執行位址和載入位址。這兩者有什麼區別呢?載入時位址就是程式放置的位址,執行位址就是程式定位的絕對位址,也即在編譯連線時定位的位址 如果程式是在flash裡執行,則執行位址和載入位址是相同的。如果程式是在ram裡執行,但程式是儲存在flash裡,則執行位址指向ram,而載入位址是...

執行位址和載入位址

執行位址和載入位址 在連線目標 時,會提到執行位址和載入位址。這兩者有什麼區別呢?載入時位址就是程式放置的位址,執行位址就是程式定位的絕對位址,也即在編譯連線時定位的位址。如果程式是在flash裡執行,則執行位址和載入位址是相同的。如果程式是在ram裡執行,但程式是儲存在flash裡,則執行位址指向...