日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

U-Boot 图形化配置及其原理

發布時間:2023/12/10 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 U-Boot 图形化配置及其原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • U-Boot 圖形化配置體驗(如何使能dns 命令)
  • menuconfig 圖形化配置原理
  • make menuconfig 過程分析
  • Kconfig 語法簡介
      • 1、mainmenu
      • 2、調用其他目錄下的Kconfig 文件
      • 3、menu/endmenu 條目
      • 3、config 條目
      • 4、depends on 和select
      • 4、choice/endchoice
      • 5、menuconfig
      • 6、comment
      • 7、source
    • 添加自定義菜單

在前兩章中我們知道uboot 可以通過mx6ull_alientek_emmc_defconfig 來配置,或者通過文件mx6ull_alientek_emmc.h 來配置uboot。還有另外一種配置uboot 的方法,就是圖形化配置,以前的uboot 是不支持圖形化配置,只有Linux 內核才支持圖形化配置。不過不知道從什么時候開始,uboot 也支持圖形化配置了,本章我們就來學習一下如何通過圖形化配置uboot,并且學習一下圖形化配置的原理,因為后面學習Linux 驅動開發的時候可能要修改圖形配置文件。

U-Boot 圖形化配置體驗(如何使能dns 命令)

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

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

menuconfig 重點會用到兩個文件:.config 和Kconfig,.config 文件前面已經說了,這個文件保存著uboot 的配置項,使用menuconfig 配置完uboot 以后肯定要更新.config 文件。Kconfig文件是圖形界面的描述文件,也就是描述界面應該有什么內容,很多目錄下都會有Kconfig 文件。

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

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_alientek_emmc_defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

如果已經在uboot 的頂層Makefile 中定義了ARCH 和CROSS_COMPILE 的值,那么上述命令可以簡化為:

make mx6ull_alientek_emmc_defconfig make menuconfig

打開后的圖形化界面如圖34.1.1 所示:

通過鍵盤上的“↑”和“↓”鍵來選擇要配置的菜單,按下“Enter”鍵進入子菜單。菜單中高亮的字母就是此菜單的熱鍵,在鍵盤上按下此高亮字母對應的鍵可以快速選中對應的菜單。

選中子菜單以后按下“Y”鍵就會將相應的代碼編譯進Uboot 中,菜單前面變為“< * >”。按下“N”鍵不編譯相應的代碼,按下“M”鍵就會將相應的代碼編譯為模塊,菜單前面變為“< M >”。

按兩下“Esc”鍵退出,也就是返回到上一級,按下“?”鍵查看此菜單的幫助信息,按下“/”鍵打開搜索框,可以在搜索框輸入要搜索的內容。
在配置界面下方會有五個按鈕,這五個按鈕的功能如下:

  • < Select>:選中按鈕,和“Enter”鍵的功能相同,負責選中并進入某個菜單。
  • < Exit>:退出按鈕,和按兩下“Esc”鍵功能相同,退出當前菜單,返回到上一級。
  • < Help>:幫助按鈕,查看選中菜單的幫助信息。
  • < Save>:保存按鈕,保存修改后的配置文件。
  • < Load>:加載按鈕,加載指定的配置文件。

在圖34.1.1 中共有13 個配置主配置項,通過鍵盤上的上下鍵調節配置項。后面跟著“—>”表示此配置項是有子配置項的,按下回車鍵就可以進入子配置項。

我們就以如何使能dns 命令為例,講解一下如何通過圖形化界面來配置uboot。進入“Command line interface —>”這個配置項,此配置項用于配置uboot 的命令,進入以后如圖34.1.2 所示:

從圖34.1.2 可以看出,有很多配置項,這些配置項也有子配置項,選擇“Network commands—>”,進入網絡相關命令配置項,如圖34.1.3 所示:

從圖34.1.3 可以看出,uboot 中有很多和網絡有關的命令,比如bootp、tftpboot、dhcp 等等。選中dns,然后按下鍵盤上的“Y”鍵,此時dns 前面的“[ ]”變成了“[ * ]”,如圖34.1.4所示:

每個選項有3 種編譯選項:編譯進uboot 中(也就是編譯進u-boot.bin 中)、取消編譯(也就是不編譯這個功能模塊)、編譯為模塊。按下“Y”鍵表示編譯進uboot 中,此時“[ ]”變成了“[ * ]”;按下“N”表示不編譯,“[ ]”默認表示不編譯;有些功能模塊是支持編譯為模塊的,這個一般在Linux 內核里面很常用,uboot 下面不使用,如果要將某個功能編譯為模塊,那就按下“M”,此時“[ ]”就會變為“< M >”。

細心的朋友應該會發現,在mx6ull_alientek_emmc.h 里面我們配置使能了dhcp 和ping 命令,但是在圖34.1.3中dhcp 和ping 前面的“[ ]”并不是“[ * ]”,也就是說不編譯dhcp 和ping命令,這不是沖突了嗎?實際情況是dhcp和ping 命令是會編譯的。之所以在圖34.1.3 中沒有體現出來時因為我們是直接在mx6ull_alientek_emmc.h中定義的宏CONFIG_CMD_PING 和 CONFIG_CMD_DHCP,而menuconfig 是通過讀取.config
文件來判斷使能了哪些功能,.config里面并沒有宏CONFIG_CMD_PING
和CONFIG_CMD_DHCP,所以menuconfig 就會識別出錯。

選中dns,然后按下“H”或者“?”鍵可以打開dns 命令的提示信息,如圖34.1.5 所示:

按兩下ESC 鍵即可退出提示界面,相當于返回上一層。選擇dns 命令以后,按兩下ESC 鍵(按兩下ESC 鍵相當于返回上一層),退出當前配置項,進入到上一層配置項。如果沒有要修改的就按兩下ESC 鍵,退出到主配界面,如果也沒有其他要修改的,那就再次按兩下ESC 鍵退出menuconfig 配置界面。如果修改過配置的話,在退出主界面的時候會有如圖34.1.6 所示提
示:

圖34.1.6 詢問是否保存新的配置文件,通過鍵盤的←或→鍵來選擇“Yes”項,然后按下鍵盤上的回車鍵確認保存。至此,我們就完成了通過圖形界面使能了uboot 的dns 命令,打開.config文件,會發現多了“CONFIG_CMD_DNS=y”這一行,如圖34.1.7 中的323 行所示:

使用如下命令編譯uboot:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16

千萬不能使用如下命令:

./mx6ull_alientek_emmc.sh

因為mx6ull_alientek_emmc.sh 在編譯之前會清理工程,會刪除掉.config 文件!通過圖形化界面配置所有配置項都會被刪除,結果就是竹籃打水一場空。

編譯完成以后燒寫到SD 卡中,重啟開發板進入uboot 命令模式,輸入“?”查看是否有“dns”命令,一般肯定有的。使用dns 命令來查看一下百度官網“www.baidu.com”的IP 地址。

注意!如果要與外部互聯網通信,比如百度官網,這個時候要保證開發板能訪問到外部互聯網。如果你的開發板和電腦直接用網線連接的,那么肯定無法連接到外部網絡,這個時候dns命令查看百度官網也會失敗!所以開發板一定要連接到路由器上,而且要保證你的路由器能訪問外網,比如手機連接到這個路由器上以后可以正常訪問互聯網。

要先設置一下dns 服務器的IP 地址,也就是設置環境變量dnsip 的值,命令如下:

setenv dnsip 114.114.114.114 saveenv

設置好以后就可以使用dns 命令查看百度官網的IP 地址了,輸入命令:

dns www.baidu.com

結果如圖34.1.8 所示:

從圖34.1.7 可以看出,“www.baidu.com”的IP 地址為14.215.177.38,說明dns 命令工作正常。這個就是通過圖形化命令來配置uboot,一般用來使能一些命令還是很方便的,這樣就不需要到處找命令的配置宏是什么,然后在到配置文件里面去定義。

