国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

08_Uboot頂層Makefile分析_make過程

這篇具有很好參考價(jià)值的文章主要介紹了08_Uboot頂層Makefile分析_make過程。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

make 過程


make 過程

配置好 uboot 以后就可以直接make 編譯了,因?yàn)闆]有指明目標(biāo),所以會(huì)使用默認(rèn)目標(biāo),主 Makefile 中的默認(rèn)目標(biāo)如下:

08_Uboot頂層Makefile分析_make過程

?目標(biāo)_all 又依賴于all,如下所示:

08_Uboot頂層Makefile分析_make過程

08_Uboot頂層Makefile分析_make過程

如果KBUILD_EXTMOD為空的話_all 依 賴 于all 。這 里 不 編 譯 模 塊,所 以KBUILD_EXTMOD肯定為空,_all 的依賴就是all。在主 Makefileall目標(biāo)規(guī)則如下:

08_Uboot頂層Makefile分析_make過程

802行可以看出,all目標(biāo)依賴$(ALL-y),而在頂層Makefile中,ALL-y如下:

08_Uboot頂層Makefile分析_make過程

08_Uboot頂層Makefile分析_make過程

?從示例代碼代碼可以看出,ALL-y 包含 u-boot.srec、u-boot.binu-boot.sym、System.map、u-boot.cfg binary_size_check 這幾個(gè)文件。根據(jù) uboot 的配置情況也可能包含其 他的文件,比如:

ALL-$(CONFIG_ONENAND_U_BOOT) += u-boot-onenand.bin?

CONFIG_ONENAND_U_BOOT就是uboot中跟ONENAND配置有關(guān)的,如果我們使能ONENAND,那么在.config 配置文件中就會(huì)有“CONFIG_ONENAND_U_BOOT=y”這一句。相 當(dāng)于 CONFIG_ONENAND_U_BOOT 是個(gè)變量,這個(gè)變量的值為“y”,所以展開以后就是:

?ALL-y += u-boot-onenand.bin

這個(gè)就是.config 里面的配置參數(shù)的含義,這些參數(shù)其實(shí)都是變量,后面跟著變量值,會(huì)在 頂層 Makefile 或者其他 Makefile 中調(diào)用這些變量。

ALL-y 里面有個(gè)u-boot.bin,這個(gè)就是我們最終需要的uboot二進(jìn)制可執(zhí)行文件,所作的所有工作就是為了它。在頂層Makefile中找到u-boot.bin目標(biāo)對(duì)應(yīng)的規(guī)則,如下所示:

08_Uboot頂層Makefile分析_make過程

825行判斷CONFIG_OF_SEPARATE是否等于y如果相等,那條件就成立,在.config中搜索“CONFIG_OF_SEPARAT”,沒有找到,說明條件不成立。

832行就是目標(biāo)u-boot.bin的規(guī)則,目標(biāo)u-boot.bin依賴于u-boot-nodtb.bin,命令為$(call if_changed,copy) ,這里調(diào)用了 if_changed ,if_changed是一個(gè)函數(shù),?這個(gè)函數(shù)在scripts/Kbuild.include中有定義,而頂層Makefile中會(huì)包含scripts/Kbuild.include 文件,這個(gè)前面已經(jīng)說過了。if_changed 在 Kbuild.include 中的定義如下:?

08_Uboot頂層Makefile分析_make過程

08_Uboot頂層Makefile分析_make過程

?第227行為if_changed的描述,根據(jù)描述,在一些先決條件比目標(biāo)新的時(shí)候,或者命令行 有改變的時(shí)候,if_changed就會(huì)執(zhí)行一些命令。

257行就是函數(shù)if_changed,if_changed函數(shù)引用的變量比較多,也比較繞,我們只需要知道它可以從u-boot-nodtb.bin生成u-boot.bin就行了。

既然u-boot.bin依賴于u-boot-nodtb.bin,那么肯定要先生成u-boot-nodtb.bin文件,頂層Makefile中相關(guān)代碼如下:

08_Uboot頂層Makefile分析_make過程

?目標(biāo)u-boot-nodtb.bin又依賴于u-boot,頂層Makefileu-boot相關(guān)規(guī)則如下:

08_Uboot頂層Makefile分析_make過程

?目標(biāo)u-boot依賴于u-boot_init、u-boot-mainu-boot.lds,u-boot_initu-boot-main是兩個(gè)變量,在頂層Makefile中有定義,值如下:

08_Uboot頂層Makefile分析_make過程

$(head-y)CPU架構(gòu)有關(guān),我們使用的是ARM芯片,所以head-yarch/arm/Makefile中被指定為:

head-y := arch/arm/cpu/$(CPU)/start.o

根據(jù)分析,我們知道CPU=armv7,因此head-y展開以后就是:

?head-y := arch/arm/cpu/armv7/start.o

因此:?

u-boot-init= arch/arm/cpu/armv7/start.o?

$(libs-y)在頂層Makefile中被定義為uboot所有子目錄下build-in.o的集合,代碼如下:

08_Uboot頂層Makefile分析_make過程

08_Uboot頂層Makefile分析_make過程

