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

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

时间:2024-09-11 11:13:12浏览次数:14  
标签:代码 菜单 Kconfig make menuconfig 嵌入式 Linux config 图形化

 

 

迅为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 中保

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

 

 

标签:代码,菜单,Kconfig,make,menuconfig,嵌入式,Linux,config,图形化
From: https://www.cnblogs.com/topeet/p/18407922

相关文章

  • 如何在 Linux 系统中查看 CPU 核数和内存大小
     在日常运维和开发中,了解服务器或虚拟机的硬件配置是非常重要的一环。无论是进行性能调优,还是资源分配,了解CPU的核数和内存大小可以帮助我们更好地规划应用的运行环境。本篇博客将介绍如何在Linux系统中查看CPU核数和内存大小。一、查看CPU核数在Linux中,查看CPU......
  • arm64 Linux操作系统知识点
    一、C语言常见陷阱1.数据模型ARM64下可以采用LP64和ILP64数据模型,在Linux系统下默认采用LP64数据模型。LP64中,L表示Long,P表示Pointer(指针长度),ILP32、ILP64、LP64数据模型中不同数据类型的长度数据类型/字节ILP32数据模型中的长度ILP64数据模型中的长度LP64......
  • 痞子衡嵌入式:在MDK开发环境下自定义安装与切换不同编译器版本的方法
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是在MDK开发环境下自定义安装与切换不同编译器版本的方法。KeilMDK想必是嵌入式开发者最熟悉的工具之一了,自2005年Arm公司收购Keil公司之后,MDK就走上了发展快车道,从v2.50a一路狂奔到现在最新的v......
  • day08(网络编程基础)Linux IO 模型(IO多路复用)
    目录场景假设select特点编程步骤练习练习一:输入鼠标的时候,响应鼠标事件,输入键盘的时候,响应键盘事件(两路IO)练习二:用select创建并发服务器,可以同时连接多个客户端(0,sockfd)(12min)练习三:用select创建并发服务器,可以与多个客户端进行通信(监听键盘、socket、多个accept......
  • day07(网络编程基础)Linux IO模型(阻塞IO、非阻塞IO、信号驱动IO(异步IO))
    目录场景假设一.阻塞式IO:最常见、效率低、不耗费cpuTCP粘包、拆包发生原因:二.非阻塞IO:轮询、耗费CPU,可以处理多路IO设置非阻塞的方式1.通过函数自带参数设置2.通过设置文件描述符的属性。把文件描述符的属性设置为非阻塞三.信号驱动IO/异步IO:异步通知方式,需要底层驱......
  • Linux学习-ELK(一)
    配置三台elasticsearch服务器安装包elasticsearch.j2报错#---执行rsync命令报以下错误[root@es1~]#rsync-av/etc/hosts192.168.29.172:/etc/[email protected]'spassword:bash:rsync:未找到命令rsync:connectionunexpectedlyclosed(0bytesrece......
  • Linux网络——从《计算机网络》到网络编程
    文章目录从《计算机网络》到网络编程从计算机到计算机网络解决问题网络与计算机系统计算机网络的传输流程IP地址与MAC地址从《计算机网络》到网络编程科班的同学大多学过计算机网络,而非科班的同学也多多少少听说过一些计算机网络体系十分繁杂且精妙,这三四十年来计......
  • 【Linux进程详解】进程地址空间
    目录1.直接写代码看现象2.引入最基本的理解3.细节问题-理解它1.直接写代码看现象#include<stdio.h>#include<string.h>#include<unistd.h>#include<stdlib.h>#include<unistd.h>intg_val=100;intmain(){printf("fatherisrunning,pid:%d,......
  • Linux命令实践
    Linux命令实践学习Linux核心命令1.ls列出当前目录中的文件和目录djy666@ubuntu:~$ls20221307公共的模板视频图片文档下载音乐桌面Desktopdjyhellohello.chello.osnapls-l列出详细信息使用长格式列出目录内容,包括文件权限、所有者、文件......
  • linux中vim常用命令大全
    前言Linux有大量的配置文件,所以Linux的文本处理工具也是比较多的,其中编辑一些配置文件时,常用的工具就是vim。在Linux中,Vim编辑器是一个非常强大的文本编辑工具,它提供了多种模式和命令来满足不同的编辑需求。以下是Vim的一些常用命令和操作:一、启动与退出Vim‌直接启动Vim......