uboot图形化配置及其原理

uboot图像化配置

uboot 或 Linux 内核可以通过输入“make menuconfig”来打开图形化配置界面,menuconfig
是一套图形化的配置工具,需要 ncurses 库支持

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

menuconfig 重点会用到两个文件:.config Kconfig

  • config

文件保存着 uboot 的配置项,使用 menuconfig 配置完 uboot 以后会更新.config 文件

  • Kconfig

Kconfig 文件是图形界面的描述文件,也就是描述界面应该有什么内容,很多目录下都会有 Kconfig 文件

在打开图形化配置界面之前,要先使用“make xxx_defconfig”uboot 进行一次默认配置。

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- XXX_defconfig 
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

操作方法

<Select>:选中按钮,和“Enter”键的功能相同,负责选中并进入某个菜单。
<Exit>:退出按钮,和按两下“Esc”键功能相同,退出当前菜单,返回到上一级。
<Help>:帮助按钮,查看选中菜单的帮助信息。
<Save>:保存按钮,保存修改后的配置文件。
<Load>:加载按钮,加载指定的配置文件。

- 键盘上的“↑”和“↓”键来选择要配置的菜单,按下“Enter”键进入子菜单。
- 菜单中高亮的字母就是此菜单的热键,在键盘上按下此高亮字母对应的键可以快速选中对应菜单。
- 选中子菜单以后按下“Y”键就会将相应的代码编译进 Uboot 中,菜单前面变为“< * >”
- 按下“N”键不编译相应的代码
- 按下“M”键就会将相应的代码编译为模块,菜单前面变为“< M >”。
- 按两下“Esc”键退出,也就是返回到上一级
- 按下“?”键查看此菜单的帮助信息
- 按下“/”打开搜索框,可以在搜索框输入要搜索的内容

配置uboot

“Command line interface --->”这个配置项,此配置项用于配置 uboot 的命令

在这里插入图片描述

在里面就可以进行配置。

保存完后,使用命令编译uboot

bear make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4

不要清理工程,会删除掉.config 文件!通过图形化界面配置所有配置项都会被删除

DNS设置

搜索 /DNS,得到路径。退出,进入DNS路径。状态改为Y,括号内为星号。退出并保存图形化配置,打开.configs文件 ,ubuntu终端输入vim .configs。搜索DNS ,VIM命令行输入/DNS。发现是Y,就是打开DNS配置也可以在uboot中可以输入“?”查看是否有“dns”命令

在这里插入图片描述

setenv dnsip 114.114.114.114  --> 设置服务器ip地址
saveenv
dns www.baidu.com             --> 测试dns命令

menuconfig 图形化配置原理

当输入 make menuconfig 以后会匹配到顶层 Makefile中的如下代码:

在这里插入图片描述

scripts/kconfig/Makefile中有如下:

在这里插入图片描述

目标 menuconfig 依赖 scripts/kconfig/mconf,因此 scripts/kconfig/mconf.c 这个文件会被编
译,生成 mconf 这个可执行文件。目标 menuconfig 对应的规则为 scripts/kconfig/mconf Kconfig
也就是说 mconf 会调用 uboot 根目录下的 Kconfig 文件开始构建图形配置界面

Kconfig 语法简介

可以参考linux内核源码中的Documentation/kbuild/kconfig-language.txt

mainmenu

mainmenu "U-Boot $UBOOTVERSION Configuration"
# 也就是主目录的主标题是 U-Boot 2016.3 Configuration
$UBOOTVERSION 就是uboot的版本号

调用其他目录下的 Kconfig 文件

和 makefile 一样,Kconfig 也可以调用其他子目录中的 Kconfig 文件

source "xxx/Kconfig"   # 其中XXX为具体的路径名

# 在顶层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"

menu/endmenu 条目

menu 用于 生 成 菜单 , endmenu 就是 菜 单 结束 标 志,这 两 个一般是成对出现的

# 在顶层文件是这样的
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 SYS_CLK_FREQ
	depends on ARC || ARCH_SUNXI
	int "CPU clock frequency"
	help
	  TODO: Move CONFIG_SYS_CLK_FREQ for all the architecture

endmenu		# Boot images	  

上面就显示了两种子菜单,General setupBoot images

其他子菜单是arch/Kconfig文件生成的或者由顶层 Kconfig 所调用的 common/Kconfigcmd/Kconfig 等这些子 Kconfig 文件来创建的

config 条目

menu -- endmenu中间会有很对个config条目,其中就是该子菜单中的配置项。

.config 文件中的“CONFIG_xxx”就是 Kconfig 文件中 config 关键字后面的配置项名字加上“CONFIG_”前缀