從上面的代碼可以看出,libs-y都是uboot各子目錄的集合,最后:??

libs-y := $(patsubst %/, %/built-in.o, $(libs-y)) ?

這里調(diào)用了函數(shù)patsubst,將libs-y中的“/”替換為”/built-in.o”,比如“drivers/dma/”就變?yōu)榱恕?/span>drivers/dma/built-in.o”,相當(dāng)于將libs-y改為所有子目錄中built-in.o文件的集合。那么u-boot-main就等于所有子目錄中built-in.o的集合。

這個(gè)規(guī)則就相當(dāng)于將以u-boot.lds為鏈接腳本,將arch/arm/cpu/armv7/start.o和各個(gè)子目錄

下的built-in.o鏈接在一起生成u-boot。

u-boot.lds的規(guī)則如下:

08_Uboot頂層Makefile分析_make過程

接下來的重點(diǎn)就是各子目錄下的built-in.o是怎么生成的,以 drivers/gpio/built-in.o為例,在drivers/gpio/目錄下會(huì)有個(gè)名為.built-in.o.cmd 的文件,此文件內(nèi)容如下:

08_Uboot頂層Makefile分析_make過程

?從命令“cmd_drivers/gpio/built-in.o”可以看出,drivers/gpio/built-in.o這個(gè)文件是使用ld命令由文件 drivers/gpio/mxc_gpio.o生成而來的,mxc_gpio.omxc_gpio.c編譯生成的.o文件,這個(gè)是NXPI.MX系列的GPIO驅(qū)動(dòng)文件。這里用到了ld的“-r”參數(shù),參數(shù)含義如下:

-r –relocateable:?產(chǎn)生可重定向的輸出,比如,產(chǎn)生一個(gè)輸出文件它可再次作為‘ld’的輸入,這經(jīng)常被叫做“部分鏈接”,當(dāng)我們需要將幾個(gè)小的.o文件鏈接成為一個(gè).o文件的時(shí)候,需要使用此選項(xiàng)。最終將各個(gè)子目錄中的built-in.o文件鏈接在一起就形成了u-boot,使用如下命令編譯uboot就可以看到鏈接的過程:

08_Uboot頂層Makefile分析_make過程

?編譯的時(shí)候會(huì)有如圖所示內(nèi)容輸出:

08_Uboot頂層Makefile分析_make過程

?將其整理一下,內(nèi)容如下:

08_Uboot頂層Makefile分析_make過程

08_Uboot頂層Makefile分析_make過程

可以看出最終是用arm-linux-gnueabihf-ld.bfd命令將arch/arm/cpu/armv7/start.o和其他眾多的 built_in.o鏈接在一起,形成 u-boot。

目標(biāo)all除了u-boot.bin以外還有其他的依賴,比如 u-boot.srec 、u-boot.sym System.map、 u-boot.cfgbinary_size_check等等,這些依賴的生成方法和u-boot.bin很類似,大家自行查看 一下頂層 Makefile。

?

總結(jié)一下“make”命令的流程,如圖所示:

08_Uboot頂層Makefile分析_make過程

?

就是“make”命令的執(zhí)行流程,關(guān)于uboot的頂層Makefile就分析到這里,重點(diǎn)是“make xxx_defconfig”和“make”這兩個(gè)命令的執(zhí)行流程:

make xxx_defconfig:用于配置uboot,這個(gè)命令最主要的目的就是生成.config 文件。

make:用于編譯uboot,這個(gè)命令的主要工作就是生成二進(jìn)制的u-boot.bin文件和其他的一 些與 uboot有關(guān)的文件,比如u-boot.imx等等。 文章來源地址http://www.zghlxwxcb.cn/news/detail-433901.html