menuconfig 圖形化配置原理

make menuconfig 過程分析

當輸入make menuconfig 以后會匹配到頂層Makefile 的如下代碼:

這個在31.3.13 小節已經詳細的講解過了,其中build=-f ./scripts/Makefile.build obj,將490行的規則展開就是:

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

Makefile.build 會讀取scripts/kconfig/Makefile 中的內容,在scripts/kconfig/Makefile 中可以
找到如下代碼:

示例代碼34.2.1.2 scripts/kconfig/Makefile 代碼段 menuconfig: $(obj)/mconf $< $(silent) $(Kconfig)

其中obj= scripts/kconfig,silent 是設置靜默編譯的,在這里可以忽略不計,Kconfig=Kconfig,因此擴展以后就是:

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

目標menuconfig 依賴scripts/kconfig/mconf,因此scripts/kconfig/mconf.c 這個文件會被編譯,生成mconf 這個可執行文件。目標menuconfig 對應的規則為scripts/kconfig/mconf Kconfig,也就是說mconf 會調用uboot 根目錄下的Kconfig 文件開始構建圖形配置界面。

Kconfig 語法簡介

上一小節我們已經知道了scripts/kconfig/mconf 會調用uboot 根目錄下的Kconfig 文件開始構建圖形化配置界面,接下來簡單學習一下Kconfig 的語法。因為后面學習Linux 驅動開發的時候可能會涉及到修改Kconfig,對于Kconfig 語法我們不需要太深入的去研究,關于Kconfig的詳細語法介紹,可以參考linux 內核源碼(不知為何uboot 源碼中沒有這個文件)中的文件
Documentation/kbuild/kconfig-language.txt,本節我們大概了解其原理即可。打開uboot 根目錄下的Kconfig,這個Kconfig 文件就是頂層Kconfig,我們就以這個文件為例來簡單學習一下Kconfig語法。

1、mainmenu

顧名思義mainmenu 就是主菜單,也就是輸入“make menuconfig”以后打開的默認界面,在頂層Kconfig 中有如下代碼:

示例代碼34.2.2.1 頂層Kconfig 代碼段 mainmenu "U-Boot $UBOOTVERSION Configuration"

上述代碼就是定義了一個名為“U-Boot $UBOOTVERSION Configuration”的主菜單,其中UBOOTVERSION=2016.03,因此主菜單名為“U-Boot 2016.03 Configuration”,如圖34.2.2.1 所示:

2、調用其他目錄下的Kconfig 文件

和makefile 一樣,Kconfig 也可以調用其他子目錄中的Kconfig 文件,調用方法如下:

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

在頂層Kconfig 中有如下代碼:


從示例代碼34.2.2.2 中可以看出,頂層Kconfig 文件調用了很多其他子目錄下的Kcofig 文件,這些子目錄下的Kconfig 文件在主菜單中生成各自的菜單項。

3、menu/endmenu 條目

menu 用于生成菜單,endmenu 就是菜單結束標志,這兩個一般是成對出現的。在頂層Kconfig 中有如下代碼:



示例代碼34.2.2.3 中有兩個menu/endmenu 代碼塊,這兩個代碼塊就是兩個子菜單,第14行的“menu “General setup””表示子菜單“General setup”。第102 行的“menu “Boot images””表示子菜單“Boot images”。體現在主菜單界面中就如圖34.2.2.2 所示:


在“General setup”菜單上面還有“Architecture select (ARM architecture)”和“ARM architecture ”這兩個子菜單,但是在頂層Kconfig 中并沒有看到這兩個子菜單對應的menu/endmenu 代碼塊,那這兩個子菜單是怎么來的呢?這兩個子菜單就是arch/Kconfig 文件生成的。包括主界面中的“Boot timing”、“Console recording”等等這些子菜單,都是分別由頂層Kconfig 所調用的common/Kconfig、cmd/Kconfig 等這些子Kconfig 文件來創建的。

3、config 條目

頂層Kconfig 中的“General setup”子菜單內容如下:



