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

2024-09-11 13:46:17 浏览数 (3)

迅为i.mx8mm开发板特点:

性能强:i.MX8MM处理器采用了先进的14LPC FinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。

PMIC:采用PCA9450A电源管理,是NXP全新研制配套iMX.8M的电源管理芯片,有六个降压稳压器、五个线性稳压器和一个负载开关,为整个系统的稳定运行提供了更可靠的保证。

接口丰富:千兆工业级以太网、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、Linux4.14.78 Qt5.10.1、Yocto、Ubuntu20、Debian9系统。

全新升级《开发板使用手册》

率先提供在Android9系统上移植4G模块方法,并带大家一步步调试;

率先提供如何通过SD卡启动Linux镜像,例如yocto debian ubuntu等文件系统; 教大家如何将驱动编译进内核源码; 根据IMX8MM开发板的原理图总结了引脚信息,方便大家查阅~

售后服务:提供在线技术支持答疑,并协助用户检查原理图,提供详细的硬件设计指导文档等服务。

迅为品质:通过电磁兼容、电磁辐射标准检测、安规检测、高低温环境检测等,确保产品的可靠性。

7*24小时长期稳定运行。10年以上供货周期长,批量无优。

行业应用:适用于智能充电桩、物联网、工业控制、医疗、智能交通等,可用于任何通用工业和物联网应用。

公众号:迅为电子

-----------------------------------------------

第六十八章 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,

S

tring 就是字符串类型,如果我们使用了这个类型,在 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 中保

存才可以看到,否则是看不到我们添加的这个选项的)

0 人点赞