国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理

這篇具有很好參考價(jià)值的文章主要介紹了正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

經(jīng)過(guò)之前對(duì)uboot的學(xué)習(xí)可以知道:uboot可以通過(guò)stm32mp15_trusted_defconfig來(lái)配置,或者通過(guò)文件stm32mp1.h來(lái)配置uboot。還有另外一種配置uboot的方法,就是圖形化配置,以前的uboot是不支持圖形化配置,只有Linux內(nèi)核才支持圖形化配置。不過(guò)不知道從什么時(shí)候開(kāi)始,uboot也
支持圖形化配置了,本章就來(lái)學(xué)習(xí)一下如何通過(guò)圖形化配置uboot,并且學(xué)習(xí)一下圖形化配置的原理,因?yàn)楹竺鎸W(xué)習(xí)Linux驅(qū)動(dòng)開(kāi)發(fā)的時(shí)候可能要修改圖形配置文件。

U-Boot圖形化配置體驗(yàn)

uboot或Linux內(nèi)核可以通過(guò)輸入“make menuconfig”來(lái)打開(kāi)圖形化配置界面。menuconfig是一套圖形化的配置工具,需要ncurses庫(kù)支持。ncurses庫(kù)提供了一系列的API函數(shù)供調(diào)用者生成基于文本的圖形界面,因此需要先在Ubuntu中安裝ncurses庫(kù),命令如下:

sudo apt-get install build-essential
sudo apt-get install libncurses5-dev

menuconfig重點(diǎn)會(huì)用到兩個(gè)文件:.config和Kconfig,.config文件前面已經(jīng)說(shuō)了,這個(gè)文
件保存著uboot的配置項(xiàng)
,使用menuconfig配置完 uboot以后肯定要更新.config文件。Kconfig文件是圖形界面的描述文件,也就是描述界面應(yīng)該有什么內(nèi)容,很多目錄下都會(huì)有Kconfig文件。

在打開(kāi)圖形化配置界面之前,要先使用“make xxx_defconfig”對(duì)uboot進(jìn)行一次默認(rèn)配置,只需要一次即可。如果使用“make clean”清理了工程的話(huà)就那就需要重新使用“ make xxx_defconfig”再對(duì) uboot進(jìn)行一次配置。進(jìn)入uboot根目錄,輸入如下命令:

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- stm32mp15_atk_trusted_defconfig
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- menuconfig

如果已經(jīng)在uboot的頂層Makefile中定義了ARCH和CROSS_COMPILE的值,那么上述命令可以簡(jiǎn)化為:

make stm32mp15_atk_trusted_defconfig
make menuconfig

打開(kāi)的圖形化界面如下圖所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
上圖就是主界面,主界面上方的英文就是簡(jiǎn)單的操作說(shuō)明,操作方法如下:

通過(guò)鍵盤(pán)上的“↑”和“↓”鍵來(lái)選擇要配置的菜單,按下“Enter”鍵進(jìn)入子菜單。菜單中高亮的字母就是此菜單的熱鍵,在鍵盤(pán)上按下此高亮字母對(duì)應(yīng)的鍵可以快速選中對(duì)應(yīng)的菜單。選中子菜單以后按下“Y”鍵就會(huì)將相應(yīng)的代碼編譯進(jìn)Uboot中,菜單前面變?yōu)椤癧*]”。按下“N”鍵不編譯相應(yīng)的代碼,按下“M”鍵就會(huì)將相應(yīng)的代碼編譯為模塊,菜單前面變?yōu)椤癧M]”。按兩下“Esc”鍵退出,也就是返回到上一級(jí),按下“?”鍵查看此菜單的幫助信息,按下“/”鍵打開(kāi)搜索框,可以在搜索框輸入要搜索的內(nèi)容。