可以看出,在menu/endmenu 代碼塊中有大量的“config xxxx”的代碼塊,也就是config 條目。config 條目就是“General setup”菜單的具體配置項,如圖34.2.2.3 所示:

“config LOCALVERSION”對應著第一個配置項,“config LOCALVERSION_AUTO”對應著第二個配置項,以此類推。我們以“config LOCALVERSION ”和“config LOCALVERSION_AUTO”這兩個為例來分析一下config 配置項的語法:

第16 和26 行,這兩行都以config 關鍵字開頭,后面跟著LOCALVERSION 和LOCALVERSION_AUTO,這兩個就是配置項名字。假如我們使能了LOCALVERSION_AUTO這個功能,那么就會下.config 文件中生成CONFIG_LOCALVERSION_AUTO,這個在上一小節講解如何使能dns 命令的時候講過了。由此可知,.config 文件中的“CONFIG_xxx”(xxx 就是
具體的配置項名字)就是Kconfig 文件中config 關鍵字后面的配置項名字加上“CONFIG_”前綴。

config 關鍵字下面的這幾行是配置項屬性,17~24 行是LOCALVERSION 的屬性,27~44 行是LOCALVERSION_AUTO 的屬性。屬性里面描述了配置項的類型、輸入提示、依賴關系、幫助信息和默認值等。

第17 行的string 是變量類型,也就是“CONFIG_ LOCALVERSION”的變量類型??梢詾?#xff1a;bool、tristate、string、hex 和int,一共5 種。最常用的是bool、tristate 和string 這三種,bool 類型有兩種值:y 和n,當為y 的時候表示使能這個配置項,當為n 的時候就禁止這個配置項。

tristate 類型有三種值:y、m 和n,其中y 和n 的涵義與bool 類型一樣,m 表示將這個配置項編譯為模塊。string 為字符串類型,所以LOCALVERSION 是個字符串變量,用來存儲本地字符串,選中以后即可輸入用戶定義的本地版本號,如圖34.2.2.4 所示:


string 后面的“Local version - append to U-Boot release”就是這個配置項在圖形界面上的顯示出來的標題。

第18 行,help 表示幫助信息,告訴我們配置項的含義,當我們按下“h”或“?”彈出來的幫助界面就是help 的內容。

第27 行,說明“CONFIG_LOCALVERSION_AUTO”是個bool 類型,可以通過按下Y 或N 鍵來使能或者禁止CONFIG_LOCALVERSION_AUTO。

第28 行,“default y”表示CONFIG_LOCALVERSION_AUTO 的默認值就是y,所以這一行默認會被選中。

4、depends on 和select

打開arch/Kconfig 文件,在里面有這如下代碼:



第9 行,“depends on”說明“SYS_GENERIC_BOARD”項依賴于“HAVE_GENERIC_BOARD”,也就是說“HAVE_GENERIC_BOARD”被選中以后“SYS_GENERIC_BOARD”才能被選中。

第17~20 行,“select”表示方向依賴,當選中“ARC”以后,“HAVE_PRIVATE_LIBGCC”、“HAVE_GENERIC_BOARD”、“SYS_GENERIC_BOARD”和“SUPPORT_OF_CONTROL”這四個也會被選中。

4、choice/endchoice

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

choice/endchoice 代碼段定義了一組可選擇項,將多個類似的配置項組合在一起,供用戶單選或者多選。示例代碼34.2.2.7 就是選擇處理器架構,可以從ARC、ARM、AVR32 等這些架構中選擇,這里是單選。在uboot 圖形配置界面上選擇“Architecture select”,進入以后如圖34.2.2.5所示:


可以在圖34.2.2.5 中通過移動光標來選擇所使用的CPU 架構。第12 行的prompt 給出這個choice/endchoice 段的提示信息為“Architecture select”。

5、menuconfig

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

第1 行,定義了一個可選的菜單MODULES,只有選中了MODULES 第3~5 行if 到endifx之間的內容才會顯示。在頂層Kconfig 中有如下代碼:


