2023-06-24 12:59:38來源:面包芯語
我們在編譯Linux內核時,往往在Linux內核的頂層目錄會執(zhí)行一些命令,這里我以RK3288舉例,比如:make firefly-rk3288-linux_defconfig、make menuconfig、make firefly-rk3288.img、make zImage等等。先不管這具體的含義,首先提出幾個疑問
(1)Linux內核如此龐大(幾萬個文件),目錄又分為很多層,它是如何將各層目錄下的文件關聯起來的?
(資料圖片)
(2)Linux支持如此多的架構(X86、ARM、AVR、mips等等),為何我們在使用某一架構的芯片,比如RK3288時,其他架構的代碼不會被編譯?并且同為ARM架構下的其他系列SOC架構相關的代碼不被編譯?
(3)在編譯內核前,執(zhí)行命令:make menuconfig的意義為何?
(4)編譯內核時,執(zhí)行命令:make zImage的意義為何?
(5)Linux內核中各層目錄下的Makefile文件和Kconfig文件是如何編寫的。
個人認為,當理解了解決了以上的幾個問題,那么本文題目的疑問就自然而然的解決了。以下筆者來一一回答這個問題:
問題1.Linux內核如此龐大(幾萬個文件),目錄又分為很多層,它是如何將各層目錄下的文件關聯起來的?
關于此問題,如果要準確的回答,估計只有真正的大神才能回答了,這里只講自己的理解。Linux內核源碼的代碼管理是非??茖W的,在Linux內核源碼的頂層目錄下,分配了相應的目錄,在對應的目錄下,代表這就一些功能或者是屬性的集群,這樣就實現了模塊化,便于管理,比如arch目錄與平臺架構相關、include目錄存放著大量的內核頭文件、drivers目錄存放著各種驅動代碼,比如顯卡、網卡、USB總線、PCI總線等等、kernel目錄存放著支持體系結構特有的諸如信號量處理和SMP之類特征的實現、mm目錄存放著體系結構特有的內存管理程序的實現等等;然而在各個子目錄下,又會進行細分,比如arch目錄下,就存在和x86架構相關的目錄x86、與ARM架構相關的目錄arm、與MIPS目錄相關的目錄mips等等,以此類推。所以這就構成了一顆樹形結構。
學習過數據結構的童鞋應該知道,對于一棵非標準樹,還是有辦法將其進行遍歷的,只是算法比較復雜而已。那么在Linux內核源碼的這棵樹,就是通過Kconfig文件建立各層子目錄之間的連接,通過Makefile文件來選擇各個目錄下的對應的文件是否被編譯,而.config文件就像是作為總控制臺吧,控制著Makefile文件去編譯指定的程序代碼文件(主要是C和匯編)。而這一切控制關系是由Kconfig文件建立起來的。
在我理解而言,這其實就是在遍歷樹形結構時,用的一種方法,即指路法。每當我們在某個陌生的地方問路時,假設從A地到E地,情景通常如下:
通常我們也會按照路人的回答,很準確的就找到了目的地E,所以,在程序中或者代碼架構中也是一樣的。所以在Linux內核源碼中,.config文件就相當于路人,而Kconfig就為問路的人,而Makefile就為兩只腳了,聽指令干苦力的貨!嘿嘿!
問題2.Linux支持如此多的架構(X86、ARM、AVR、mips等等),為何我們在使用某一架構的芯片,比如RK3288時,其他架構的代碼不會被編譯?并且同為ARM架構下的其他系列SOC架構相關的代碼不被編譯?
關于這個問題,其實和我們在編譯Linux內核時,執(zhí)行的命令:make firefly-rk3288-linux_defconfig或者make menuconfig有關了,執(zhí)行以上兩個命令的目的是為了生成.config文件。往往我們執(zhí)行命令make menuconfig只是為了修改一些驅動模塊和要編譯的一些程序,往往我們是不會去選擇架構相關的,比如說,自行的去選擇RK3288這顆SOC,再去選擇基于Firefly平臺的板卡,其實這也是可以的,只要你開心,都可以自行在菜單里面選擇,但是通常我們不會這樣,我們通常是先執(zhí)行make firefly-rk3288-linux_defconfig生成了一個基于Firefly平臺的RK3288相關配置的.config文件,然后再執(zhí)行命令make menuconfig來選擇一些模塊代碼進行編譯,這樣做的好處就是減少了很多工作量。當然,存在一個問題是,假設需要編譯的內核不支持現有的開發(fā)板怎么辦?比如從官網下載下來的原始Linux內核源碼,只支持RK3288這顆SOC,但是并沒有急于Firefly開發(fā)的這款RK3288的開發(fā)板,怎么辦呢?這涉及到了Linux內核的移植,在此不作過多的敘述,提醒一點的是,可以找一塊基于RK3288這顆SOC的開發(fā)板的配置(在官方發(fā)布的初始Linux內核源碼中,每支持一款SOC,基本上都會對于的支持一款官方開發(fā)板作為參考),進行移植和模擬,最后生成一個類似于firefly-rk3288-linux_defconfig的配置文件,用它來生成基本的.config文件。
清楚了以上的關系,在根據問題1的原因,就不難理解了。沒錯,就是基于firefly-rk3288-linux_defconfig文件生成了基礎的,默認的.config配置文件,此文件的內容就包含了架構相關的東西,所以在進行Linux內核源碼的編譯時,根據.config文件的基本配置,尋找架構相關的代碼進行編譯和設備相關的代碼進行編譯??傊黄鸲?config這個控制臺為準。
問題3.在編譯內核前,執(zhí)行命令:make menuconfig的意義為何?
其實這個問題在前兩個問題中基本上都回答了,make menuconfig就是以菜單的形式打開內核源碼的樹形結構,然后程序員在默認配置的基礎上自行配置和選擇需要編譯的模塊代碼。
其實能做這個工作的命令有很多,比如:
?make config:基于文本的最為傳統(tǒng)的配置界面,太復雜,不直觀,不推薦使用。
?#make xconfig:基于圖形窗口模式的配置界面,直觀明了,Xwindow界面下推薦使用。
?make oldconfig:如果只想在原來內核配置的基礎上修改一些小地方,會省去不少麻煩,可以使用。
?make menuconfig:基于文本選單的配置界面,直觀明了,字符終端下推薦使用。
大概好像這幾種吧,其實還有一種就是,手動修改.config文件,呵呵!相信基本上沒人會去干這種事的。
問題4.編譯內核時,執(zhí)行命令:make zImage的意義為何?
通常在編譯時,都是執(zhí)行這個命令或者執(zhí)行make uImage命令進行編譯的。意義為何呢?其實是生成名為zImage或uImage的內核鏡像。當然,有人在疑問了,在編譯Firefly的RK3288開發(fā)板時,執(zhí)行的命令是make firefly-rk3288.img ,而不是上面的任何一個,其實這是Firefly修改過的方法了,其實說白了也就是一個名字而已。這個不要太過糾結,想具體了解的話,答案就在Firefly提供的內核源碼內。
執(zhí)行編譯命令后,通過.config文件、Kconfig文件和Makefile文件,就可以有規(guī)律有選擇的去編譯源代碼了。
問題5.內核中各層目錄下的Makefile文件和Kconfig文件是如何編寫的。
其實前面的4個問題只是基礎的鋪墊,這才是重點,但是這里必須依賴于前面的原理。
首先我們先確定一點,在Linux內核源碼的各層目錄下。都存在一個Kconfig文件和一個Makefile文件,.config文件存在頂層目錄。如下圖:
上圖基本上可以證明一切了。
為了更好的詮釋,我在drivers目錄下創(chuàng)建了一個my_dr目錄,主要存放我自己編寫的內核驅動代碼,此目錄下的其他目錄都是我編寫的驅動代碼,現在需要將它們連接起來,當執(zhí)行make menuconfig命令時,能夠找到我自己編寫的內核驅動代碼。在這里以一個hello程序舉例。
那么到底該如何做呢??????????兩字:“模仿”!
如下圖:
上圖中就是我要舉例的目錄層了,hello目錄里為hello.c程序;my_dr目錄里為我想把我自己寫的驅動程序存放的目錄;drivers目錄為Linux內核驅動目錄;firefly-rk3288-kernel目錄為Linux內核源碼頂層目錄。所以按照前文的推斷,在每一層目錄下都會存在一個Makefile文件和一個Kconfig文件。下面從最底層hello到drivers目錄各層Makefile文件和Kconfig文件分析。
(1)hello目錄
如上圖,左邊為Makefile文件,右邊為Kconfig文件。對于Makefile文件,如果變量CONFIG_HELLO為真或假,則判斷這是否將目錄下的hello.c文件編譯為hello.o文件。CONFIG_HELLO變量的值來自于.config文件的配置。.config的配置又來自于通過Kconfig文件的顯式選擇(就是通過菜單選擇)。再看Kconfig文件,如下圖:
Config為配置關鍵字;HELLO為配置項;tristate為三態(tài)選擇器,此關鍵字在為上層提供菜單配置時,有三種選擇,分別是不編譯、編譯成內核鏡像和編譯成模塊驅動,除了這個關鍵字,還有另一個bool,這個不難理解,即為布爾類型,西游兩種選擇,編譯或者不編譯;help為幫助提示。這基本上是比較經典的格式了。所以通常在進行編寫這樣的配置時,通常的做法是參考Linux內核源碼中存在的Kconfig文件和Makefile文件,然后模仿他們的格式進行編寫。
(2)my_dr目錄
如上圖,即為mu_dr目錄下的Makefile文件和Kconfig文件的內容了。對于Makefile文件,一句話指引找到hello目錄。而對于Kconfig文件,因為my_dr目錄下可能要存在很多驅動程序,所以必須要建立好一個菜單,進行對各個驅動程序的選擇,所以第1行代碼就算建立名為my Drivers的菜單;第5行代表可以在相對路徑drivers/my_dr/hello/Kconfig找到Kconfig資源(注意,這里的路徑是相對于Linux內核源碼的頂層目錄的)。最后的第7行表示使用關鍵字endmenu結束文件。
(3)drivers目錄
如上圖,即為drivers目錄下的Makefile文件和Kconfig文件了。還是一樣的,在Makefile文件中添加洗衣歌資源的菜單目錄路徑;而在Kconfig文件中,還是添加此目錄下的資源的Kconfig文件的路徑。就這樣配合使用。而且,基本上在這兩個文檔中,可以直接看到很多的參考示例,直接參考即可!其實有一個疑問是,在Makefile文件中,比如第158行,如下圖:
存在變量CONFIG_GATOR,這是為啥嘞?其實是這樣的,這表示如果想想在菜單中顯示選擇關于gator的目錄菜單,就必須依賴于變量CONFIG_GATOR的值為y,這樣才能在使用make menuconfig命令時,才能看到gator目錄下的菜單,而CONFIG_GATOR變量則是在gator目錄的上層,依賴于某些代碼,選擇后,其值為y。而筆者自己寫的直接使用了語句obj-y,表示變量值為y(其實就是yes),所以直接就可見了,不依賴于其他的代碼。
那么整一個過程就如上三步了,現在執(zhí)行make menuconfig命令查看是否能看到前面建立的菜單。如下圖:
如上圖可以看到我自己創(chuàng)建的名為my Dribers的菜單了。
如上兩圖即為所使用的tristate關鍵字所表現出的三態(tài)結果了,即就是三種狀態(tài)??梢园凑招枰M行合適的選擇即可。
定期以通俗易懂的方式分享嵌入式知識,關注公眾號,加星標,每天進步一點點。
聲明:
本號原創(chuàng)、轉載的文章、圖片等版權歸原作者所有,如有侵權,請聯系刪除。
?
關鍵詞:
責任編輯:FDIC意外“錯誤”披露,市場獲知硅谷銀行危機中獲救的巨頭名單,存款,儲
要開始裝修了,很多朋友都比較焦慮,覺得裝修是個大工程,無從下手。我
——河北正定采訪見聞(副題)經濟日報記者王勝強位于石家莊市正定高新
2023年巴西國際制藥技術展覽會與巴西國際美容包裝展覽會日前在巴西圣保
打贏了也得加入?陳國豪出戰(zhàn)大運會,決賽對手當他教練!,陳磊,籃球,陳
連枝銅燈1987年出土于貴州省興仁縣雨樟鎮(zhèn)交樂6號墓,是一件東漢時期的
杜蘭特加入“KD不是前五球員”推特聊天室直呼:你們不懂球!,推特,聊天
1、平時要多吃白菜,豆制品,海帶,魚類,酸奶。2、紅薯中含有抗癌物質
中新社香港6月24日電(記者曾平)國泰航空一班前往洛杉磯的客機中止起飛
周六競籃焦點:王牌勢不可擋狂熱狀態(tài)尚可
玖合憶界系列32GBDDR43200MHz臺式機內存條京東活動價299 9元,使用滿30
1、長城電源是一個質量很好的品牌,但也有檔次差別。2、我猜想樓主買的
發(fā)財樹的養(yǎng)護方法發(fā)財樹是一種常見的觀葉植物,也是許多人家庭裝飾的首
6月23日,北京市教委發(fā)布《關于做好應對高溫天氣有關工作的通知》,明
基于軍事大數據的自身特性,提前構筑一個數字化的“孿生戰(zhàn)場”,實現對
【程序員忙里偷閑2年做出一部歷史劇】上海,90后程序員楊利輝是個歷史
消息(新聞聯播):今天(6月23日)是端午假期的第二天,全國鐵路客流
1、方法一:撥打中國電信官方服務號碼10000,根據提示選擇人工客服,然
新聞多一點當地時間23日,俄羅斯國防部發(fā)布聲明稱,在社交網絡上以普里
6月24日凌晨,國泰航空一架赴美飛機在香港機場疑因輪胎發(fā)生故障,中止
近日,日本不顧國內外強烈反對,強行開始試運行核污染水排海設備。當地
勇士簽約達成!悍將表態(tài)讓金州頭疼,保羅或成犧牲品,想奪冠很難,格林,
1、藏傳三眼天珠,真品品種比較少見;具體的價值取決于是否真品,補充
1、【問題描述】:電腦運行慢,操作起來電腦需要反映一段時間。2、【原
【俄南部軍區(qū)司令部附近出現武裝人員】俄羅斯羅斯托夫當地媒體報道稱,
FDIC意外“錯誤”披露,市場獲知硅谷銀行危機中獲救的巨頭名單,存款,儲
央視網消息:據中國氣象局網站消息,6月22日,北京、天津、河北、山東
1、這問題在te5CF專區(qū)里面講得挺詳細的。2、在攻略大全那塊。本文到此
端陽隨筆殷夢球五月端陽,湘陰的龍船劃得杠杠!湖邊河邊人聲鼎沸汽車堵
蛇象征著智慧和靈性,在未來的7天里,他們將迎來財富的逆轉奇跡。狗象
【電影《八角籠中》點映及預售總票房破5000萬】據貓眼專業(yè)版微博,貓眼
剛剛!2023江西高考分數線出爐!江西省2023年全國普通高校文史類一本53
第一個雷區(qū)就是薄紗面料的連衣裙,尤其是便宜的薄紗裙子穿起來就會像地
微軟和美國聯邦貿易委員會(FTC)就微軟打算以690億美元收購動視暴雪展
紅網時刻新聞6月24日訊(記者文建美通訊員胡雨晴劉飄飄陳欣陳鄒恒)“
來源:溫度新聞連日來,“免費幫忙遛狗”詞條在社交平臺的熱度居高不下
央視網消息(新聞聯播):今天(6月23日)是端午假期的第二天,全國鐵路客
6月20日,河北省唐山市豐潤區(qū)白官屯鎮(zhèn)福慶寺小學的孩子們通過包粽子、
近日,據消息人士透露,尼康已更新鏡頭路線圖,預計今年內將推出35mmF1
要開始裝修了,很多朋友都比較焦慮,覺得裝修是個大工程,無從下手。我
上海將上調企業(yè)退休職工基本養(yǎng)老金水平,平均上調幅度為5 5%。具體辦法
記者日前從市應急管理局獲悉,端午假期,我市緊繃“安全弦”,組織市專
當地時間23日,俄羅斯國防部發(fā)布聲明稱,在社交網絡上以普里戈任名義傳
——河北正定采訪見聞(副題)經濟日報記者王勝強位于石家莊市正定高新
讓世遺邂逅音樂,讓音樂擁抱琴島。昨日記者獲悉,第四屆鼓浪嶼音樂節(jié)將
就在不久前,2023款奔馳GLS迎來了3 0T車型的二次改款上市,兩款車型官
就在兩人渡劫成功之后,唐三拉住美公子的小手兒,四目相對,又是嬌軀一
鄧利維:希望引入一些能進輪換的老將我們顯然需要補充身高,勇士,自由市
“語文114,數學132,外語142,理科綜合278,物理103 5,化學90,生物8
萬華巖溶洞漂流被譽為“世界溶洞第一漂”溶洞內溫度常年保持在18℃-20
失業(yè)、泡沫和外逃資本無祖國!
來為大家解答以上問題。白邊填充劑怎么用的視頻教程,白邊填充劑怎么用
就業(yè)要穩(wěn)存量,還要擴增量。當前很多新業(yè)態(tài)新職業(yè)的出現,為大學生就業(yè)
原標題:大山里來了健康小課桌中工網訊(工人日報-中工網記者李娜)近
【俄莫斯科州州長:該州安全保障措施已強化】當地時間24日,俄羅斯莫斯
這才是我國2022年真正最強的20座城市,廣州,南京,重慶,濟南,杭州,中小城
品牌是高質量發(fā)展的重要標志,也是商業(yè)競爭和文化傳播的重要方式。中國
本科一批:文史489,理工443;本科二批:文史403,理工336。陜西省2023
6月24日,微軟方面宣布將于今年8月23日關閉《極限競速:地平線1》和《
新華財經北京6月24日電(康耕甫)近日,由青島市委網信辦主辦,首頁傳
端午假期,多家景區(qū)和公園內綠樹成蔭、蓮葉田田,是市民游客納涼、賞景
亞匯網獲悉,據知情人士透露,高盛(G U)已開始在全球范圍內裁減董事總
?6月19日,香港交易所正式推出“港幣-人民幣雙柜臺模式”及雙柜臺莊家
關于紅薯含有哪些營養(yǎng)成分功效是什么的內容,包含紅薯中含有哪些營養(yǎng)成
受厄爾尼諾現象影響,巴拿馬過去數月持續(xù)少雨,造成大面積湖泊河流水位
長三角鐵路今日迎來端午假期返程客流高峰。6月24日,澎湃新聞記者從中
各園區(qū)、鎮(zhèn)(街)工業(yè)和信息化主管部門,各有關企業(yè):根據《關于堅持以制
對于小米這個品牌,想必大家不會陌生了,自誕生以來就一直秉承性價比的
本文轉自【央視新聞客戶端】; 據印尼媒體消息,當地時間6月24日,印尼
寵物養(yǎng)護與馴導學什么課程及畢業(yè)薪酬崗位去向就業(yè)前景怎么樣?下面小編
睡美人AndrewTarusov101條花斑狗AndrewTarusov小鹿班比AndrewTarusov
2023年巴西國際制藥技術展覽會與巴西國際美容包裝展覽會日前在巴西圣保
2023年端午假期,熱動的不僅有“舌尖上中國”的粽葉飄香,更有“文化里
徽州古城是中國歷史文化名城歙縣的核心。 歙縣是古徽州府治所在地,是
對此,俄國防部回應稱,關于“俄國防部對‘瓦格納’后方營地’進行打擊
人們生活的不規(guī)律,因此也導致眼袋的問題頻繁的出現,而只有選擇正確的
本周因端午假期僅有3個交易日,三大股指均表現不佳,滬指、深成指、創(chuàng)
人民日報北京6月23日電(記者石暢)記者從北京海關獲悉,今年1—5月,北
近年來,我市“博物館游”逐漸升溫,越來越多的市民走進博物館,靜下心
夏日深夜,位于越南北寧省的佳能工廠卻燈火通明,產線工人雙手一刻不停
西藏自治區(qū)市場監(jiān)督管理局原黨組書記果果涉嫌嚴重違紀違法,正接受西藏
70歲重慶首富“造系”:智翔金泰上市破發(fā),靠智飛生物“輸血”能撐多久
1、愿你,生意紅火,財源廣進,大江大河財富流,大海大湖收財富。2、祝
【俄莫斯科州州長:該州安全保障措施已強化】當地時間24日,俄羅斯莫斯
集微網消息,6月22日,芳源股份發(fā)布公告稱,公司于近日與盟固利簽訂了
央視網消息(新聞聯播):今年以來,我國經濟發(fā)展呈現回升向好態(tài)勢,中
1、{dúzhànáotóu}宮殿門前臺階上的鰲魚浮雕,科舉進士發(fā)榜時狀元站
1、主角突然有一天看見的世界變了,世界變成紅色路人都變成一個個肉球
青島經略海洋,全球首艘智慧漁業(yè)大型養(yǎng)殖工船“國信1號”馳騁深藍,海
隨著高等教育擴張,應屆生數量屢創(chuàng)新高。來自農村的高校畢業(yè)生大多數留
漳州打造“就業(yè)夜市”,求解“就業(yè)難”與“招人難”的結構性矛盾招聘方
在自主緊湊SUV銷量行列里,長期都被比亞迪宋PLUS(參數|詢價)霸榜,為了
據澎湃新聞,6月24日凌晨,國泰航空一架赴美飛機在香港機場疑因輪胎發(fā)
賽龍舟不僅僅是一項中華傳統(tǒng)民俗活動,更是一項競技運動,龍舟俱樂部也
1、造夢3現在還沒有能用的修改器,那些都是假的帶毒的用不了的玩正版的
隨著端午如期而至,青島市第三屆退役軍人創(chuàng)業(yè)創(chuàng)新大賽賽程過半,最為激
每經AI快訊,今日著名財經作家葉檀在微博發(fā)聲:“我活著,治療很有效。
1、區(qū)別:1stoptodo是停下正在做的事情,去做另外一件事情。2、2stopdo
天津大學2023年河南藝術類招生計劃年份省份校區(qū)類別科類專業(yè)名稱計劃人
受集中降雨影響,杭嘉湖區(qū)近24小時集中降雨量98 5毫米
全國鐵路今天預計發(fā)送旅客1515萬人次 【全國鐵路今天預計發(fā)送旅客1
最近這段時間,多個城市房價下跌的消息屢屢登上熱搜:杭州大廠房價格近
國家統(tǒng)計局今日發(fā)布2023年6月中旬流通領域重要生產資料市場價格變動情
在成都旅游,位于市中心的太古里是行程必經之處。在太古里走走逛逛、腳