在配置界面下方會(huì)有五個(gè)按鈕, 這五個(gè)按鈕的功能如下:
<Select>:選中按鈕,和“Enter”鍵的功能相同,負(fù)責(zé)選中并進(jìn)入某個(gè)菜單。
<Exit>:退出按鈕,和按兩下“Esc”鍵功能相同,退出當(dāng)前菜單,返回到上一級(jí)。
<Help>:幫助按鈕,查看選中菜單的幫助信息。
<Save>:保存按鈕,保存修改后的配置文件。
<Load>:加載按鈕,加載指定的配置文件。

上圖中有很多不同配置的主配置項(xiàng),通過(guò)鍵盤(pán)上的上下鍵調(diào)節(jié)配置項(xiàng)。后面跟著“—>”表示此配置項(xiàng)是有子配置項(xiàng)的,按下回車(chē)鍵就可以進(jìn)入子配置項(xiàng)。

以如何使能dns命令為例,講解一下如何通過(guò)圖形化界面來(lái)配置uboot。進(jìn)入“Command line interface —>”這個(gè)配置項(xiàng),此配置項(xiàng)用于配置uboot的命令,進(jìn)入以后如下圖所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
從上圖可以看出,有很多配置項(xiàng),這些配置項(xiàng)也有子配置項(xiàng),選擇“Network commands —>”,進(jìn)入網(wǎng)絡(luò)相關(guān)命令配置項(xiàng),如下圖所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
從上圖可以看出,uboot中有很多和網(wǎng)絡(luò)有關(guān)的命令,比如bootp、dhcp、tftpboot等等。選中dns,然后按下鍵盤(pán)上的“Y”鍵,此時(shí)dns前面的“[ ]”變成 “[ * ]”,如下圖所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
每個(gè)配置項(xiàng)有3種編譯選項(xiàng):編譯進(jìn)uboot中(也就是編譯進(jìn)u-boot.bin中)、取消編譯(也就是不編譯這個(gè)功能模塊)、編譯為模塊。按下“Y”鍵表示編譯進(jìn)uboot中,此時(shí)“[ ]”變成了“[ * ]”;按下"N”表示不編譯,“[ ]”默認(rèn)表示不編譯;有些功能模塊是支持編譯為模塊的,這個(gè)一般在Linux內(nèi)核里面很常用, uboot下面不使用,如果要將某個(gè)功能編譯為模塊,那就按下“M”,此時(shí) “[ ]”就會(huì)變?yōu)?“< M >”。

選中dns,然后按下“H”或者“?”鍵可以打開(kāi)dns命令的提示信息,如下圖所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
按兩下“ESC”鍵即可退出提示界面,相當(dāng)于返回上一層。選擇dns命令以后,按兩下“ESC”鍵(按兩下 ESC鍵相當(dāng)于返回上一層),退出當(dāng)前配置項(xiàng),進(jìn)入到上一層配置項(xiàng)。如果沒(méi)有要修改的就按兩下 “ESC”鍵,退出到主配界面,如果也沒(méi)有其他要修改的,那就再次按兩下“ESC”鍵退出menuconfig配置界面。如果修改過(guò)配置的話(huà),在退出主界面的時(shí)候會(huì)有如下圖提示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
上圖詢(xún)問(wèn)是否保存新的配置文件,通過(guò)鍵盤(pán)的“←”或“→”鍵來(lái)選擇“Yes”項(xiàng),然后按下鍵盤(pán)上的回車(chē)鍵確認(rèn)保存。至此,我們就完成了通過(guò)圖形界面使能了uboot的dns命令,打開(kāi) .config文件,會(huì)發(fā)現(xiàn)多了“CONFIG_CMD_DNS=y”這一行,如下圖中323行所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
使用如下命令編譯uboot:

make DEVICE_TREE=stm32mp157d-atk all -j12

千萬(wàn)不能使用如下命令:

./stm32mp157d_alientek.sh

因?yàn)閟tm32mp157d_alientek.sh在編譯之前會(huì)清理工程,會(huì)刪除掉.config文件!通過(guò)圖形化界面配置所有配置項(xiàng)都會(huì)被刪除。

