色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区

當前位置: > 華清遠見教育科技集團 > 嵌入式學習 > 講師博文 > Linux內核的編譯流程簡析
Linux內核的編譯流程簡析
時間:2016-12-12作者:華清遠見

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

實際上它是一個偽目標:
     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)

從上面看到,FORCE 既沒有依賴的規則,其底下也沒有可執行的命令。

如果一個規則沒有命令或者依賴,而且它的目標不是一個存在的文件名,在執行此規則時,目標總會被認為是新的。也就是說,這個規則一旦被執行,make 就認為它所表示的目標已經被更新過。當將這樣的目標(FORCE)作為一個規則的依賴時(如上的 vmlinux: ),由于依賴總被認為是被更新過的,所以作為依賴所在的規則定義的命令總會被執行。

比如上面的 vmlinux: 在每次 make 時,它下面的這些命令總會被執行:
        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之前加上一個長度為0x40的"頭",說明這個映像文件的類型、加載位置、生成時間、大小等信息。換句話說,如果直接從uImage的0x40位置開始執行,zImage和uImage沒有任何區別。另外, Linux2.4內核不支持uImage,Linux2.6內核加入了很多對嵌入式系統的支持,但是uImage的生成也需要設置。

先分析一下zImage的組成。在內核編譯完成后會在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二進制化得到的
        在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是由內核頂層目錄下的vmlinux二進制化后得到的。注意:

arch/arm/boot/compressed/vmlinux是位置無關的,這個有助于理解后面的代碼,鏈接選項中有個 –fpic參數:
        EXTRA_CFLAGS := -fpic

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

發表評論
評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区
主站蜘蛛池模板: 国产精品久久久久一区二区| 欧美日韩一区二区在线| 国产欧美一区二区三区视频 | 2023亚洲男人天堂| 色狠狠久久aa北条麻妃| 91九色在线视频| 国产精品96久久久久久| 欧美视频在线免费| 亚洲日本中文字幕| 亚洲护士老师的毛茸茸最新章节| 91在线观看免费高清完整版在线观看 | 日韩在线观看免费高清完整版| 日韩国产精品一区| 国产精品自产拍高潮在线观看| 国产成人午夜视频网址| 欧美日韩激情视频8区| 久久久国产精彩视频美女艺术照福利| 久久天天躁狠狠躁夜夜躁| 久久综合国产精品台湾中文娱乐网| 精品国产欧美一区二区三区成人| 久久综合久久八八| 欧美日韩国产一区中文午夜| 欧美大片欧美激情性色a∨久久| 亚洲理论电影网| 中文字幕亚洲国产| 欧美精品性视频| 欧美激情久久久久| 国产精品免费网站| 91视频国产一区| 国产一区二区精品丝袜| 久久五月天色综合| 日韩欧美精品在线观看| 国产精品伦子伦免费视频| 91亚洲精华国产精华| 亚洲一区二区久久| 欧美理论在线观看| 日本精品一区二区三区在线| 亚洲精品欧美日韩| 亚洲乱码国产乱码精品精| 欧美成人免费观看| 最好看的2019的中文字幕视频|