鏈結三要素:鏈結順序,鏈結位址,載入位址
1.連線順序的問題
倘若有鏈結指令碼,則會按照鏈結指令碼的規則進行鏈結。例如:
sections
second x30000000 : at(4096)
} 這個規則中定義了兩個大段,first和second。
first的鏈結順序為head.o init.o nand.o. second的鏈結順序為main.o。
2.鏈結位址的問題
先說明一下鏈結位址的概念,鏈結位址是程式實際執行的位址。通常程式中有位置無關**和位置有關**。位置無關**是對於鏈結位址無要求,可以在不是它鏈結位址的地方執行;但是位置有關**,必須在鏈結位址執行。也就是說當執行位置有關**時,程式必須事先在鏈結位址上,如果沒有在,通常需要copy到那個位置或者利用mmu對映一下。
下邊以乙個例子來說明一下鏈結指令碼中鏈結位址的問題。
sections
second 0x00000200 : at(300)
third 0x00000400 : at(500)
fourth 0x30000000 : at(3096)
} 四個部分:first、second、third、foutth,它們的鏈結位址分別是0x00000000、0x00000200、0x00000400、0x30000000。
3.載入位址
載入位址指的是程式編譯後的存放位址,通常存放在rom、flash中,所以就是指這段程式在rom、flash中的存放位置。還是以上邊的連線指令碼為例。
sections
second 0x00000200 : at(300)
third 0x00000400 : at(500)
fourth 0x30000000 : at(3096)
} 它們的存放位址分別是0、300、500、3096。
Repo指令碼分析
repo指令碼是作為整個repo工具的入口,只要負責repo環境的初始化和轉殖repo庫。repo有兩處if name main 位於開始部分主要是給shell執行用的,位於末尾的部分是給python執行用的。來看看repo引導指令碼的前幾行。1 bin sh 2 3 repo url git 4 ...
openwrt啟動指令碼分析
openwrt啟動指令碼分析 1.linux核心的配置檔案由下面兩個檔案組成 a.target linux generic 2.4 config default b.target linux brcm 2.4 config default 在配置檔案中可以看到 config cmdline root...
bbb 燒寫指令碼分析
ftp伺服器位址,即ccs uniflash的位址 server ip 192.168.2.1 boot partition boot partition.tar.gz rootfs partition rootfs partition.tar.gz 要燒寫的emmc的裝置名稱 drive dev ...