編譯完成以后燒寫(xiě)到SD卡中,重啟開(kāi)發(fā)板進(jìn)入uboot命令模式,輸入“?”查看是否有dns命令,如果dns命令存在的話(huà)就會(huì)輸出相應(yīng)的使用信息,如下圖所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
測(cè)試一下dns命令工作是否正常,使用dns命令來(lái)查看一下百度官網(wǎng)“www.baidu.com”的IP地址。

首先用dhcp命令從路由器動(dòng)態(tài)獲取一個(gè)IP地址,防止自己設(shè)置的靜態(tài)IP地址和網(wǎng)段內(nèi)其他設(shè)備沖突,導(dǎo)致dns命令失敗,直接輸入“dhcp”即可,結(jié)果如下圖所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
從上圖可以看出,此時(shí)開(kāi)發(fā)板從路由器獲取到的IP地址為192.168.1.200,接下來(lái)要設(shè)置一下dns服務(wù)器的IP地址,也就是設(shè)置環(huán)境變量dnsip的值,命令如下:

setenv dnsip 114.114.114.114
saveenv

設(shè)置好以后就可以使用dns命令查看百度官網(wǎng)的IP地址了,輸入命令:

dns www.baidu.com

結(jié)果如下圖所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
從上圖可以看出,“www.baidu.com”的IP地址為12.215.177.38,說(shuō)明dns命令工作正常,這個(gè)就是通過(guò)圖形化命令來(lái)配置uboot,一般用來(lái)使能一些命令,就可以避免查找命令的宏然后去配置文件里面定義。

menuconfig圖形化配置原理

make menuconfig過(guò)程分析

當(dāng)輸入make menuconfig以后會(huì)匹配到頂層Makefile的如下代碼:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
這個(gè)在前面已經(jīng)詳細(xì)的講解過(guò)了,其中build=-f ./scripts/Makefile.build obj,將542行的規(guī)則展開(kāi)就是:

@ make -f ./scripts/Makefile.build obj=scripts/kconfig menuconfig

Makefile.build會(huì)讀取scripts/kconfig/Makefile中的內(nèi)容,在scripts/kconfig/Makefile中可以找到如下代碼:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
其中obj=scripts/kconfig silent是設(shè)置靜默編譯的,在這里可以忽略不計(jì),Kconfig=Kconfig,因此擴(kuò)展以后就是:

menuconfig: scripts/kconfig/mconf
scripts/kconfig/mconf Kconfig

目標(biāo)menuconfig依賴(lài)scripts/kconfig/mconf,因此scripts/kconfig/mconf.c這個(gè)文件會(huì)被編譯,生成mconf這個(gè)可執(zhí)行文件。目標(biāo)menuconfig對(duì)應(yīng)的規(guī)則為scripts/kconfig/mconf Kconfig,也就是說(shuō) mconf會(huì)調(diào)用uboot根目錄下的Kconfig文件開(kāi)始構(gòu)建圖形配置界面。

Kconfig語(yǔ)法簡(jiǎn)介

上一小節(jié)已經(jīng)知道了scripts/kconfig/mconf會(huì)調(diào)用uboot根目錄下的Kconfig文件開(kāi)始構(gòu)建圖形化配置界面,接下來(lái)簡(jiǎn)單學(xué)習(xí)一下Kconfig的語(yǔ)法。因?yàn)?strong>后面學(xué)習(xí)Linux驅(qū)動(dòng)開(kāi)發(fā)的時(shí)候可能會(huì)涉及到修改Kconfig,對(duì)于Kconfig語(yǔ)法不需要太深入的去究,關(guān)于Kconfig的詳細(xì)語(yǔ)法介紹,可以參考linux內(nèi)核源碼(uboot源碼沒(méi)有)中的文件Documentation/kbuild/kconfig-language.txt,本節(jié)大概了解其原理即可。打開(kāi)uboot根目錄下的Kconfig,這個(gè)Kconfig文件就是頂層Kconfig,以這個(gè)文件為例來(lái)簡(jiǎn)單學(xué)習(xí)一下Kconfig語(yǔ)法。

