當前 uboot 的配置已經徹底變成Linux 內核的配置形式了,徹底能夠按照Linux 內核的分析方是區分析 uboot。html
uboot 和 Linux的代碼配置項由 Kconfig 來完成的,關於 Kconfig 語法,可參見:linux/Documentation/kbuild/kconfig-language.txt前端
在編譯時,先進行配置,目的是根據需求選擇功能以及編譯生成方式類型(模式或包含在內核中).linux
配置項操做能夠由以下命令中的其中一條來完成:架構
make config, make menuconfig, make oldconfig, make xx_defconfig工具
若已存在 .config 文件,make menuconfig 及 make oldconfig 都會把原 .config 另存爲 .config.old。post
在執行完其中一條 config 命令後,會生成 .config 及 autoconf 文件,autoconf 是根據配置項生成的相應宏定義,供 makefile 使用,當執行 make 命令時,就會根據 autoconf 定義的宏及 makefile 去編譯源碼。測試
u-boot的編譯跟kernel編譯同樣,分兩步執行:
- 第一步:配置,執行make xxx_defconfig
進行各項配置,生成.config
文件
- 第二部:編譯,執行make進行編譯,生成可執行的二進制文件u-boot.bin或u-boot.elfui
make targets,targets 就是咱們前述的那些命令,咱們能夠經過 make help 打印出來內核構建系統所支持的目標完整列表。url
以下所示,是 make help 所打印的全部目標:spa
文件目標 就是 uboot 中全部格式的文件,以後就是構建時候 能夠傳入的參數。
最後還由一段話,就是 執行 make 或 make all 的時候,構建全部以 * 開頭的目標,這裏只有 * u-boot ,即便執行此項。
構建系同與 .config 相關的目標,就是上面用配置目標
在 ./Document/kbuild/makefiles.txt 中有詳細介紹
頂層 Makefiles 讀取從uboot 配置程序中生成的 .config 文件
在上述的全部文件中,除了頂層的 Makefile,其餘文件都或直接、或間接的和 它相關聯。這些關聯能夠分爲兩類:
在一個文件中,用 include 來包含另外的文件
使用 make -f 來調用,-f 是使用不一樣的 makefile 文件來進行 make 的選項。
因爲 2018.03 的 uboot 版本中已經遺棄了 2440 因此咱們選擇一塊其餘開發板進行分析。
執行命令:make smdkc100_defconfig V=1
V = 1 的意思是打開編譯過程
過程以下:
1 make -f ./scripts/Makefile.build obj=scripts/basic 2 cc -Wp,-MD,scripts/basic/.fixdep.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -o scripts/basic/fixdep scripts/basic/fixdep.c 3 rm -f .tmp_quiet_recordmcount 4 make -f ./scripts/Makefile.build obj=scripts/kconfig smdkc100_defconfig 5 cc -Wp,-MD,scripts/kconfig/.conf.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -D_GNU_SOURCE -DCURSES_LOC="<ncurses.h>" -DLOCALE -c -o scripts/kconfig/conf.o scripts/kconfig/conf.c 6 cat scripts/kconfig/zconf.tab.c_shipped > scripts/kconfig/zconf.tab.c 7 cat scripts/kconfig/zconf.lex.c_shipped > scripts/kconfig/zconf.lex.c 8 cat scripts/kconfig/zconf.hash.c_shipped > scripts/kconfig/zconf.hash.c 9 cc -Wp,-MD,scripts/kconfig/.zconf.tab.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -D_GNU_SOURCE -DCURSES_LOC="<ncurses.h>" -DLOCALE -Iscripts/kconfig -c -o scripts/kconfig/zconf.tab.o scripts/kconfig/zconf.tab.c 10 cc -o scripts/kconfig/conf scripts/kconfig/conf.o scripts/kconfig/zconf.tab.o 11 scripts/kconfig/conf --defconfig=arch/../configs/smdkc100_defconfig Kconfig 12 # 13 # configuration written to .config 14 #
這一項是生成了 scripts/basic/fixdep 工具
這一項是生成了 scripts/kconfig/conf 工具
最後執行 scripts/kconfig/conf 工具 生成.config
能夠知道 make xxx_defconfig 的執行主要分紅三個部分:
make -f ./scripts/Makefile.build obj=scripts/basic
,編譯生成 scripts/basic/fixdep
工具make -f ./scripts/Makefile.build obj=scripts/kconfig rpi_3_32b_defconfig
編譯生成 scripts/kconfig/conf
工具scripts/kconfig/conf --defconfig=arch/../configs/xxx_defconfig Kconfig
生成最終的 .config
配置文件