【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第四篇 嵌入式Linux系统移植篇-第六十八章u-boot图形化配置

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT、4G模块、CAN、RS485等接口一应俱全。H264、VP8视频硬编码,H.264、H.265、VP8、VP9视频硬解码,并提供相关历程,支持8路PDM接口、5路SAI接口、2路Speaker。系统支持Android9.0(支持获取root限)Linux4.14.78+Qt5.10.1、Yocto、Ubuntu20、Debian9系统。适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、

【公众号】迅为电子

【粉丝群】258811263(加群获取驱动文档+例程)


第六十八章u-boot图形化配置

68.1 uboot图形化配置初体验

不仅Linux内核源码有图形化配置功能,u-boot也有自己的图形化配置功能,它的目录格式和编译形式和 Linux很相似,而且部分源码也是参考的Linux。

主要依靠Makefile,.config,Kconfig,Makefile负责管理整个工程的文件。

.config负责配置那些功能模块编译进目标文件

Kconfig负责图形化配置菜单。在图形化界面选中某个功能后

源码顶层目录的.config会增加此配置选项。

使用Makefile编译u-boot镜像时会将此功能添加到u-boot。

U-Boot使用“make imx8mm_ddr4_evk_defconfig”可以对 uboot 进行一次默认配置,make distclean后默认配置就已经清除,需要重新使用“make imx8mm_ddr4_evk_defconfig”再对 uboot 进行配置。

在源码顶层目录执行make menuconfig后进入菜单配置界面,通过键盘上的“↑”和“↓”键来选择要配置的菜单,按下空格可进行选中和取消操作,按“Y”选中,菜单选项前显示“<*>”为选中;使用“N”取消,菜单选项前显示“<  >”;按“M”为将相应的代码编译为模块,菜单前显示“<M>”。按下“Enter”键进入子菜单。配置界面下方有五个按钮,<Select>为选中并进入,<Exit>为返回上一层或退出,<Help>帮助,<Save>保存,<Load>加载指定的配置文件。

上一章节我们编译完成后,Makefile会生成我们需要的工程文件,在uboot源码下执行make menuconfig,会看到如下图所示:

成功打开后如下图所示: 

主要的选项含义如下:

Architecture select (ARM architecture) —> 选择处理器架构,包含各种处理器架构子选项。

ARM architecture —> ARM 架构子选项(依赖于上面的Architecture select)

General setup —> 通用的配置,包含版本号,malloc池等子选项。

Boot images —> boot镜像

Command line interface —> 命令行接口,可以添加uboot命令和一些功能。

Device Tree Control —> 设备树控制

Networking support —> 网络配置

Device Drivers —> 设备驱动

File systems —> 文件系统

Library routines —> 库程序

选中<Save>保存图形化配置界面,然后就将配置信息写入到了源码根目录的configs/imx8mm_ddr4_evk_defconfig,然后点击“OK”“Exit”,如下图所示:

 

然后将选项移动到“Exit”,退出配置界面,如下图所示: 

配置好便可以编译uboot源码了。

68.2 Kconfig语法简介

Uboot中的Kconfig语法与内核中的Kconfig语法类似,所以在学习完驱动的教程以后,我们再来看这个语法会发现十分的简单,同样,uboot中的Kconfig语法我们也不用特别的去深入研究,我们只要掌握到可以自行往uboot中添加自己的配置即可。那么接下来我们就简单的来学下下Kconfig语法。

我们进到uboot源码下,打开顶层Kconfig文件,如下图所示:

 打开完成后如下图所示:

上图中的第一行代码mainmenu顾名思义就是主菜单,如下图所示,也就是我们输入完make menuconfig以后默认打开的界面,

mainmenu "U-Boot $UBOOTVERSION Configuration"

 从这句代码中我们可以看出主菜单的名字为“U-Boot $UBOOTVERSION Configuration”,其中$UBOOTVERSION为2018.03,如下图所示:

我们接着往下看这个Kconfig文件,我们可以发现有很多source "xxx/Kconfig"的代码,如下图所示:

 

source "xxx/Kconfig"的代码的意思是调用其他目录下的Kconfig文件,比如source "arch/Kconfig"就是调用arch目录下的Kconfig文件(arch/Kconfig为相对路径)。

source "xxx/Kconfig"代码下面是以menu "General setup"开头,以endmenu结尾的一大段代码,如下图所示:

 我们可以把这一大段代码称为menu到endmenu代码块。那么这个代码块的作用是什么呢?其实每一个代码块代表都是一个子菜单,比如上图中的menu到endmenu代码块,代表的是General setup子菜单。也就是make menuconfig中的General setup。如下图所示:

看到这里我们其实就已经可以发现make menuconfig的架构形式了,make menuconfig中的每一级界面都是有一个Kconfig描述的,上一级的Kconfig又会包含下一节的Kconfig,这样一级一级的组织起来。

 