mainmenu

顧名思義mainmenu就是主菜單,也就是輸入“make menuconfig”以后打開(kāi)的默認(rèn)界面,在頂層Kconfig中有如下代碼:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
上述代碼就是定義了一個(gè)名為“U-Boot $UBOOTVERSION Configuration”的主菜單,其中UBOOTVERSION=2020.01-stm32mp-r1,因此主菜單名為“U-Boot 2020.01-stm32mp-r1 Configuration”,如下圖所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記

調(diào)用其他目錄下的Kconfig文件

和Makefile一樣,Kconfig也可以調(diào)用其他子目錄中的Kconfig文件,調(diào)用方法如下:

source "xxx/Kconfig" //xxx為具體的目錄名,相對(duì)路徑

在頂層Kconfig有如下代碼:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
從示例代碼14.2.2.2中可以看出,頂層Kconfig文件調(diào)用了很多其他子目錄下的Kcofig文件,這些子目錄下的Kconfig文件在主菜單中生成各自的菜單項(xiàng)。

menu/endmenu條目

menu用于生成菜單,endmenu就是菜單結(jié)束標(biāo)志,這兩個(gè)一般是成對(duì)出現(xiàn)的。在頂層Kconfig中有如下代碼:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
示例代碼14.2.2.3中有兩個(gè)menu/endmenu代碼塊,這兩個(gè)代碼塊就是兩個(gè)子菜單,第15行的“menu “General setup””表示子菜單:“General setup”。第301行的“menu "Boot””表示子菜單“Boot images”。體現(xiàn)在主菜單界面中就如下圖所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
在“General setup”菜單上面還有“Architecture select(ARM architecture)”和“ARM architecture”這兩個(gè)子菜單,但是在頂層 Kconfig中并沒(méi)有看到這兩個(gè)子菜單對(duì)應(yīng)的menu/endmenu代碼塊,那這兩個(gè)子菜單是怎么來(lái)的呢?這兩個(gè)子菜單就是arch/Kconfig文件生成的。包括主界面中的“API”、“Boot timing”等等這些子菜單,都是分別由頂層 Kconfig所調(diào)用的api/Kconfig、common/Kconfig等這些子Kconfig文件來(lái)創(chuàng)建的。

config條目

頂層Kconfig中的“General setup”子菜單內(nèi)容如下:

示例代碼14.2.2.4 頂層Kconfig代碼段 
15 menu "General setup" 
16 
17 config BROKEN 
18     bool 
19     help 
20       This option cannot be enabled. It is used as dependency 
21       for broken and incomplete features. 
22 
23 config DEPRECATED 
24     bool 
25     help 
...... 
29 
30 config LOCALVERSION 
31     string "Local version - append to U-Boot release" 
32     help 
...... 
39 
40 config LOCALVERSION_AUTO 
41     bool "Automatically append version information to the version string"
42     default y 
43     help 
...... 
59 
60 config CC_OPTIMIZE_FOR_SIZE 
61     bool "Optimize for size" 
62     default y 
63     help 
...... 
68 
69 config CC_COVERAGE 
70     bool "Enable code coverage analysis" 
71     depends on SANDBOX 
72     help 
...... 
75 
76 config DISTRO_DEFAULTS 
77     bool "Select defaults suitable for booting general purpose Linux distributions" 
78     select AUTO_COMPLETE 
...... 
102 
103 config ENV_VARS_UBOOT_CONFIG 
104     bool "Add arch, board, vendor and soc variables to default environment" 
105     help 
...... 
285 config ERR_PTR_OFFSET 
286     hex 
287     default 0x0 
288     help 
...... 
299 endmenu # General setup