到了這里,關(guān)于08_Uboot頂層Makefile分析_make過程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Linux】vim(附配置sudo)、yum、gcc、g++、gdb、make/Makefile工具匯總

    【Linux】vim(附配置sudo)、yum、gcc、g++、gdb、make/Makefile工具匯總

    (一)歷史沉淀 我們?cè)诎惭b一個(gè)軟件之前,需要先下載對(duì)應(yīng)的軟件包,但是這個(gè)軟件包并不存在于我們本地的計(jì)算機(jī)磁盤,而是存在于遠(yuǎn)端服務(wù)器上;那么計(jì)算機(jī)如何知道該軟件存在于具體的哪一臺(tái)服務(wù)器上呢? 對(duì)于電腦來說,我們一般通過搜索對(duì)應(yīng)軟件的官網(wǎng)來得到相應(yīng)

    2024年02月13日
    瀏覽(54)
  • [QT]+[Cmake]+[openCV]配置環(huán)境報(bào)錯(cuò):mingw32-make: *** [Makefile:165: all] Error 2等問題的解決辦法

    [QT]+[Cmake]+[openCV]配置環(huán)境報(bào)錯(cuò):mingw32-make: *** [Makefile:165: all] Error 2等問題的解決辦法

    當(dāng)前作者各軟件的版本:QT5.14.2 + CMAKE?3.29.0 +openCV 4.5.4 Qt配置OpenCV教程,親測(cè)已試過(詳細(xì)版)_qt opencv-CSDN博客 配置的時(shí)候主要參考了以上文章 出現(xiàn)的第一個(gè)問題是在cmake configure的時(shí)候卡在 FFMPEG: Downloading ffmpeg_version.cmake from https://raw.githubusercontent.com/opencv/opencv_3rdparty/7dd0d4

    2024年04月26日
    瀏覽(32)
  • make/makefile的使用

    make/makefile的使用

    make是一個(gè)命令,是一個(gè)解釋makefile中指令的命令工具,makefile是一個(gè)文件,當(dāng)前目錄下的文件,兩者搭配使用,完成項(xiàng)目自動(dòng)化構(gòu)建 make/makefile是Linux項(xiàng)目自動(dòng)化構(gòu)建工具,將多個(gè)源文件放在makefile中,通過make命令,通過makefile文件中的依賴關(guān)系,使得文件實(shí)現(xiàn)自動(dòng)化編譯,極

    2024年02月16日
    瀏覽(17)
  • Linux--make & makefile

    make 工具可以看成是一個(gè)智能的批處理工具,它本身并沒有編譯和鏈接的功能, 而是用類似于批處理的方式—— 通過調(diào)用 makefile 文件中用戶指定的命令來進(jìn)行編譯和鏈接的 。 makefile 命令中就包含了調(diào)用 gcc(也可以是別的編譯器)去編譯某個(gè)源文件的命令。 makefile 在一些簡(jiǎn)

    2024年02月12日
    瀏覽(21)
  • make和makefile

    make和makefile

    make是一條指令 makefile是一個(gè)文件 make和makefile一般都是兩兩配合使用,熟練掌握這倆的使用方法會(huì)對(duì)我們以后完成大型工程的能力打下基礎(chǔ) 我們知道,使用gcc/g++運(yùn)行程序時(shí)需要輸入許多 指令,而make/makefile可以很好的幫助我們節(jié)省掉這些繁雜的編寫過程,接下來我先告訴大家

    2024年04月25日
    瀏覽(15)
  • opencv安裝make時(shí)報(bào)錯(cuò): 沒有指明目標(biāo)并且找不到makefile make: *** 沒有指明目標(biāo)并且找不到 makefile。 停止。

    在利用安裝包進(jìn)行opencv安裝時(shí),當(dāng)按照指令安裝好依賴,進(jìn)行下載opencv文件夾下,建立build文件夾并進(jìn)入其文件夾后,利用CMAKE進(jìn)行編譯,但是編譯成功之后,我們進(jìn)行 sudo make 的時(shí)候會(huì)出現(xiàn)如下錯(cuò)誤: 此時(shí),首先解釋一下原因是因?yàn)閏make之后在build文件夾中沒有makefile文件,所

    2024年02月11日
    瀏覽(22)
  • Linux工具make與makefile

    Linux工具make與makefile

    自動(dòng)化構(gòu)建工具 make / Makefile 是一個(gè)備受關(guān)注的話題。在現(xiàn)代軟件開發(fā)中,構(gòu)建和部署過程越來越復(fù)雜,需要更加高效和自動(dòng)化的工具來幫助開發(fā)人員管理項(xiàng)目。 Make / Makefile 就是這樣一種工具,它可以通過定義規(guī)則和依賴關(guān)系來自動(dòng)化地構(gòu)建項(xiàng)目。本文將介紹 make / Makefile 的

    2023年04月19日
    瀏覽(25)
  • make/makefile/cmake/nmake

    最近,有沒有被make、cmake、makefile... ... 這些東西繞暈了,看看下面的文章,也許就可以理解清楚了。 它是GNU Compiler Collection(就是GNU編譯器套件),也可以簡(jiǎn)單認(rèn)為是 編譯器 ,它可以編譯很多種編程語言(括C、C++、Objective-C、Fortran、Java等等)。 我們的程序 只有一個(gè) 源文

    2024年02月13日
    瀏覽(22)
  • 【Linux】Make和Makefile快速入門

    【Linux】Make和Makefile快速入門

    作者簡(jiǎn)介:?舊言~,目前大二,現(xiàn)在學(xué)習(xí)Java,c,c++,Python等 座右銘:松樹千年終是朽,槿花一日自為榮。 目標(biāo):熟練掌握Make和Makefile的使用 毒雞湯:人生就像一條河,左岸是無法忘卻的回憶,右岸是值得把握的青春,中岸是正在燃燒的面孔。 望小伙伴們點(diǎn)贊??收藏?加

    2024年02月04日
    瀏覽(17)
  • Linux: make/Makefile 相關(guān)的知識(shí)

    Linux: make/Makefile 相關(guān)的知識(shí)

    ? 會(huì)不會(huì)寫makefile,從一個(gè)側(cè)面說明了一個(gè)人是否具備完成大型工程的能力 一個(gè)工程中的源文件不計(jì)數(shù),其按類型、功能、模塊分別放在若干個(gè)目錄中,makefile定義了一系列的 規(guī)則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進(jìn)行更復(fù)

    2024年01月24日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包