第74~99 行使用menuconfig 實現了一個菜單,路徑如下:

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

如圖34.2.2.6 所示:

從圖34.2.2.6 可以看到,前面有“[ ]”說明這個菜單是可選的,當選中這個菜單以后就可以進入到子選項中,也就是示例代碼34.2.2.9 中的第83~99 行所描述的菜單,如圖34.2.2.7 所示:

如果不選擇“Configure standard U-Boot features (expert users)”,那么示例代碼34.2.2.9 中的第83~99 行所描述的菜單就不會顯示出來,進去以后是空白的。

6、comment

comment 用于注釋,也就是在圖形化界面中顯示一行注釋,打開文件
drivers/mtd/nand/Kconfig,有如下所示代碼:

74 config NAND_ARASAN 75 bool "Configure Arasan Nand" 76 help ...... 80 81 comment "Generic NAND options"

第81 行使用comment 標注了一行注釋,注釋內容為:“Generic NAND options”,這行注釋在配置項NAND_ARASAN 的下面。在圖形化配置界面中按照如下路徑打開:

-> Device Drivers -> NAND Device Support

結果如圖34.2.2.8 所示:

從圖34.2.2.8 可以看出,在配置項“Configure Arasan Nand”下面有一行注釋,注釋內容為“*** Generic NAND options ***”。

7、source

source 用于讀取另一個Kconfig,比如:

source "arch/Kconfig"

這個在前面已經講過了。

Kconfig 語法就講解到這里,基本上常用的語法就是這些,因為uboot 相比Linux 內核要小很多,所以配置項也要少很多,所以建議大家使用uboot 來學習Kconfig。一般不會修改uboot中的Kconfig 文件,甚至都不會使用uboot 的圖形化界面配置工具,本小節學習Kconfig 的目的主要還是為了Linux 內核作準備。

添加自定義菜單

圖形化配置工具的主要工作就是在.config 下面生成前綴為“CONFIG_”的變量,這些變量一般都要值,為y,m 或n,在uboot 源碼里面會根據這些變量來決定編譯哪個文件。本小節我們就來學習一下如何添加自己的自定義菜單,自定義菜單要求如下:

  • ①、在主界面中添加一個名為“My test menu”,此菜單內部有一個配置項。
  • ②、配置項為“MY_TESTCONFIG”,此配置項處于菜單“My test menu”中。
  • ③、配置項的為變量類型為bool,默認值為y。
  • ④、配置項菜單名字為“This is my test config”。
  • ⑤、配置項的幫助內容為“This is a empty config, just for tset!”。

打開頂層Kconfig,在最后面加入如下代碼:

menu "My test menu"config MY_TESTCONFIGbool "This is my test config"default yhelpThis is a empty config, just for test!endmenu # my test menu

添加完成以后打開圖形化配置界面,如圖34.3.1 所示:

從圖34.3.1 可以看出,主菜單最后面出現了一個名為“My test menu”的子菜單,這個就是我們上面添加進來的子菜單。進入此子菜單,如圖34.3.2 所示:

從圖34.3.2 可以看出,配置項添加成功,選中“This is my test config”配置項,然后按下“H”鍵打開幫助文檔,如圖34.3.3 所示:


從圖34.3.3 可以看出,幫助信息也正確。配置項MY_TESTCONFIG 默認也是被選中的,因此在.config 文件中肯定會有“CONFIG_MY_TESTCONFIG=y”這一行,如圖34.3.4 所示:

至此,我們在主菜單添加自己的自定義菜單就成功了,以后大家如果去半導體原廠工作的話,如果要編寫Linux 驅動,那么很有可能需要你來修改甚至編寫Kconfig 文件。Kconfig 語法其實不難,重要的點就是34.2.2 小節中的那幾個,最主要的是記住:Kconfig 文件的最終目的就是在.config 文件中生成以“CONFIG_”開頭的變量。

總結

以上是生活随笔為你收集整理的U-Boot 图形化配置及其原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。