可以看出,在menu/endmenu代碼塊中有大量的“config xxxx”的代碼塊,這就是config條
目。config條目就是“General setup”菜單的具體配置項(xiàng),如下圖所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
示例代碼14.2.2.4中第30行的“config LOCALVERSION”對(duì)應(yīng)著第一個(gè)配置項(xiàng),“config LOCALVERSION_AUTO”對(duì)應(yīng)著第二個(gè)配置項(xiàng),以此類(lèi)推。示例代碼最前面還有“config BROKEN”和“config DEPRECATED”這兩個(gè)配置項(xiàng),但是上圖中并沒(méi)有這兩個(gè)配置項(xiàng),因?yàn)檫@兩個(gè)配置項(xiàng)現(xiàn)在不能使能,所以也就看不到。

以“config LOCALVERSION”和“config LOCALVERSION_AUTO”這兩個(gè)為例來(lái)分析一下 config配置項(xiàng)的語(yǔ)法:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
第30和40行,這兩行都以config關(guān)鍵字開(kāi)頭,后面跟著LOCALVERSION和LOCALVERSION_AUTO,這兩個(gè)就是配置項(xiàng)名字。假如我們使能了LOCALVERSION_AUTO這個(gè)功能,那么就會(huì)在.config文件中生成CONFIG_LOCALVERSION_AUTO,這個(gè)在上一小節(jié)講解如何使能dns命令的時(shí)候講過(guò)了。由此可知,.config文件中的“CONFIG_xxx(xxx就是
具體的配置項(xiàng)名字)就是Kconfig文件中config關(guān)鍵字后面的配置項(xiàng)名字加上“CONFIG_”前綴
。

config關(guān)鍵字下面的這幾行是配置項(xiàng)屬性,31-38行是LOCALVERSION的屬性, 41-58行是LOCALVERSION_AUTO的屬性。屬性里面描述了配置項(xiàng)的類(lèi)型、輸入提示、依賴(lài)關(guān)系、幫助信息和默認(rèn)值等

第31行的string是變量類(lèi)型,也就是“CONFIG_ LOCALVERSION”的變量類(lèi)型。可以為bool、tristate、string、hex和int,一共5種。最常用的是bool、tristate和string這三種,bool類(lèi)型有兩種值:y和n,當(dāng)為y的時(shí)候表示使能這個(gè)配置項(xiàng),當(dāng)為n的時(shí)候就禁止這個(gè)配置項(xiàng)。tristate類(lèi)型有三種值:y、m和n,其中y和n的涵義與bool類(lèi)型一樣,m表示將這個(gè)配置項(xiàng)編譯為模塊。string為字符串類(lèi)型,所以L(fǎng)OCALVERSION是個(gè)字符串變量,用來(lái)存儲(chǔ)本地字符串,選中以后即可輸入用戶(hù)定義的本地版本號(hào),如下圖所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
string后面的“Local version - append to U-Boot release”就是這個(gè)配置項(xiàng)在圖形界面上的顯示出來(lái)的標(biāo)題。

第32行,help表示幫助信息,告訴我們配置項(xiàng)的含義,當(dāng)我們按下“h”或 “?”彈出來(lái)的幫助界面就是help的內(nèi)容。

第41行,說(shuō)明“CONFIG_LOCALVERSION_AUTO”是個(gè)bool類(lèi)型,可以通過(guò)按下Y或N鍵來(lái)使能或者禁止CONFIG_LOCALVERSION_AUTO。

第42行,“default y”表示CONFIG_LOCALVERSION_AUTO的默認(rèn)值就是y,所以這一行默認(rèn)會(huì)被選中。

depends on和select

打開(kāi)頂層Kconfig文件,在里面有這如下代碼:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
第432行,“depends on”說(shuō)明SPL_FIT_SIGNATURE”項(xiàng)依賴(lài)于“SPL_DM”,也就是說(shuō)“SPL_DM”被選中以后“SPL_FIT_SIGNATURE”才能被選中。

