嵌入式Linux(二十一)U-Boot图形化配置及其原理

文章介绍了如何使用U-Boot的图形化配置工具menuconfig进行配置,包括使能DNS命令的步骤,并解析了makemenuconfig的执行过程,涉及到Kconfig语法和依赖关系。此外,还展示了添加自定义菜单和配置项的方法。
摘要由CSDN通过智能技术生成

1. U-Boot图形化配置体验

  前面用了mx6ull_alientek_emmc_defconfig和mx6ull_alientek_emmc.h对uboot进行了配置,还有一种方式是图形化配置。后面学习linux驱动开发也需要学会图形配置。
  由于Makefile中已经有ARCH和CROSS_COMPILE的值,直接输入以下代码打开图形化配置界面:

make mx6ull_alientek_emmc_defconfig
make menuconfig

在这里插入图片描述
以使能dns命令为例:
①选中“Command line interface —>”这个配置项,该主配置项用于配置uboot的命令。
②进入后,选择“Network commands —>”进入网络相关命令配置项。
③选中dns,然后按下"Y",dns前面的[ ]变为[ * ]
④Y表示编译进uboot中;按下N表示不编译,对应“[ ]”;按下M表示编译为模块,一般用于linux内核不用于uboot,对应“[ M ]”
⑤保存退出,打开.config文件,多了一行“CONFIG_CMD_DNS=y”。
⑥输入以下命令编译uboot(千万不能使用.sh,会清除掉.config,导致图形化配置失效,除非删掉.sh里面的distclean):

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

⑦打开uboot,设置dns服务器IP地址:

setenv dnsip 114.114.114.114

⑧将开发板直接接到路由器,要访问外部互联网,输入“dns www.xxx.com”即可查看对应网站IP地址。

  需要注意的是,menuconfig是通过读取.config文件来判断使用了哪些命令,所以这里dhcp和ping命令是“[ ]”,实际上这两个命令定义在.h的宏中,实际上是会编译的。

2. U-Boot图形化配置原理

2.1 make menuconfig过程分析

  输入该命令后,匹配到顶层make的以下代码:

%config: scripts_basic outputmakefile FORCE
	$(Q)$(MAKE) $(build)=scripts/kconfig $@
	/*展开:@ make -f ./scripts/Makefile.build obj=scripts/kconfig menuconfig*/

  这一句命令会读取scripts/kconfig/Makefile的以下代码。
  目标menuconfig依赖于scripts/kconfig/mconf,所以mconf.c会编译生成mconf可执行文件。menuconfig对应规则为scripts/kconfig/mconf Kconfig,所以mconf会调用uboot根目录下的Kconfig文件开始构建图形配置界面。

menuconfig: $(obj)/mconf
	$< $(silent) $(Kconfig)

/*展开:
menuconfig: scripts/kconfig/mconf
	scripts/kconfig/mconf Kconfig
*/

2.2 Kconfig语法简介

打开顶层Kconfig:

/*定义了一个名为“U-Boot $U...”的主菜单*/
mainmenu "U-Boot $UBOOTVERSION Configuration"

/*调用其它子Kconfig*/
source "xxx/Kconfig"

/*meun生成菜单,endmenu结束菜单*/

/*config条目-菜单的具体配置项*/
config xxx
/*如果xxx配置项使能了,就会在.config中生成CONFIG_xxx*/

comment "Generic NAND options"       /*图形化界面中注释*/

打开arch/Kconfig:

/*deoends on说明SYS_依赖于HAVE_*/
config SYS_GENERIC_BOARD
	bool
	depends on HAVE_GENERIC_BOARD

/*select表示方向依赖,选中ARC后,HAVE_也会被选中*/
config ARC
	bool "ARC architecture"
	select HAVE_PRIVATE_LIBGCC
	
/*choice/endchoice定义了一组可选择项*/
/*prompt是这个段的提示信息:选择CPU架构*/
choice
	prompt "Architecture select"
	default SANDBOX
...
endchoice

menuconfig基本用法:

/*定义了一个可选菜单MODULES,只有选中MODULES才会显示if中的内容*/
menuconfig MODULES 
	bool "菜单"
if MODULES
...
endif # MODULES

2.3 添加自定义菜单

要求如下:
①在主界面中添加一个名为“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_TESTCONFIG
	bool "This is my test config"
	default y
	help
		This is a empty config, just for test!
endmenu # my test menu

在.config文件中找到了:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值