在學習資料滿天飛的大環境下,知識變得非常零散,體系化的知識并不多,這就導致很多人每天都努力學習到感動自己,最終卻收效甚微,甚至放棄學習,我的使命就是過濾掉大量的垃圾資訊,將知識體系化,以短平快的方式直達問題本質,把大家從大海撈針的痛苦中解脫出來,
文章目錄
- 1 內核配置流程
- 2 檔案組織背后的邏輯
- 2.1 auto.conf為什么放在/include/config目錄下
- 2.2 autoconf.h為什么放在/include/linux目錄下
- 3 內核配置的底層思想
1 內核配置流程
內核配置流程如下圖所示:

配置的最終目的是裁剪,裁剪分為檔案粒度的裁剪和代碼行粒度的裁剪,因此需要分別生成auto.conf檔案和autoconf.h檔案給Makefile和源檔案使用,
核心中轉檔案是.config檔案,該檔案其實可以直接由用戶通過make menuconfig一項項地進行配置,但是往往不會選擇這樣做,一個原因是配置項太多,用戶不可能一一全部弄懂;還有一個原因是本著 繼承復用 的思想,一般都需要整一個 藍本 ,然后在這個基礎上再去修改,這也就是設計Step1和Step2的初衷,
2 檔案組織背后的邏輯
Tips:無論是Linux原始碼還是其他大型工程的原始碼,其復雜性很大一部分體現在檔案組織的復雜上,首先理清檔案的組織結構對理解大型軟體架構有很大的幫助,而不是一頭扎進原始碼實作,
首先我們思考一下,Linux原始碼在進行檔案組織時為什么要設計一個 /include 檔案夾,
C語言的封裝性是由.c檔案和.h檔案(一般和.c檔案同名)共同完成的:對于一個模塊,.c檔案負責模塊功能實作,.h檔案負責對外介面呈現,
但.h檔案除了上面這個功能之外,還用于同層跨模塊,跨層,甚至是整個系統中配置和資訊的共享,此時的.h檔案是不依賴同名.c檔案獨立存在的,這類.h檔案,一部分(同層跨模塊,跨層的)放在層所在的檔案夾內,一部分(系統相關的)就需要建立一個 /include 來專門存放,
2.1 auto.conf為什么放在/include/config目錄下
auto.conf后綴名雖然不是.h,但也是被頂層Makefile包含的,也屬于頭檔案系;而且該檔案就是用來配置的檔案,所以放在/include/config目錄下無可厚非,如果是你,你也會這樣設計,
2.2 autoconf.h為什么放在/include/linux目錄下
那autoconf.h為什么不直接放在/include/config目錄下而要放在/include/linux目錄下呢?
原始碼中/include/config目錄下在配置和編譯之前都是空的,配置和編譯之后自動生成的配置相關的頭檔案會放在這里,從這個道理上來講,autoconf.h放在這個檔案夾中并沒有什么問題,
但是,你會發現/include/linux目錄下存放的都是編譯內核時真正要用到的系統相關的頭檔案,而autoconf.h確實也屬于這類頭檔案,所以放在這里從邏輯上講也是合情合理,而且編譯時處理起來可能更加方便(就像炒菜時將原材料全部放在手邊一樣),還有一個原因就是,作者可能故意將auto.conf和autoconf.h分開存放,因為它們兩個的名字太像了~~
因此,最終選擇將autoconf.h放在/include/linux目錄下,
Tips:僅僅是個人分析的結論,如果有更好的看法歡迎交流探討,而且,我覺得autoconf.h放在/include/config目錄下也并沒有什么不妥,在此提起這個議題主要是為了強調對檔案組織分析的重要性,引導大家以分析代替死記硬背,因為Linux實在是太龐大了,
3 內核配置的底層思想
Linux之所以可以任意裁剪,支持多款處理器架構,就是因為具有強大的配置體系,
支持單一處理器架構或單一功能的代碼,設計思想是設計的功能即支持的功能,簡單來說就是——存在的模塊即為有效的模塊,
而 配置思想 則將“存在即有效”改進為“存在不一定有效”,將 存在與否 與 有效與否 區分開來(相當于增加了一層配置層),概念的拆分反映到代碼上就是增加一層,雖然層數增加了,但功能變得靈活和強大了,
這種 配置思想 也可以遷移到我們平時的工程代碼中,使代碼可以支持更多的設備和擁有更靈活的裁剪特性,設計出強大的平臺軟體,
<完>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/135242.html
標籤:其他
上一篇:BLE 技術(六)--- GATT Profile + ATT protocol + L2CAP(Core_v5.2)
下一篇:流量計故障處理