第433-434行,“select”表示反向依賴(lài),當(dāng)選中“SPL_FIT_SIGNATURE”以后“SPL_FIT”和“SPL_RSA”這兩個(gè)也會(huì)被選中。

choice/endchoice

在arch/Kconfig文件中有如下代碼:

示例代碼14.2.2.7 arch/Kconfig代碼段 
7 choice 
8     prompt "Architecture select" 
9     default SANDBOX 
10 
11 config ARC 
12     bool "ARC architecture" 
...... 
19 
20 config ARM 
21     bool "ARM architecture" 
...... 
25 
26 config M68K 
27     bool "M68000 architecture" 
...... 
32 
33 config MICROBLAZE 
34     bool "MicroBlaze architecture" 
...... 
37 
38 config MIPS 39 bool "MIPS architecture" 
...... 
43 
44 config NDS32 
45     bool "NDS32 architecture" 
46     select SUPPORT_OF_CONTROL 
47 
48 config NIOS2 
49     bool "Nios II architecture" 
...... 
55 
56 config PPC 
57     bool "PowerPC architecture" 
......
62 
63 config RISCV 
64     bool "RISC-V architecture" 
...... 
215 
216 config XTENSA 
217     bool "Xtensa architecture" 
218     select CREATE_ARCH_SYMLINK 
219     select SUPPORT_OF_CONTROL 
220 
221 endchoice

choice/endchoice代碼段定義了一組可選擇項(xiàng),將多個(gè)類(lèi)似的配置項(xiàng)組合在一起,供用戶(hù)單選或者多選。示例代碼14.2.2.7就是選擇處理器架構(gòu),可以從ARC、ARM、M68K等這些架構(gòu)
中選擇,這里是單選。在uboot圖形配置界面上選擇“Architecture select”,進(jìn)入以后如下圖所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
可以在上圖中通過(guò)移動(dòng)光標(biāo)來(lái)選擇所使用的CPU架構(gòu)。第8行的prompt給出這個(gè)choice/endchoice段的提示信息為“Architecture select”。

menuconfig

menuconfig和menu很類(lèi)似,但是menuconfig是個(gè)帶選項(xiàng)的菜單,其一般用法為:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
第1行,定義了一個(gè)可選的菜單MODULES,只有選中MODULES第3-5行if到endif之間的內(nèi)容才會(huì)顯示。在頂層Kconfig中有如下代碼:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
第187-221行使用menuconfig實(shí)現(xiàn)了一個(gè)菜單,路徑如下:

General setup -> Configure standard U-Boot features (expert users) --->

如下圖所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
從上圖可以看到,前面有“[ ]”說(shuō)明這個(gè)菜單是可選的,當(dāng)選中這個(gè)菜單以后就可以進(jìn)入到子選項(xiàng)中,也就是示例代碼14.2.2.9中的第196-221行所描述的菜單,如下圖所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
如果不選擇“Configure standard U-Boot features (expert users)”,那么示例代碼14.2.2.9中的第196-221行所描述的菜單就不會(huì)顯示出來(lái),進(jìn)去以后是空白的。

comment

comment用于注釋?zhuān)簿褪窃趫D形化界面中顯示一行注釋?zhuān)蜷_(kāi)文件drivers/mtd/nand/raw/Kconfig,有如下代碼:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
第306行使用comment標(biāo)注了一行注釋?zhuān)⑨寖?nèi)容為:“Generic NAND options”,這行注釋在配置項(xiàng)NAND_STM32_FMC2的下面。在圖形化配置界面中按照如下路徑打開(kāi):

-> Device Drivers -> MTD Support -> Raw NAND Device Support

結(jié)果如下圖所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
從上圖可以看出,在配置項(xiàng)“Support for NAND controller on STM32MP SoCs”下面有一行注釋?zhuān)⑨寖?nèi)容為“*** Generic NAND options ***”。

source

source用于讀取另一個(gè)Kconfig,比如:

