色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當(dāng)前位置: > 華清遠(yuǎn)見教育科技集團(tuán) > 嵌入式學(xué)習(xí) > 講師博文 > Linux內(nèi)核的編譯流程簡(jiǎn)析
Linux內(nèi)核的編譯流程簡(jiǎn)析
時(shí)間:2016-12-12作者:華清遠(yuǎn)見

在內(nèi)核的 Makefile 中會(huì)在多處地方看到 FORCE ,比如:
        # vmlinux image - including updated kernel symbols
        vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o $(kallsyms.o) FORCE

實(shí)際上它是一個(gè)偽目標(biāo):
     nbsp;   PHONY +=FORCE
        FORCE:
        # Declare the contents of the .PHONY variable as phony. We keep that
        # information in a variable so we can use it in if_changed and friends.
        .PHONY: $(PHONY)

從上面看到,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í)行:
        ifdef CONFIG_HEADERS_CHECK
        $(Q)$(MAKE)-f $(srctree)/Makefile headers_check
        endif
        ifdef CONFIG_SAMPLES
                $(Q)$(MAKE) $(build)=samples
        endif
        ifdef CONFIG_BUILD_DOCSRC
                $(Q)$(MAKE) $(build)=Documentation
        endif
                $(call vmlinux-modpost)
                $(call if_changed_rule,vmlinux__)
                $(Q)rm -f .old_version

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中:
        $(obj)/zImage: $(obj)/compressed/vmlinux FORCE
        $(call if_changed,objcopy)
        由此可見,zImage的是elf格式的arch/arm/boot/compressed/vmlinux二進(jìn)制化得到的
        在arch/armboot/compressed/Makefile中:
        HEAD = head.o
        OBJS = misc.o decompress.o
        $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.o /
        $(addprefix $(obj)/, $(OBJS)) FORCE
        $(call if_changed,ld)
        $(obj)/piggy.gz: $(obj)/../Image FORCE
        $(call if_changed,gzip)
        $(obj)/piggy.o: $(obj)/piggy.gz FORCE

piggy.o依賴piggy.gz
        piggy.gz依賴arch/arm/boot/Image
        查看arch/arm/boot/Makefile,得知
        $(obj)/Image: vmlinux FORCE
                $(call if_changed,objcopy)
                @echo ' Kernel: $@ is ready'

其中Image是由內(nèi)核頂層目錄下的vmlinux二進(jìn)制化后得到的。注意:

arch/arm/boot/compressed/vmlinux是位置無(wú)關(guān)的,這個(gè)有助于理解后面的代碼,鏈接選項(xiàng)中有個(gè) –fpic參數(shù):
        EXTRA_CFLAGS := -fpic

總結(jié)一下zImage的組成,它是由一個(gè)壓縮后的內(nèi)核piggy.o,連接上一段初始化及解壓功能的代碼(head.o misc.o decompress.o)組成的。

發(fā)表評(píng)論
評(píng)論列表(網(wǎng)友評(píng)論僅供網(wǎng)友表達(dá)個(gè)人看法,并不表明本站同意其觀點(diǎn)或證實(shí)其描述)
主站蜘蛛池模板: 乌克兰肥妇黑毛BBW 欧美黑人牲交videossexeso | 中文在线综合 | 狠狠躁夜夜躁人人爽天天天天 | 无码AV最新清无码专区吞精 | 中国亚州女人69内射少妇 | 永久免费av无码网站yy | 国产精品美女久久久网站 | 欧美z0z0另类特级 | 玩两个丰满老熟女在线视频 | 国产女厕偷窥系列在线视频 | 婷婷色亚洲 | 极品美女高潮呻吟国产剧情 | 少妇搡BBBB搡BBB搡毛茸茸 | 97超碰人人看超碰人人 | 无人在线视频观看免费 | 夜夜爽夜夜叫夜夜高潮漏水 | 亚洲第一成年免费网站 | 日木AV无码专区亚洲AV毛片 | 国产乱国产乱老熟300部视频 | 五月婷婷天堂 | 亚洲AV成人一区二区三区观看在线 | 欧美日韩精品成人网站二区A∨有 | 色欲A∨无码蜜臀AV免费播 | 国产亚洲精品俞拍视频 | 日日噜噜夜夜狠狠久久无码区 | 亚洲AV无码久久久久网站蜜桃 | 香港三级精品三级在线专区 | 欧洲av一区 | 18以下勿进色禁网站免费看 | 亚洲精品国自产拍在线观看 | 不卡av网站 | 动漫AV纯肉无码AV在线播放 | 中文字幕高清在线免费播放 | 永夜星河一到30集免费观看 | 日韩一区二区a片免费观看 蝴蝶谷最新网址 | 女人喷液抽搐高潮视频, | 无码欧美精品一区二区 | 欧美日韩精品视频一区二区三区 | 中文字幕一区二区三区在线不卡 | 两性色黄视频在线观看 | 艳魔大战4春荡女淫 |