1. 程式人生 > >JZ2440學習筆記之鏈接文件lds

JZ2440學習筆記之鏈接文件lds

-o 需要 加載 bin文件 img nal 開機 鏈接地址 技術

如果在Linux環境下用arm-linux-gcc來編譯arm程序,需要編寫鏈接文件lds:

1. 運行地址=鏈接地址,表示代碼在SDRAM中執行的地址,如果程序中有對某部分代碼執行過搬運,需要在lds文件中設置對應的鏈接地址,比如下圖中的0x30000000。

2. 加載地址=存儲地址,表示代碼在Nand中的地址,如實例2中的4096。

鏈接文件實例1:

技術分享圖片

鏈接文件實例2:

技術分享圖片

程序燒寫到Nand的0地址位置(main.o是從4k位置開始,見下圖)。開機後,Nand的前4K復制到Internal 4K RAM運行,然後把Nand裏面的main.c復制到SDRAM的0x30000000位置,並跳轉到SDRAM裏面運行。

生成的bin文件(用於燒寫到Nand flash):

技術分享圖片

地址實例:

技術分享圖片

mkimage -A arm -O linux -T kernel -e 0x30007fc0 -a 0x30007fc0 -n linux-2.6.22.6 -d zImage uImage

技術分享圖片

之前提到制作uImage的時候設置了加載地址和入口地址為:0x30007fc0,這個地址加上uImage頭的長度(64 bytes) = 0x30008000

那30000000~0x30008000這段地址是用來幹什麽的呢:

JZ2440學習筆記之鏈接文件lds