Linux內(nèi)核的編譯流程簡(jiǎn)析
時(shí)間:2016-12-12作者:華清遠(yuǎn)見
在內(nèi)核的 Makefile 中會(huì)在多處地方看到 FORCE ,比如: 實(shí)際上它是一個(gè)偽目標(biāo): 從上面看到,F(xiàn)ORCE 既沒(méi)有依賴的規(guī)則,其底下也沒(méi)有可執(zhí)行的命令。 如果一個(gè)規(guī)則沒(méi)有命令或者依賴,而且它的目標(biāo)不是一個(gè)存在的文件名,在執(zhí)行此規(guī)則時(shí),目標(biāo)總會(huì)被認(rèn)為是新的。也就是說(shuō),這個(gè)規(guī)則一旦被執(zhí)行,make 就認(rèn)為它所表示的目標(biāo)已經(jīng)被更新過(guò)。當(dāng)將這樣的目標(biāo)(FORCE)作為一個(gè)規(guī)則的依賴時(shí)(如上的 vmlinux: ),由于依賴總被認(rèn)為是被更新過(guò)的,所以作為依賴所在的規(guī)則定義的命令總會(huì)被執(zhí)行。 比如上面的 vmlinux: 在每次 make 時(shí),它下面的這些命令總會(huì)被執(zhí)行: zImage是ARM Linux常用的一種壓縮映像文件,uImage是U-boot專用的映像文件,它是在zImage之前加上一個(gè)長(zhǎng)度為0x40的"頭",說(shuō)明這個(gè)映像文件的類型、加載位置、生成時(shí)間、大小等信息。換句話說(shuō),如果直接從uImage的0x40位置開始執(zhí)行,zImage和uImage沒(méi)有任何區(qū)別。另外, Linux2.4內(nèi)核不支持uImage,Linux2.6內(nèi)核加入了很多對(duì)嵌入式系統(tǒng)的支持,但是uImage的生成也需要設(shè)置。 先分析一下zImage的組成。在內(nèi)核編譯完成后會(huì)在arch/arm/boot/下生成zImage。 在arch/arm/boot/Makefile中: piggy.o依賴piggy.gz 其中Image是由內(nèi)核頂層目錄下的vmlinux二進(jìn)制化后得到的。注意: arch/arm/boot/compressed/vmlinux是位置無(wú)關(guān)的,這個(gè)有助于理解后面的代碼,鏈接選項(xiàng)中有個(gè) –fpic參數(shù): 總結(jié)一下zImage的組成,它是由一個(gè)壓縮后的內(nèi)核piggy.o,連接上一段初始化及解壓功能的代碼(head.o misc.o decompress.o)組成的。 相關(guān)資訊
發(fā)表評(píng)論
|