Arm Linux交叉编译和连接过程分析(1)
一、配置內核(Kconfig)
我們配置內核是實質是根據眾多目錄下面的Kconfig文件中組合成我們需要的一個最佳選擇,即最終在根目錄下面生成的.config文件,而這個文件會在根目錄Makefile下調用的。這一部分我們主要討論整個SEP4020體系在內核中各個Kconfig文件是怎么組織的。
1、Make menuconfig的編譯生成過程:
這部分我們將make menuconfig它是怎末運行,和調用哪些文件來實現圖形界面的。
我們先來看下我們鍵入make menuconfig會出現什么:
[root@localhost linux-v3.3]# make menuconfig
? HOSTCC? scripts/basic/fixdep
? HOSTCC? scripts/basic/split-include
? HOSTCC? scripts/basic/docproc
? HOSTCC? scripts/kconfig/conf.o
? HOSTCC? scripts/kconfig/kxgettext.o
? HOSTCC? scripts/kconfig/mconf.o
? HOSTCC ?scripts/kconfig/zconf.tab.o
? HOSTLD? scripts/kconfig/mconf
? HOSTCC? scripts/kconfig/lxdialog/checklist.o
? HOSTCC? scripts/kconfig/lxdialog/inputbox.o
? HOSTCC? scripts/kconfig/lxdialog/lxdialog.o
? HOSTCC? scripts/kconfig/lxdialog/menubox.o
? HOSTCC? scripts/kconfig/lxdialog/msgbox.o
? HOSTCC? scripts/kconfig/lxdialog/textbox.o
? HOSTCC? scripts/kconfig/lxdialog/util.o
? HOSTCC? scripts/kconfig/lxdialog/yesno.o
? HOSTLD? scripts/kconfig/lxdialog/lxdialog
scripts/kconfig/mconf arch/arm/Kconfig
fs/Kconfig:767:warning: multi-line strings not supported
drivers/usb/gadget/Kconfig:406:warning: type of 'USB_ZERO_HNPTEST' redefined from 'boolean' to 'tristate'
#
# using defaults found in .config
#
*** End of Linux kernel configuration.
*** Execute 'make' to build the kernel or try 'make help'.
從上面我們看到實際上make menuconfig是一個Makefile編譯及運行的過程,他先編譯了一大堆文件最后會生成scripts/kconfig/mconf和scripts/kconfig/lxdialog/lxdialog這兩個應用程序,其中scripts/kconfig/mconf會調用scripts/kconfig/lxdialog/lxdialog來顯示一個對話框的。
然后編譯好這兩個應用程序后,緊接著運行scripts/kconfig/mconf arch/arm/Kconfig
這個應用程序,這個程序就讀入了我們SEP4020的體系架構的Kconfig,然后就顯示出了我們見到的那個對話框了。
2、Make menuconfig的Makefile的調用關系;
在這部分我們講下Makefile是怎樣一步步構造出menuconfig這個對話框的:
1.2.1在頂層的Makefile中,可以查找到如下幾行定義的規則。
這就是生成內核配置界面的命令規則,它也定義了執行的目標和依賴的前提條件,還有
要執行的命令。
這條規則定義的目標為config %config, 通配符%意味著可以包括config、 xconfig、 gconfig、
menuconfig和oldconfig等。依賴的前提條件是 scripts_basic outputmakefile,這些在 Makefile
也是規則定義,主要用來編譯生成配置工具。
那么這條規則執行的命令就是執行scripts/kconfig/Makefile指定的規則。相當于:
make -C scripts/kconfig/? %config(-C表示調用scripts/kconfig/目錄下的Makefile)
這行命令是使用配置工具解析 arch/$(ARCH)/Kconfig 文件,生成內核配置菜單。
$(ARCH)變量是 Linux 體系結構定義,對應 arch 目錄下子目錄的名稱。Kconfig 包含了內核配置菜單的內容,那么 arch/$(ARCH)/Kconfig 是配置主菜單的文件,調用管理其他各級
Kconfig。根據配置工具的不同,內核也有不同的配置方式。有命令行方式,還有圖形界面方式。
1.2.2這些內核配置方式是在scripts/kconfig/Makefile中通過規則定義的。從這個 Makefile中,可以找到下面一些規則定義。如果把變量或者通配符帶進去,就可以明白要執行的操作。
?
執行命令:scripts/kconfig/mconf?? arch/arm/Kconfig
使用lxdialog工具,生成光標配置菜單。
(1)由于mconf沒有產生根據Makefile的隱規則會推導生成mconf程序
mconf-objs???? := mconf.o zconf.tab.o這個可以讓多個c文件生成最后的可執行文件mconf
(2)因為 mconf調用lxdialog工具,所以需要先編譯scripts/kconfig/lxdialog目錄。
?
這會生成相應的目標文件最后生成lxdialog程序。
最后運行
$< arch/$(ARCH)/Kconfig這個程序。
3、SEP4020相關Kconfig的關系:
1.3.1 menuconfig的組織關系圖:
General setup --->??????????????????????????????????????????? /init/kconfig
?
Loadable module support? --->???????????????????????? /init/kconfig
[*] Enable loadable module support? ????????? /block/kconfig
?
System Type ---> ?????????????????????????????????????????? /arch/arm/kconfig
ARM system type (sep4020)? ---> ?? /arch/arm/kconfig
SEP4020 Implementations? --->??? /arch/arm/kconfig
--- Processor Type ???????????????????????? /arch/arm/mm/kconfig
--- Processor Features?? ???????????????? ?/arch/arm/mm/kconfig
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Bus support? ---> ????????????????????????????????????????? /arch/arm/kconfig
??????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????Kernel Features? ---> ????????????????????????????? /arch/arm/kconfig
?[ ] Dynamic tick timer? ?????????????????? /kernel/time/kconfig
?????? ?Memory model (Flat Memory)? --->?? /mm/kconfig
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??
Boot options? ---> ???????????????????????????????????????? /arch/arm/kconfig
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Floating point emulation? ---> ???????????????????????? /arch/arm/kconfig
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Userspace binary formats? --->???????????????????????? /arch/arm/kconfig
????????????????? ????????????????????????????????????????????????????? /fs/kconfig.binfmt?
????????????????????????????????????????????????????????????????????????????????
?Power management options? --->????????????????????? /arch/arm/kconfig
????????????????????????????????????????????????????????????????????? /kernel/power/kconfig
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Networking? ---> ???????????????????????????????????????????????? /net/kconfig
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Device Drivers? ---> ????????????????????????????????????? /driver/kconfig
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? File systems? --->??????????????? ?????????????? /fs/kconfig
如果大家想新增一個芯片平臺和驅動,大家可以根據這個提示去相應的Kconfig文件去添加相應的內容。等make menuconfig后就會在根目錄下生成.config文件這個文件會保存所以已經選擇的Kconfig選項。
?
1.3.2 Kconfig的相關知識;
(1)菜單項
多數選項定義一個配置選項,其他選項起輔助組織作用。舉例說明單個的配置選項
的定義。
?
config MODVERSIONS
?????? bool "Set version information on all module symbols"
?????? depends MODULES
?????? help
?????????? Usually, modules have to be recompiled whenever you switch to a new
?????????? kernel………
每一行開頭用關鍵字“config”,后面可以跟多行。后面的幾行定義這個配置選項的屬性。
屬性包括配置選項的類型、選擇提示、依賴關系、幫助文檔和缺省值。同名的選項可以重復
定義多次,但是每次定義只有一個選擇提示并且類型不沖突。
(2)菜單屬性:
(3)Kconfig語法:
?
總結
以上是生活随笔為你收集整理的Arm Linux交叉编译和连接过程分析(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux设置时间为24小时制,设置时区
- 下一篇: 大盘指数怎么算出来的?有三种计算方法