0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

uboot圖形化配置及其原理

CHANBAEK ? 來源:嵌入式攻城獅 ? 作者:安迪西 ? 2023-04-21 12:31 ? 次閱讀

uboot圖形化配置及其原理

uboot可以通過 mx6ull_xxx_defconfig和 mx6ull_xxx_emmc.h文件來配置;另外還有一種配置uboot的方法,就是圖形化配置

1.uboot圖形化配置

1.1 圖形化配置簡介

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

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

menuconfig重點會用到兩個文件:“.config”和“Kconfig”,.config文件保存著uboot的配置項,使用 menuconfig配置完 uboot后該文件會被更新; Kconfig文件是圖形界面的描述文件,即描述界面應(yīng)該有什么內(nèi)容,很多目錄下都會有Kconfig文件

1.2 uboot圖形化配置體驗

在打開圖形化配置界面前,需要先對 uboot進行一次默認(rèn)配置。 之后使用“make menuconfig”命令打開圖形化界面,打開后的界面如下示:

圖片

主界面上方的英文就是簡單的操作說明,操作方法如下:

通過向上和向下按鍵選擇要配置的菜單,“Enter"按鍵進入

選中后按"Y"鍵會將相應(yīng)的代碼編譯進uboot中,菜單前面變?yōu)?*>

選中后按"N"鍵會取消編譯相應(yīng)的代碼

選中后按"M"鍵會將相應(yīng)的代碼編譯為模塊,菜單前面變?yōu)?/p>

按兩下"Esc"鍵退出,也就是返回到上一級

按下"?“ 鍵查看選中菜單的幫助信息

按下”/"鍵打開搜索框,可在搜索框輸入要搜索的內(nèi)容

在配置界面下方有五個按鈕,其功能如下:

Select:選中按鈕,和enter按鍵功能相同

Exit:退出按鈕,和esc按鍵功能相同

Help:幫助按鈕,查看選中菜單的幫助信息

Save:保存按鈕,保存修改后的配置文件

Load:加載按鈕,加載指定的配置文件

下面以使能DNS命令為例,介紹如何通過圖形化界面來配置uboot

進入"Command line interface"配置項

圖片

進入"Network commands"網(wǎng)絡(luò)相關(guān)命令配置項

圖片

選中dns,按下"Y"鍵將其編譯到uboot中

圖片

按兩下esc鍵退出,如果有修改項目,在退出主界面時會提示是否需要保存

圖片

保存后可在uboot源碼中的".config"文件中發(fā)現(xiàn)多了"CONFIG_CMD_DNS=y"這一行

使用"make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16"命令編譯 uboot

注意:此時不能用腳本來編譯,因為腳本文件在編譯之前會清理工程,會刪除掉.config文件,導(dǎo)致通過圖形化界面配置的所有選項都被刪除

編譯完成燒寫到SD卡后,重啟開發(fā)板進入uboot命令模式,設(shè)置dns服務(wù)器的IP地址

setenv dnsip 114.114.114.114
saveenv

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

dns www.baidu.com

圖片

2.menuconfig圖形化配置原理

2.1 make menuconfig過程分析

當(dāng)輸入make menuconfig以后會匹配到頂層Makefile中的如下代碼:

%config: scripts_basic outputmakefile FORCE
    $(Q)$(MAKE) $(build)=scripts/kconfig $@
#其中build=-f ./scripts/Makefile.build obj
###將上面第二行的規(guī)則展開后:
@make -f ./scripts/Makefile.build obj=scripts/kconfig menuconfig

Makefile.build會讀取scripts/kconfig/Makefile中的內(nèi)容,在scripts/kconfig/Makefile中有如下代碼:

menuconfig: $(obj)/mconf
    $< $(silent) $(Kconfig)
#silent是這是靜默編譯的
###展開后###
menuconfig: scripts/kconfig/mconf
    scripts/kconfig/mconfKconfig

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

2.2 Kconfig語法簡介

對于Kconfig語法不需要太深入的去研究,了解其原理即可。 打開uboot根目錄下的頂層Kconfig,以這個文件為例來簡單學(xué)習(xí)一下Kconfig語法

mainmenu:主菜單

##########頂層Kconfig代碼段##########
mainmenu "U-Boot $UBOOTVERSION Configuration"

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