source "arch/Kconfig"

Kconfig語(yǔ)法就講解到這里,基本上常用的語(yǔ)法就是這些,因?yàn)閡boot相比Linux內(nèi)核要小很多,所以配置項(xiàng)也要少很多,所以建議使用uboot來(lái)學(xué)習(xí)Kconfig。一般不會(huì)修改uboot中的Kconfig文件,甚至都不會(huì)使用uboot的圖形化界面配置工具,本小節(jié)學(xué)習(xí)Kconfig的目的主要還是為了Linux內(nèi)核作準(zhǔn)備。

添加自定義菜單

圖形化配置工具的主要工作就是在.config下面生成前綴為“CONFIG_”的變量,這些變量一般都有值,為y,m或n,在uboot源碼里面會(huì)根據(jù)這些變量來(lái)決定編譯哪個(gè)文件。本小節(jié)就來(lái)學(xué)習(xí)一下如何添加自己的自定義菜單,自定義菜單要求如下:

  1. 在主界面中添加一個(gè)名為“My test menu”,此菜單內(nèi)部有一個(gè)配置項(xiàng)。
  2. 配置項(xiàng)為“MY_TESTCONFIG”,此配置項(xiàng)處于菜單“My test menu”中。
  3. 配置項(xiàng)的為變量類(lèi)型為bool,默認(rèn)值為y。
  4. 配置項(xiàng)菜單名字為“This is my test config”。
  5. 配置項(xiàng)的幫助內(nèi)容為“This is a empty config, just for tset!”。

打開(kāi)頂層Kconfig,在最后面加入如下代碼:

示例代碼14.3.1 自定義菜單 
1 menu "My test menu" 
2 
3 config MY_TESTCONFIG 
4     bool "This is my test config" 
5     default y 
6     help 
7       This is a empty config, just for test! 
8 
9 endmenu # my test menu

添加完成后打開(kāi)圖形化配置界面,如下圖所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
從上圖可以看出,主菜單最后面出現(xiàn)了一個(gè)名為“My test menu”的子菜單,這個(gè)就是上面添加進(jìn)來(lái)的子菜單。進(jìn)入此子菜單,如下圖所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
從上圖可以看出,配置項(xiàng)添加成功,選中“This is my test config”配置項(xiàng),然后按下“H”鍵打開(kāi)幫助文檔,如下圖所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
從上圖可以看出,幫助信息也正確。配置項(xiàng)MY_TESTCONFIG默認(rèn)也是被選中的,因此在.config文件中肯定會(huì)有“CONFIG_MY_TESTCONFIG=y”這一行,如下圖所示:
正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理,linux學(xué)習(xí),linux,驅(qū)動(dòng)開(kāi)發(fā),stm32,學(xué)習(xí),筆記
至此,在主菜單添加自己的自定義菜單就成功了,以后如果要編寫(xiě)Linux驅(qū)動(dòng),那么很有可能需要你來(lái)修改甚至編寫(xiě)Kconfig文件。Kconfig語(yǔ)法其實(shí)不難,重要的點(diǎn)就是那幾個(gè),最主要的是記?。篕config文件的最終目的就是在.config文件中生成以“CONFIG_”開(kāi)頭的變量

總結(jié)

本章的重點(diǎn)就是圖形化界面的學(xué)習(xí),主要就是對(duì)于Kconfig文件的解讀。uboot可以用圖形化界面配置,一般最多就是用圖形化界面來(lái)定義宏從而使能功能。更多的意義是為了之后Linux內(nèi)核的學(xué)習(xí)打下基礎(chǔ),熟悉一下Kconfig的語(yǔ)法,主要就是7個(gè)命令,通過(guò)這個(gè)命令來(lái)在.config文件中生成“CONFIG_”開(kāi)頭的變量。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-727169.html

到了這里,關(guān)于正點(diǎn)原子嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)——U-boot圖形化配置及其原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包