然后我们来看menu到endmenu代码块里面的config代码,如下图所示: 

在一个menu到endmenu代码块里面有很多config条目,我们就以上图中的给大家举例子,刚才我们说了,menu到endmenu代码块就是子菜单,所以menu到endmenu代码块里面的config条目就是子菜单中的配置选项。make menuconfig中的体现如下图所示: 

config条目中的config LOCALVERSION对应子菜单中的Local version - append to U-Boot release,第二个依次类推。注意:如果配置选项不描述是看不到的,比如menu到endmenu代码块中的BROKEN,那么我们要怎么描述呢,比如我们在BROKEN下面写上string “test”(string表示类型是string),如下图所示: 

然后我们打开make menuconfig界面,进到General setup子菜单,我们就可以看到BROKEN选项了,如下图所示: 

config条目中的config LOCALVERSION后面跟着的 LOCALVERSION对应的就是u-boot目录下的.config文件中的CONFIG_LOCALVERSION,如下图所示: 

由此我们可知,每一个menu到endmenu代码块中的config条目,在.config中都会有一个一个对应的选项,对应关系为config条目中的config XXXX后面跟着的 XXXX对应.config文件中的CONFIG_XXXX(其中XXXX就是配置文件的名字,也就是例子中的LOCALVERSION

menu到endmenu代码块中的config条目除了以上内容,还有一些其他的属性,比如string代表的就是变量类型,如下图所示:

 

变量类型可以为上图中的boot或者string,也可以为tristate或者hex和int。其中boot类型俩的值有俩种,也就是y和n,也就是说,如果我们使用了这个类型,在make menuconfig对应的选项中我们可以选择y和n,tristate的值类型有三种,分别是y,n,m。如果我们使用了这个类型,在make menuconfig对应的选项中我们可以选择y和n还有m,String就是字符串类型,如果我们使用了这个类型,在make menuconfig对应的选项中我们可以输入字符串,我们最常用的就是boot和sting。

最后,menu到endmenu代码块中的config条目的help代码的就是帮助信息,如下图所示:

 

我们在make menuconfig中使用?弹出来的就是这个信息,如下图所示: 

 在Kconfig文件中,我们看到以下代码:

其中的depends on说明FIT_SIGNATURE要依赖于DM,换句话说,也就是DM选中后FIT_SIGNATURE才可以选中,select表示反向依赖,当FIT_SIGNATURE被选中以后,RSA和CONSOLE_DISABLE_CLI也会被选中。

除了depends on和select,在Kconfig文件中我们也可以看到menuconfig,如下图所示:

 

图中的menuconfig是一个带菜单的选项,其结构为以menuconfig开头,以endif结尾。上图中我们定义了一个菜单EXPERT,也就是说,只有我们选中了EXPERT,if EXPERT到 endif的内容才可以显示。

在make menuconfig 中的体现如下:

 

还有一个比较多见的就是注释了,但是此注释非彼注释,Kconfig里面comment用于注释,但是这个注释并不是把某一行代码注释的意思,而是在图形化界面中显示一行注释,比如我们在u-boot文件夹下的顶层Kconfig中config LOCALVERSION条目下添加以下代码

comment“test”

添加完如下图所示:

 

在make menuconfig的表现如下: 

68.3 自定义菜单

上一小节,我们了解了uboot中的Kconfig文件,那么这一小节我们就来实战一下,我们在make menuconfig中自定义一个自己选项。

1.在u-boot目录下创建一个名为toppet的文件夹,如下图所示:

 

2.打开u-boot下的Kconfig文件,在里面加入一下代码

source "topeet/Kconfig"

添加完成如下图所示:

 

3.然后进到我们在u-boot下创建的topeet文件夹,并在此文件下创建一个Kconfig文件,创建完成如下图所示: 

4.我们打开创建好的这个Kconfig文件,在里面填入一下代码:

menu "test menu"

config TEST_CONFIG

        bool "test"

        default y

        help

          just test

        comment "just test"

endmenu

在上面的代码中,我们在主菜单中添加了一个名为test menu的子菜单,然后在这个子菜单里面我们添加了一个名为TEST_CONFIG的配置项,这个配置项变量类型为bool,默认配置为Y,帮助信息为just test,注释为just test。

添加完成如下图所示:

 

添加完成以后在图形化配置界面表现如下:

在主菜单中添加的子菜单

 

子菜单中的配置项,默认为y,注释信息为just test。 

在此界面输入?,显示帮助信息为just test,如下图所示: 

然后我们打开u-boot下的.config文件,如下图所示:

我们可以在这个.config文件中找到我们添加的TEST_CONFIG(注意,我们需要在make menuconfig中保存才可以看到,否则是看不到我们添加的这个选项的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值