##########頂層Kconfig代碼段##########
source "arch/Kconfig"
......
source "common/Kconfig"
source "cmd/Kconfig"
source "dts/Kconfig"
source "net/Kconfig"
source "drivers/Kconfig"
source "fs/Kconfig"
source "lib/Kconfig"
source "test/Kconfig"

##以上子目錄下的Kconfig文件在主菜單中生成各自的菜單項

menu/endmenu條目:menu用于生成菜單,endmenu菜單結(jié)束標(biāo)志

##########頂層Kconfig代碼段##########
menu "General setup"

config LOCALVERSION
    string "Local version - append to U-Boot release"
    help
      Append an extra string to the end of your U-Boot version.
      This will show up on your boot log, for example.
      The string you set here will be appended after the contents of
      any files with a filename matching localversion* in your
      object and source tree, in that order.  Your total string can
      be a maximum of 64 characters.
......
......
endmenu		# General setup

menu "Boot images"

config SUPPORT_SPL
    bool
......
......
endmenu		# Boot images

以上代碼中有兩個menu/endmenu代碼塊,這兩個代碼塊就是兩個子菜單

圖片

config條目:是菜單里的具體配置項

##########頂層Kconfig代碼段##########
menu "General setup"

config LOCALVERSION
    string "Local version - append to U-Boot release"
    help			
    ......
config LOCALVERSION_AUTO
    bool "Automatically append version information to the version string"
    default y	#表示該配置項默認(rèn)值是y,即默認(rèn)被選中
    help	#表示幫助信息,告知配置項的含義,按下h或?會彈出help的內(nèi)容
    ......
config CC_OPTIMIZE_FOR_SIZE
    bool "Optimize for size"
    default y
    help
    ......
config SYS_MALLOC_F
    bool "Enable malloc() pool before relocation"
    default y if DM
    help
    ......
config SYS_MALLOC_F_LEN
    hex "Size of malloc() pool before relocation"
    depends on SYS_MALLOC_F
    default 0x400
    help
    ......
menuconfig EXPERT
    bool "Configure standard U-Boot features (expert users)"
    default y
    help
    ......
if EXPERT
    config SYS_MALLOC_CLEAR_ON_INIT
    bool "Init with zeros the memory reserved for malloc (slow)"
    default y
    help
    ......
endif
endmenu		# General setup

以上可看出,在menu/endmenu代碼塊中有大量的"config XXX"代碼塊(config條目)。 若使能了XXX功能,就會在 .config文件中生成 CONFIG_XXX

常用的三種變量類型:bool、tristate和string

– bool,有兩種值,y和n

– tristate,有三種值,y、n和m

– string,用來存儲本地字符串

圖片

depends on和select

########## arch/Kconfig代碼段 ##########
config SYS_GENERIC_BOARD
    bool
    depends on HAVE_GENERIC_BOARD
#depends on依賴:依賴項選中后,被依賴項才能被選中
choice
    prompt "Architecture select"
    default SANDBOX

config ARC
    bool "ARC architecture"
    select HAVE_PRIVATE_LIBGCC
    select HAVE_GENERIC_BOARD
    select SYS_GENERIC_BOARD
    select SUPPORT_OF_CONTROL
#select方向依賴,“ARC”被選擇后,四個select也會被選中

choice/endchoice:定義一組可選擇項,將多個類似配置項組合在一起,供用戶單選或多選

########## arch/Kconfig代碼段 ##########
choice
    prompt "Architecture select"
    default SANDBOX

config ARC
    bool "ARC architecture"
    ......
config ARM
    bool "ARM architecture"
    ......
config AVR32
    bool "AVR32 architecture"
    ......
config BLACKFIN
    bool "Blackfin architecture"
    ......
config M68K
    bool "M68000 architecture"
    ......
config MICROBLAZE
    bool "MicroBlaze architecture"
    ......
config MIPS
    bool "MIPS architecture"
    ......
config NDS32
    bool "NDS32 architecture"
    ......
config NIOS2
    bool "Nios II architecture"
    ......
config OPENRISC
    bool "OpenRISC architecture"

config PPC
    bool "PowerPC architecture"
    ......
config SANDBOX
    bool "Sandbox"
    ......
