天天看點

嵌入式開發:Uboot配置檔案mkconfig

作者:嵌入式Linux

在主Makefile中定義mkconfig:

嵌入式開發:Uboot配置檔案mkconfig

在主Makefile中使用mkconfig:

嵌入式開發:Uboot配置檔案mkconfig

在第2行使用了mkconfig ,在這裡使用了Makefile中的替換引用規則:類似常看到的例子obj=$(srcfile:%.c=%.o) ,将所有的.c檔案替換成.o(這裡隻是替換名字,不涉及其他)。這裡的$(@:_config=)是一樣的: @表示目标x210_sd_config,那麼 $(@:_config=) 就是将x210_sd_config中的_config替換為空,得到x210_sd。

經過以上分析可知第2行的轉換結果為:mkconfig x210_sd arm s5pc11x x210 samsung s5pc110,該句話的意思是執行mkconfig腳本檔案,并被這個腳本檔案傳遞6個參數。參數解析如下:

嵌入式開發:Uboot配置檔案mkconfig

1. 參數檢查

代碼:11 ~ 12行

嵌入式開發:Uboot配置檔案mkconfig

APPEND 表示是否要建立include/config.h檔案,在最後有了解。

BOARD_NAME為空。

代碼:14 ~ 21行

嵌入式開發:Uboot配置檔案mkconfig

進入while循環,先判斷條件是否滿足,即$#是否大于0,這裡$#為6,滿足條件,是以進入循環;然後在循環内$1作為switch的條件選擇執行,這裡$1=x210_sd,是以比對到 * ,是以執行break語句,直接跳出while循環。

代碼:23行

嵌入式開發:Uboot配置檔案mkconfig

如果 BOARD_NAME 為真,則後面的不執行,為假,則執行 BOARD_NAME="$1",即此時 BOARD_NAME= x210_sd

代碼:25 ~ 26行

嵌入式開發:Uboot配置檔案mkconfig

如果 $# 小于 4 ,則 exit 1 ( mkconfig 腳本傳回 1 ),即退出。

如果 $# 大于 6 ,則也傳回 1 。

是以:mkconfig 腳本傳參隻能是 4、5、6 ,如果大于 6 或者小于 4 都不行。

2. 建立符号連結

代碼:30 ~ 118行

嵌入式開發:Uboot配置檔案mkconfig
嵌入式開發:Uboot配置檔案mkconfig
嵌入式開發:Uboot配置檔案mkconfig

為什麼要建立符号連結?這些符号連結檔案的存在就是整個配置過程的核心,這些符号連結檔案(檔案夾)的主要作用是給頭檔案包含等過程提供指向性連接配接。根本目的是讓 uboot 具有可移植性。

uboot 可移植性的實作原理:在 uboot 中有很多彼此平行的代碼,各自屬于各自不同的架構/ CPU /開發闆,我們在具體到一個開發闆的編譯時用符号連接配接的方式提供一個具體的名字的檔案夾供編譯時使用。這樣就可以在配置的過程中通過不同的配置使用不同的檔案,就可以正确的包含正确的檔案。

代碼過程

(1)首先判斷源碼目錄和輸出目錄是否是一緻的。若一緻,則執行 then 後的語句;否則,則執行 else 後的語句。在這裡,不分析 then 後的語句,分析 else 後的語句。建立 include/asm 檔案,并連結到 include/asm-arm 檔案。

(2)删除 include/asm-arm/arch 檔案

(3)執行第二個 if 語句,判斷條件是若 $6 字元串的長度為 0 或者 $6 為 NULL,則執行 then 後的語句,建立include/asm-arm/arch 檔案,并連結到 include/asm-arm/arch-s5pc11x;否則,将執行 else 後的語句,建立 include/asm-arm/arch 檔案,并連結到 include/asm-arm/arch-s5pc110 。

(4)執行第三個 if 語句,在這裡我們隻看 "$3" = "s5pc11x" 的選項,其他的類似。判斷條件是 $3 為 s5pc11x 的話,則執行——建立 include/regs.h 檔案,并連結到 include/s5pc110.h 檔案,删除 include/asm-arm/arch ,然後再建立 include/asm-arm/arch,并連結到 include/arch-s5pc11x 。

總結:一共建立了 4 個符号連結。這 4 個符号連結将來在寫代碼過程中,頭檔案包含時非常有用。譬如一個頭檔案包含可能是:#include 。

3. 建立 include/config.mk 檔案

代碼:120 ~ 130行

嵌入式開發:Uboot配置檔案mkconfig

建立 include/config.mk 檔案:将 ARCH=arm、CPU=s5pc11x、BOARD=x210、VENDOR=samsung、SOC=s5pc110 寫入到 include/config.mk 檔案中。

建立的 include/config.mk 檔案是為了讓主 Makefile 在 133 行去包含的。

4. 建立 include/config.h 頭檔案

代碼:131 ~ 最後

嵌入式開發:Uboot配置檔案mkconfig

若 APPEND 為 yes,則将新内容追加到 config.h 中,否則建立一個新的 config.h 檔案,最後列印兩行内容,追加到 config.h 中,執行成功後則退出。

include/config.h 檔案裡面的内容就一行 #include,這個頭檔案是我們移植 x210 開發闆時,對開發闆的宏定義配置檔案,這個檔案是移植 x210_sd 時最主要的檔案。

x210_sd.h 檔案會被用來生成一個 autoconfig.mk 檔案,這個檔案會被主 Makefile 引入,指導整個編譯過程。這裡面的這些宏定義會影響我們 uboot 中大部分的 .c 檔案中一些條件編譯的選擇,進而最終實作可移植性。

對嵌入式物聯網感興趣的小夥伴,可以多了解一下相關資訊。掃碼進群領資料

嵌入式開發:Uboot配置檔案mkconfig

繼續閱讀