?一.? uboot頂層 Makefile文件
uboot 頂層 Makefile,就是 uboot源碼工程的根目錄下的? Makefile文件。
本文繼續(xù)對(duì) uboot頂層 Makefile的前期準(zhǔn)備工作進(jìn)行介紹。續(xù)上一篇文章內(nèi)容的學(xué)習(xí),如下:
uboot頂層Makefile前期所做工作說明三_凌肖戰(zhàn)的博客-CSDN博客
?
本文主要 了解 uboot頂層 Makefile前期所做的部分工作, 包括如下內(nèi)容:
Makefile文件中導(dǎo)出變量,具體涉及uboot 的頂層 Makefile中 幾個(gè)變量的文件調(diào)動(dòng)關(guān)系。
二.? Makefile 前期所做的內(nèi)容
?11.? 導(dǎo)出其他變量
接下來,在 頂層 Makefile中導(dǎo)出很多變量, 頂層 Makefile 內(nèi)容如下:
371 export VERSION PATCHLEVEL SUBLEVEL UBOOTRELEASE UBOOTVERSION
372 export ARCH CPU BOARD VENDOR SOC CPUDIR BOARDDIR
373 export CONFIG_SHELL HOSTCC HOSTCFLAGS HOSTLDFLAGS CROSS_COMPILE AS LD CC
374 export CPP AR NM LDR STRIP OBJCOPY OBJDUMP
375 export MAKE AWK PERL PYTHON
376 export HOSTCXX HOSTCXXFLAGS DTC CHECK CHECKFLAGS
377
378 export KBUILD_CPPFLAGS NOSTDINC_FLAGS UBOOTINCLUDE OBJCOPYFLAGS LDFLAGS
379 export KBUILD_CFLAGS KBUILD_AFLAGS
涉及一些變量的文件調(diào)用關(guān)系:
(1)? 打印變量值
這些變量中大部分都已經(jīng)在前面定義了,我們重點(diǎn)來看一下下面這幾個(gè)變量,下面這幾個(gè)變量在 頂層 Makefile 中是找不到的,變量如下:
ARCH CPU BOARD VENDOR SOC CPUDIR BOARDDIR
這 7 個(gè)變量在頂層 Makefile 是找不到的,說明這 7 個(gè)變量是在其他文件里面定義的,先來
看一下這 7 個(gè)變量都是什么內(nèi)容。,即打印出這些變量的值。在頂層 Makefile 中輸入如下內(nèi)容:
進(jìn)入 uboot 源碼根目錄下,打開Linux 終端,輸入如下命令打印這些變量:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/uboot/alientek_uboot/uboot-imx-rel_imx_4.1.15_2.1.0_ga_alientek$ make mytest
ARCH= arm
CPU= armv7
BOARD= mx6ull_alientek_nand
VENDOR= freescale
SOC= mx6
CPUDIR= arch/arm/cpu/armv7
BOARDDIR= freescale/mx6ull_alientek_nand
(2) 幾個(gè)個(gè)變量的來源
在 uboot 根目錄下,有個(gè)文件 config.mk,這 7 個(gè)變量就是在 config.mk 里面定義的,打開 config.mk 文件的部分內(nèi)容如下(這里只列出了涉及變量的部分代碼):
25 ARCH := $(CONFIG_SYS_ARCH:"%"=%)
26 CPU := $(CONFIG_SYS_CPU:"%"=%)
27 ifdef CONFIG_SPL_BUILD
28 ifdef CONFIG_TEGRA
29 CPU := arm720t
30 endif
31 endif
32 BOARD := $(CONFIG_SYS_BOARD:"%"=%)
33 ifneq ($(CONFIG_SYS_VENDOR),)
34 VENDOR := $(CONFIG_SYS_VENDOR:"%"=%)
35 endif
36 ifneq ($(CONFIG_SYS_SOC),)
37 SOC := $(CONFIG_SYS_SOC:"%"=%)
38 endif
39
40 # Some architecture config.mk files need to know what CPUDIR is set
to,
41 # so calculate CPUDIR before including ARCH/SOC/CPU config.mk files.
42 # Check if arch/$ARCH/cpu/$CPU exists, otherwise assume
arch/$ARCH/cpu contains
43 # CPU-specific code.
44 CPUDIR=arch/$(ARCH)/cpu$(if $(CPU),/$(CPU),)
45
46 sinclude $(srctree)/arch/$(ARCH)/config.mk
47 sinclude $(srctree)/$(CPUDIR)/config.mk
48
49 ifdef SOC
50 sinclude $(srctree)/$(CPUDIR)/$(SOC)/config.mk
51 endif
52 ifneq ($(BOARD),)
53 ifdef VENDOR
54 BOARDDIR = $(VENDOR)/$(BOARD)
55 else
56 BOARDDIR = $(BOARD)
57 endif
58 endif
59 ifdef BOARD
60 sinclude $(srctree)/board/$(BOARDDIR)/config.mk # include board
specific rules
61 endif
第 25 行 定 義 變 量 ARCH ,值為 $(CONFIG_SYS_ARCH:"%"=%) , 也 就 是 提 取
CONFIG_SYS_ARCH 里面雙引號(hào)“”之間的內(nèi)容。比如 CONFIG_SYS_ARCH=“arm”的話,
ARCH=arm。
下面的幾行的功能類似。
接下來需要找到 CONFIG_SYS_ARCH、CONFIG_SYS_CPU、CONFIG_SYS_BOARD、
CONFIG_SYS_VENDOR 和 CONFIG_SYS_SOC 這 5 個(gè)變量的值。
這 5 個(gè)變量在 uboot 根目錄下的 .config 文件中有定義,定義如下:
23 CONFIG_SYS_ARCH="arm"
24 CONFIG_SYS_CPU="armv7"
25 CONFIG_SYS_SOC="mx6"
26 CONFIG_SYS_VENDOR="freescale"
27 CONFIG_SYS_BOARD="mx6ullevk "
28 CONFIG_SYS_CONFIG_NAME="mx6ullevk"
從 上面的 .config 文件?可以看出,這些變量的值正好符合 頂層 Makefile中打印的幾個(gè)變量值。
那么, 在 config.mk文件中讀取的文件有:
arch/arm/config.mk
arch/arm/cpu/armv7/config.mk
arch/arm/cpu/armv7/mx6/config.mk (此文件不存在)
board/ freescale/mx6ullevk/config.mk (此文件不存在)
三. 總結(jié)
1.?? 頂層 Makefile涉及幾個(gè)變量的文件調(diào)用關(guān)系
頂層 Makefile 中涉及一些變量如 ARCH、CPU、 BOARD、 VENDOR 、SOC等等。這些變量涉及文件調(diào)用關(guān)系:
Makefile 來源于 config.mk 文件, config.mk 文件中涉及變量又來源于 .config 文件。
而 .config 文件是執(zhí)行了 "make xxx_deconfig" 命令,即配置 uboot 源碼以后生成的。
.config 文件來源
默認(rèn)情況下,.config 和 xxx_defconfig 內(nèi)容是一樣的,因?yàn)?config 就是從 xxx_defconfig 復(fù)制過來的。如果后續(xù)自行調(diào)整 了 uboot 的一些配置參數(shù),那么這些新的配置參數(shù)就添加到了.config 中,而不是 xxx_defconfig。 相當(dāng)于 xxx_defconfig 只是一些初始配置,而 .config 的內(nèi)容才是實(shí)時(shí)有效的配置。
?
2.?? Makefile前期所做的工作
uboot 頂層 Makefile前期所做的內(nèi)容大體包括如下:
版本號(hào),MAKEFLAGS 變量 、命令輸出/靜默輸出、設(shè)置編譯結(jié)果輸出目錄、
代碼檢查 、模塊編譯、獲取主機(jī)架構(gòu)和系統(tǒng)、(設(shè)置目標(biāo)架構(gòu)、交叉編譯器和配置文件)、文章來源:http://www.zghlxwxcb.cn/news/detail-704315.html
交叉編譯工具變量設(shè)置、調(diào)用 scripts/Kbuild.include、導(dǎo)出其他變量等。文章來源地址http://www.zghlxwxcb.cn/news/detail-704315.html
到了這里,關(guān)于uboot頂層Makefile前期所做工作說明四的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!