最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

一文講解Linux內(nèi)核Makefile執(zhí)行流程

2023-11-10 14:59 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿

1.1. Makefile基礎(chǔ)語(yǔ)法

如果還不熟悉Makefile語(yǔ)法,建議先系統(tǒng)的學(xué)習(xí)一下,特別是以下幾點(diǎn):

(1) Makefile哪些部分包含的是shell語(yǔ)句:

編譯規(guī)則中的指令部分

${shell XX},var != XX中的XX部分

$(if …, XX, XX)中的XX部分

(2) 變量展開(kāi):

=(延遲賦值)、:=(立即賦值)、!=(值為shell命令)、?=(條件賦值)、+=(追加)

(3) include:將指定的其它Makefile內(nèi)容,展開(kāi)到當(dāng)前Makefile

-f/-C:嵌套執(zhí)行指定(目錄中的)Makefile

執(zhí)行一個(gè)Makefile,并不是從第一行開(kāi)始執(zhí)行,而是從指定或默認(rèn)的編譯目標(biāo)開(kāi)始執(zhí)行(位置目標(biāo)編譯規(guī)則之前的賦值語(yǔ)句,只在相應(yīng)變量需要被使用時(shí)才會(huì)執(zhí)行),其中,Makefile(包括include內(nèi)容)中的第一個(gè)目標(biāo),為默認(rèn)目標(biāo),如果make命令行中沒(méi)有指定編譯目標(biāo),則執(zhí)行默認(rèn)目標(biāo)。

(4) 自動(dòng)推導(dǎo)依賴(lài)文件

(5) 根據(jù)文件時(shí)間戳、中間文件(.d、.cmd),判斷依賴(lài)更新,決定是否需要重新編譯

(6) 重要的內(nèi)置函數(shù):

$(wildcard pattern)

$(patsubst pattern, replacement, text)

$(strip string)

$(filter pattern, text)

$(filter-out pattern, text)

$(call func, args..)

(7) 自動(dòng)推導(dǎo)變量:

$@:編譯目標(biāo)

$<:依賴(lài)列表中的第一個(gè)依賴(lài)對(duì)象

$^:依賴(lài)列表中的所有對(duì)象

$?:依賴(lài)文件列表中所有有更新的文件

1.2. Kbuild內(nèi)置函數(shù)


Linux內(nèi)核源碼包含一套Makefile程序,本文基于Linux-5.2.5內(nèi)核源碼分析,其中包括top Makefile,scripts/目錄下的Makefile、Makefile.build、Makefile.lib、Kbuild.include、Makefile.modpost、kconfig/Makefile等,以及其它目錄下的很多子Makefile,統(tǒng)稱(chēng)為Kbuild。
Kbuild是按照框架設(shè)計(jì)思路實(shí)現(xiàn)的,使得內(nèi)核自身包含或外部提供的大量驅(qū)動(dòng)模塊,只需要按照Kbuild框架的約定,各自提供一個(gè)簡(jiǎn)單的Makefile即可編譯。

所以,理解內(nèi)核或驅(qū)動(dòng)文件的編譯過(guò)程,其實(shí)就是要理解Kbuild這套Makefile程序的實(shí)現(xiàn)邏輯,既然是程序,就免不了會(huì)定義一些函數(shù),由于很多關(guān)鍵的流程,都使用了$(build)和$(if_changed),所以以下先單獨(dú)介紹(本文分析的Makefile內(nèi)容,來(lái)自Linux-5.2.5內(nèi)核源碼):

1.2.1. $(build)


◆使用形式:$(Q)$(MAKE) $(build)=xx目錄 [編譯目標(biāo)]


◆build內(nèi)部過(guò)程


◆build作用概括

以下是$(build)的使用形式,以及每個(gè)部分的作用:


1.2.2. $(if_changed)


◆使用形式:$(call if_changed, xx)


◆if_changed內(nèi)部過(guò)程


◆if_changed作用概括
以下是$(if_changed)的使用形式,及其參數(shù)的含義:


二編譯外部模塊

2.1. 涉及Makefile內(nèi)容



2.2. 概要流程



2.3. 詳細(xì)流程



【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【749907784】整理了一些個(gè)人覺(jué)得比較好的學(xué)習(xí)書(shū)籍、視頻資料共享在群文件里面,有需要的可以自行添加哦!?。。ê曨l教程、電子書(shū)、實(shí)戰(zhàn)項(xiàng)目及代碼)? ? ?

零聲白金VIP體驗(yàn)卡(含基礎(chǔ)架構(gòu)/高性能存儲(chǔ)/golang/QT/音視頻/Linux內(nèi)核)課程:?



三make menuconfig

3.1. 涉及Makefile內(nèi)容



3.2. 概要流程



3.3. 詳細(xì)流程





四Make [all/_all/modules]

4.1. 涉及Makefile內(nèi)容


make命令行指定all/_all/modules目標(biāo),或者不指定目標(biāo)時(shí),是為了生成vmlinux文件,而vmlinux目標(biāo)間接依賴(lài)prepare目標(biāo),且prepare目標(biāo)編譯規(guī)則展開(kāi)內(nèi)容比較多,所以以下分開(kāi)介紹:
◆vmlinux目標(biāo)


◆prepare目標(biāo)


4.2. 概要流程


◆vmlinux目標(biāo)


◆prepare目標(biāo)


4.3. 詳細(xì)流程


◆vmlinux目標(biāo)


◆vmlinuz目標(biāo)



◆prepare目標(biāo)


原文作者:看雪學(xué)苑



一文講解Linux內(nèi)核Makefile執(zhí)行流程的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
湖北省| 分宜县| 宝清县| 阜新市| 万载县| 徐闻县| 肇源县| 壤塘县| 潮安县| 九寨沟县| 乌苏市| 铁岭市| 万源市| 邢台县| 湛江市| 克东县| 东乡县| 五家渠市| 班戈县| 芷江| 香格里拉县| 巴彦县| 项城市| 兴海县| 山阳县| 于田县| 潼南县| 林口县| 镇安县| 湖南省| 西盟| 湘阴县| 防城港市| 鹤庆县| 兰坪| 崇信县| 江门市| 武山县| 师宗县| 宕昌县| 车险|