config SH
    bool "SuperH architecture"
    select HAVE_PRIVATE_LIBGCC

config SPARC
    bool "SPARC architecture"
    ......
config X86
    bool "x86 architecture"
    ......
endchoice

圖片

menuconfig:和menu類似,但是menuconfig是帶選項的菜單,其一般用法如下

menuconfig MODULES    #定義一個可選的菜單MODULES
    bool "菜單"
if MODULES	      #只有選中了,if里面的內(nèi)容才會顯示
......
endif # MODULES
##########頂層Kconfig代碼段##########
menu "General setup"
......
menuconfig EXPERT
    bool "Configure standard U-Boot features (expert users)"
    default y
    help
    ......

if EXPERT
    config SYS_MALLOC_CLEAR_ON_INIT
    bool "Init with zeros the memory reserved for malloc (slow)"
    default y
    help
    ......
endif
endmenu		# General setup

以上代碼實現(xiàn)了一個帶選項的菜單EXPERT,只有被選中了,if/endif里的內(nèi)容才會顯示出來

圖片

圖片

comment:用于在圖形化界面中顯示一行注釋

########## drviers/mtd/nand/Kconfig代碼段##########
config NAND_ARASAN
    bool "Configure Arasan Nand"
    help
      This enables Nand driver support for Arasan nand flash
      controller. This uses the hardware ECC for read and
      write operations.

comment "Generic NAND options"   #標(biāo)注了一行注釋

圖片

3.添加自定義菜單

圖形化配置工具的主要工作就是在.config文件里生成前綴為“CONFIG_”變量,這些變量一般都有值(y/m/n),在uboot源碼里會根據(jù)這些變量來決定編譯哪個文件。 下面介紹如何添加一個自已的自定義菜單,自定義菜單要求:

在主界面中添加名為“My test menu”菜單項,菜單內(nèi)部有一個配置項

配置項為“MY_TESTCONFIG”,處于菜單“My test menu”中

配置項的變量類型為bool,默認(rèn)值為y

配置項菜單名字為“This is my test config”

配置項的幫助內(nèi)容為“This is a empty config, just for testing!”

完成以上菜單要求,只需要在頂層Kconfig文件末尾加上如下代碼即可

menu "My test menu"

config MY_TESTCONFIG
    bool "This is my test config"
    default y
    help
      This is a empty config,just for test!

endmenu		#my test menu

添加完成后,打開圖形化配置界面,可見主菜單最后面出現(xiàn)一個名為“My test menu”的子菜單

圖片

進入子菜單如下圖示,可見配置項菜單名字

圖片

按下help按鍵打開幫助文檔,如下圖示

圖片

打開.config文件,可以發(fā)現(xiàn)“CONFIG_MY_TESTCONFIG=y”,如下圖示,至此在主菜單中添加自定義菜單的功能就實現(xiàn)了

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1373

    瀏覽量

    40310
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11312

    瀏覽量

    209713
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4791

    瀏覽量

    68695
  • 圖形化
    +關(guān)注

    關(guān)注

    0

    文章

    56

    瀏覽量

    14220
  • Uboot
    +關(guān)注

    關(guān)注

    4

    文章

    125

    瀏覽量

    28249
