make menucofnig過程詳解

2021-06-24 11:22:27 字數 2570 閱讀 4434

makefile menuconfig過程講解

當我們在執行make menuconfig這個命令時,系統到底幫我們做了哪些工作呢?

這裡面一共涉及到了一下幾個檔案我們來一一講解

linux核心根目錄下的scripts資料夾

arch/$arch/kconfig檔案、各層目錄下的kconfig檔案

linux核心根目錄下的makefile檔案、各層目錄下的makefile檔案

linux核心根目錄下的的.config檔案、arm/$arch/下的config檔案

linux核心根目錄下的 include/generated/autoconf.h檔案

1)scripts資料夾存放的是跟make menuconfig配置介面的圖形繪製相關的檔案,我們作為使用者無需關心這個資料夾的內容

2)當我們執行make menuconfig命令出現上述藍色配置介面以前,系統幫我們做了以下工作:

首先系統會讀取arch/$arch/目錄下的kconfig檔案生成整個配置介面選項(kconfig是整個linux配置機制的核心),那麼arch環境變數的值等於多少呢?

它是由linux核心根目錄下的makefile檔案決定的,在makefile下有此環境變數的定義:

或者通過 make arch=arm menuconfig命令來生成配置介面,

預設生成的介面是所有引數都是沒有值的

比如教務處進行考試,考試科數可能有外語、語文、數學等科,這裡相當於我們選擇了arm科可進行考試,

系統就會讀取arm/arm/kconfig檔案生成配置選項(選擇了arm科的卷子),系統還提供了x86科、milps科等10幾門功課的考試題

3)假設教務處比較「仁慈」,為了怕某些同學做不錯試題,還給我們準備了乙份參***(預設配置選項),存放在arch/$arch/configs下,對於arm科來說就是arch/arm/configs資料夾:

此資料夾中有許多選項,系統會讀取哪個呢?核心缺省會讀取linux核心根目錄下.config檔案作為核心的預設選項(試題的參***),我們一般會根據開發板的型別從中選取乙個與我們開發板最接近的系列到linux核心根目錄下(選擇乙個最接近的參***)

#cp arch/arm/configs/s3c2410_defconfig .config

4).config

假設教務處留了乙個心眼,他提供的參***並不完全正確(.config檔案與我們的板子並不是完全匹配),這時我們可以選擇直接修改.config檔案然後執行make menuconfig命令讀取新的選項

但是一般我們不採取這個方案,我們選擇在配置介面中通過空格、esc、回車選擇某些選項選中或者不選中,最後儲存退出的時候,linux核心會把新的選項(正確的參***)更新到.config中,此時我們可以把.config重新命名為其它檔案儲存起來(當你執行make distclean時系統會把.config檔案刪除),以後我們再配置核心時就不需要再去arch/arm/configs下考取相應的檔案了,省去了重新配置的麻煩,直接將儲存的.config檔案複製為.config即可.

5)經過以上兩步,我們可以正確的讀取、配置我們需要的介面了

那麼他們如何跟makefile檔案建立編譯關係呢?

當你儲存make menuconfig選項時,系統會除了會自動更新.config外,還會將所有的選項以巨集的形式儲存在

linux核心根目錄下的 include/generated/autoconf.h檔案下

核心中的源**就都會包含以上.h檔案,跟巨集的定義情況進行條件編譯。

當我們需要對乙個檔案整體選擇如是否編譯時,還需要修改對應的makefile檔案,例如:

我們選擇是否要編譯s3c2410_ts.c這個檔案時,makefile會根據config_touchscreen_s3c2410來決定是編譯此檔案,此巨集是在kconfig檔案中定義,當我們配置完成後,會出現在.config及autconf中,至此,我們就完成了整個linux核心的編譯過程。

最後我們會發現,整個linux核心配置過程中,留給使用者的介面其實只有各層kconfig、makefile檔案以及對應的原始檔。

比如我們如果想要給核心增加乙個功能,並且通過make menuconfig控制其聲稱過程

首先需要做的工作是:

修改對應目錄下的kconfig檔案,按照kconfig語法增加對應的選項;

其次執行make menuconfig選擇編譯進核心或者不編譯進核心,或者編譯為模組,.config檔案和autoconf.h檔案會自動生成;

最後修改對應目錄下的makefile檔案完成編譯選項的新增;

最後的最後執行make zimage命令進行編譯。

瀏覽過此 的人還瀏覽過

資料庫設計很簡單 新增1個瀏覽日誌表 瀏覽日誌表表名 visitlog 字段 使用者id playerid 訪問模組id modelid 訪問時間 visittime 資料庫很簡單,難度主要在根據資料庫內的記錄計算出 瀏覽此商品的顧客還瀏覽 的列表!以下給出語句並做詳細解釋。查詢出模組的id,模組的...

防止過擬合以及解決過擬合

過擬合 為了得到一致假設而使假設變得過度複雜稱為過擬合。乙個過配的模型試圖連誤差 噪音 都去解釋 而實際上噪音又是不需要解釋的 導致泛化能力比較差,顯然就過猶不及了。這句話很好的詮釋了過擬合產生的原因,但我認為這只是一部分原因,另乙個原因是模型本身並不能很好地解釋 匹配 資料,也就是說觀測到的資料並...

過擬合以及如何防止過擬合

過擬合即模型在訓練過程中對模型引數進行擬合的過程中,由於訓練資料集存在抽樣誤差 雜訊 複雜的模型在訓練的過程中會將抽樣誤差也一同進行擬合。這就導致訓練好的模型在訓練集上的表現很好,在測試集上的表現很差的原因。導致過擬合的主要原因有兩個 資料量太少和模型過於複雜 因為機器學習演算法在擬合出正確的規則後...