config ARCH_AIROHA 
    bool "选项名" 
    depends on ARCH_MULTI_V7 
    select ARM_AMBA 
    default n 
    help 
      Support for Airoha EN7523 SoCs
config —> 选项。
ARCH_AIROHA —> 句柄,可用于控制Makefile,选择编译方式。
bool —> 选择可能:TRUE选中、FALSE不选;选中则编译,不选中则不编译。如果后面选项名字串为空,则表示其不会出现在选择软件列表中。 
depends on —> 依赖,后面的选择被选择后,这个选项才能被选。
select> 当前选项选中后,则select后指定的选项自动被选择。
default—> 缺省配置项。
help—> 帮助信息。

变量类型

  • bool
config BSP_USING_WDT
    bool "Enable Watchdog Timer"
    select RT_USING_WDT
    default n
# bool 类型有两种值:y 和 n,
# 当为 y 的时候表示使能这个配置项,
# 当为 n 的时候就禁止这个配置项
  • string
config RT_CONSOLE_DEVICE_NAME
    string "the device name for console"
    default "uart1"
# string 为字符串类型,所以RT_CONSOLE_DEVICE_NAME 是个字符串变量,
# 用来存储字符串,默认是uart1
  • int
config BSP_I2C1_SCL_PIN
    int "I2C1 scl pin number"
    range 1 176
    default 116
# 整型变量的取值范围是一个整型的数,range表示范围在1--176
  • hex
# 十六进制类型变量的取值范围是一个十六进制的数
# 其使用方法和整型变量用法一致
# 整型变量生成的是十进制的数,而十六进制生成的是十六进制的数。
  • tristate
# 三态类型变量的取值范围是 y、n 和 m。
# tristate 代表在内核中有三种状态,一种是不选中,一种是选中直接编译进内核,还有一种是 m 手动添加驱动
# 而布尔类型变量只有两种状态,即选中和不选中。其使用方法和布尔类型变量类似。

depends on 和 select

config ARCH_AIROHA 
    bool "选项名" 
    depends on ARCH_MULTI_V7 
    select ARM_AMBA 
    default n 
    help 
      Support for Airoha EN7523 SoCs

# depends on 说明“ARCH_MULTI_V7”项是依赖“ARCH_AIROHA”项的。
# 也就是说“ARCH_AIROHA”项被选中以后,“ARCH_MULTI_V7”项才能被选中

# select表示的是方向依赖。
# 也就是说“ARCH_AIROHA”项被选中以后,那么“ARM_AMBA”项也就是会被自动的选中

choice/endchoice

# choice语句中定义的变量只有bool和tristate。
# choice/endchoice 代码段定义了一组可选择项,将多个类似的配置项组合在一起。只能选择其中的一个。
choice
    prompt "Select clock source"
    default BSP_RTC_USING_LSE
    
    config BSP_RTC_USING_LSE
        bool "RTC USING LSE"
        
    config BSP_RTC_USING_LSI
        bool "RTC USING LSI"
endchoice
# 也就是默认是“BSP_RTC_USING_LSE”,只能在“BSP_RTC_USING_LSE”和“BSP_RTC_USING_LSI”中选中一个
  • menuconfig
menu "Hardware Drivers Config"
   menuconfig BSP_USING_UART
       bool "Enable UART"
       default y
       select RT_USING_SERIAL
       if BSP_USING_UART
           config BSP_USING_UART1
               bool "Enable UART1"
               default y

           config BSP_UART1_RX_USING_DMA
               bool "Enable UART1 RX DMA"
               depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA
               default n
    endif
endmenu

# menuconfig:表示菜单(本身属于一个菜单中的项目,但是他又有子菜单项目)
# config表示菜单中的一个配置项(本身并没有子菜单下的项目)。
# 一个menuconfig后面跟着的所有config项就是这个menuconfig的子菜单。
  • comment
# comment用于注释,也就是在图形化界面中显示一行注释
menu "Hardware Drivers Config"
    comment "uart2 pin conflict with Ethernet and PWM"
    config BSP_USING_COM2
        bool "Enable COM2"
        select BSP_USING_UART
        select BSP_USING_UART2
        default n
endmenu

# 在图形化中就会显示为
   *** uart2 pin conflict with Ethernet and PWM
[] Enable COM2

添加自定义菜单

①、在主界面中添加一个名为“My test menu”,此菜单内部有一个配置项。
②、配置项为“MY_TESTCONFIG”,此配置项处于菜单“My test menu”中。
③、配置项的为变量类型为 bool,默认值为 y。
④、配置项菜单名字为“This is my test config”

# 在顶层的Kconfig中的最后endmenu的后面添加代码
menu "My test menu"
	comment "this is my test menu"
	config MY_TESTCONFIG
		bool "This is my test config"
		default y
		help
			This is a empty config, just for test!
endemun	#My test menu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值