收藏 人收藏

    評論

    相關(guān)推薦

    [分享]圖形化系統(tǒng)的設(shè)計

    圖形化系統(tǒng)的設(shè)計 商用現(xiàn)成建模平臺如前所述,由于許多設(shè)計延遲或是根本無法面市,甚至更糟;由于設(shè)計會在推出之后宣告失敗,我們必須采取行動,確保以更短的時間獲得更優(yōu)質(zhì)的產(chǎn)品。一舉兩得
    發(fā)表于 05-30 15:56

    圖形化編程

    圖形化編程語言的線型如何區(qū)分
    發(fā)表于 05-24 13:57

    labview圖形化編程分享!

    工作以來一直從事下位機的開發(fā),對上位機了解很少。有的時候DIY時,想將下位機與上位機結(jié)合起來,但不知上位機編程怎么回事。從網(wǎng)上了解到一種圖形化編程語言(也叫G語言),LABVIEW就是圖形化編程
    發(fā)表于 10-20 20:15

    「正點原子Linux連載」第三十四章U-Boot圖形化配置及其原理

    mx6ull_alientek_emmc_defconfig來配置,或者通過文件mx6ull_alientek_emmc.h來配置uboot。還有另外一種配置
    發(fā)表于 03-16 16:16

    【正點原子FPGA連載】第十五章U-Boot圖形化配置及其原理-領(lǐng)航者ZYNQ之linux開發(fā)指南

    原子公眾號,獲取最新資料第十五章U-Boot圖形化配置及其原理在前兩章中我們知道uboot可以通過zynq_altk_defconfig來配置
    發(fā)表于 09-11 15:57

    淺析Mixly圖形化編程軟件

    Mixly 是由北師大米思齊團隊開發(fā)的圖形化編程軟件,自發(fā)布以來深受國內(nèi)創(chuàng)客圈的喜愛。Mixly 編程軟件采用圖形化編程,不用記代碼,只需要拖拽、簡單設(shè)置,就能讓你快速完成創(chuàng)意電子編程。本...
    發(fā)表于 08-04 07:35

    Mixly圖形化編程軟件介紹

    Mixly 是由北師大米思齊團隊開發(fā)的圖形化編程軟件,自發(fā)布以來深受國內(nèi)創(chuàng)客圈的喜愛。Mixly 編程軟件采用圖形化編程,不用記代碼,只需要拖拽、簡單設(shè)置,就能讓你快速完成創(chuàng)意電子編程。本...
    發(fā)表于 09-01 08:22

    STM32CubeMX圖形化配置軟件怎么使用?有哪些注意事項?

    STM32CubeMX圖形化配置軟件怎么使用?有哪些注意事項?
    發(fā)表于 02-14 06:13

    求openharmony圖形化的編程軟件

    學(xué)openharmony那些開發(fā)板,有圖形化的編程軟件嘛?
    發(fā)表于 05-05 07:43

    cpuview圖形化單片機編程軟件下載

    cpuview圖形化單片機編程軟件下載
    發(fā)表于 04-09 12:05 ?1095次下載

    Arduino教程_Arduino圖形化編程教程_ArduBlock

    Arduino教程_Arduino圖形化編程軟件_ArduBlock
    發(fā)表于 09-25 09:22 ?0次下載
    Arduino教程_Arduino<b class='flag-5'>圖形化</b>編程教程_ArduBlock

    怎樣才能縮短開發(fā)圖形化系統(tǒng)設(shè)計的時間?

    圖形化系統(tǒng)設(shè)計革命性地解決了設(shè)計問題,它將直觀的圖形化編程和靈活的商用現(xiàn)成(COTS)硬件融為一體,幫助工程師和科學(xué)家更有效地設(shè)計、建模、部署嵌入式系統(tǒng)。用戶通過圖形化系統(tǒng)設(shè)計,在設(shè)計的各個階段采用單一的環(huán)境,從而提高生產(chǎn)效率、
    發(fā)表于 07-19 07:32 ?721次閱讀
    怎樣才能縮短開發(fā)<b class='flag-5'>圖形化</b>系統(tǒng)設(shè)計的時間?

    Scratch圖形化編程軟件安裝包下載

    Scratch圖形化編程軟件安裝包下載
    發(fā)表于 06-18 09:14 ?0次下載

    STM32CubeMX圖形化配置工具的安裝教程

      STM32CubeMX是STM32芯片圖形化配置工具,通過簡單的操作便能實現(xiàn)相關(guān)配置,省去了我們配置各種外設(shè)的時間,支持MDK、IAR For ARM、TrueStudio等多種工
    的頭像 發(fā)表于 07-02 16:00 ?6374次閱讀
    STM32CubeMX<b class='flag-5'>圖形化</b><b class='flag-5'>配置</b>工具的安裝教程

    STM32CubeMx圖形化配置工具的主要特征與安裝教程

    STM32CubeMX 是意法半導(dǎo)體推出的圖形化配置工具, 通過傻瓜的操作便能實現(xiàn)相關(guān)配置, 最終能夠生成 C 語言代碼, 支持多種工具鏈, 比如 MDK、 IARFor ARM、
    的頭像 發(fā)表于 05-28 19:07 ?4490次閱讀
    STM32CubeMx<b class='flag-5'>圖形化</b><b class='flag-5'>配置</b>工具的主要特征與安裝教程