I.MX6ULL_Linux_系统篇(15) uboot分析-menuconfig/kconfig

U-Boot 图形化配置体验

        uboot 或 Linux 内核可以通过输入“make menuconfig”来打开图形化配置界面, menuconfig是一套图形化的配置工具,需要 ncurses 库支持。 ncurses 库提供了一系列的 API 函数供调用者生成基于文本的图形界面,因此需要先在 Ubuntu 中安装 ncurses 库,命令如下:

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

        menuconfig 重点会用到两个文件: .config 和 Kconfig, .config 文件前面已经说了,这个文件保存着 uboot 的配置项,使用 menuconfig 配置完 uboot 以后肯定要更新.config 文件。 Kconfig文件是图形界面的描述文件,也就是描述界面应该有什么内容,很多目录下都会有 Kconfig 文件。

        在打开图形化配置界面之前,要先使用“make xxx_defconfig”对 uboot 进行一次默认配置,只需要一次即可。如果使用“ make clean”清理了工程的话就那就需要重新使用“ make xxx_defconfig”再对 uboot 进行一次配置。进入 uboot 根目录,输入如下命令:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_alientek_emmc_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

打开后的图形化界面如图所示:

上图就是主界面,主界面上方的英文就是简单的操作说明,操作方法如下:

        通过键盘上的“↑”和“↓”键来选择要配置的菜单,按下“Enter”键进入子菜单。菜单中高亮的字母就是此菜单的热键,在键盘上按下此高亮字母对应的键可以快速选中对应的菜单。
选中子菜单以后按下“Y”键就会将相应的代码编译进 Uboot 中,菜单前面变为“< * >”。按下“N”键不编译相应的代码,按下“M”键就会将相应的代码编译为模块,菜单前面变为“< M >”。按两下“Esc”键退出,也就是返回到上一级,按下“?”键查看此菜单的帮助信息,按下“/”键打开搜索框,可以在搜索框输入要搜索的内容。在配置界面下方会有五个按钮,这五个按钮的功能如下:
        <Select>:选中按钮,和“Enter”键的功能相同,负责选中并进入某个菜单。
        <Exit>:退出按钮,和按两下“Esc”键功能相同,退出当前菜单,返回到上一级。
        <Help>:帮助按钮,查看选中菜单的帮助信息。
        <Save>:保存按钮,保存修改后的配置文件。
        <Load>:加载按钮,加载指定的配置文件。

menuconfig 图形化配置原理

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

%config: scripts_basic outputmakefile FORCE
    $(Q)$(MAKE) $(build)=scripts/kconfig $@

这个在makefile分析已经详细的讲解过了,其中 build=-f ./scripts/Makefile.build obj,将规则展开就是:

@ make -f ./scripts/Makefile.build obj=scripts/kconfig menuconfig

Makefile.build 会读取 scripts/kconfig/Makefile 中的内容,在 scripts/kconfig/Makefile 中可以找到如下代码:

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

其中obj= scripts/kconfig, silent是设置静默编译的,在这里可以忽略不计, Kconfig=Kconfig,因此扩展以后就是:

menuconfig: scripts/kconfig/mconf
    scripts/kconfig/mconf Kconfig

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

Kconfig 语法简介

        上一小节我们已经知道了 scripts/kconfig/mconf 会调用 uboot 根目录下的 Kconfig 文件开始构建图形化配置界面,接下来简单学习一下 Kconfig 的语法。因为后面学习 Linux 驱动开发的时候可能会涉及到修改 Kconfig,对于 Kconfig 语法我们不需要太深入的去研究,关于 Kconfig的详细语法介绍,可以参考 linux 内核源码(不知为何 uboot 源码中没有这个文件)中的文件Documentation/kbuild/kconfig-language.txt,本节我们大概了解其原理即可。打开 uboot 根目录下的 Kconfig,这个 Kconfig 文件就是顶层 Kconfig,我们就以这个文件为例来简单学习一下 Kconfig语法。

mainmenu

        顾名思义 mainmenu 就是主菜单,也就是输入“make menuconfig”以后打开的默认界面,在顶层 Kconfig 中有如下代码:

mainmenu "U-Boot $UBOOTVERSION Configuration"

        上述代码就是定义了一个名为“U-Boot $UBOOTVERSION Configuration”的主菜单,其中UBOOTVERSION=2016.03,因此主菜单名为“U-Boot 2016.03 Configuration”,如图  所示:

调用其他目录下的 Kconfig 文件

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

source "xxx/Kconfig" //xxx 为具体的目录名,相对路径

在顶层 Kconfig 中有如下代码:

source "arch/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"

从示例代码中可以看出,顶层 Kconfig 文件调用了很多其他子目录下的 Kcofig 文件,这些子目录下的 Kconfig 文件在主菜单中生成各自的菜单项。

menu/endmenu 条目

        menu 用于生成菜单, endmenu 就是菜单结束标志,这两个一般是成对出现的。在顶层Kconfig 中有如下代码:

14 menu "General setup"
15
16 config LOCALVERSION
17 string "Local version - append to U-Boot release"
18 help
19 Append an extra string to the end of your U-Boot version.
20 This will show up on your boot log, for example.
21 The string you set here will be appended after the contents of
22 any files with a filename matching localversion* in your
23 object and source tree, in that order. Your total string can
24 be a maximum of 64 characters.
......
100 endmenu # General setup
101
102 menu "Boot images"
103
104 config SUPPORT_SPL
105 bool
106
......
224 endmenu # Boot images

        示例代码中有两个 menu/endmenu 代码块,这两个代码块就是两个子菜单,第 14行的“menu "General setup"”表示子菜单“General setup”。第 102 行的“menu "Boot images"”
表示子菜单“Boot images”。体现在主菜单界面中就如图所示:

        在“ General setup”菜单上面还有 “ Architecture select (ARM architecture)”和“ ARM architecture”这两个子菜单,但是在顶层 Kconfig 中并没有看到这两个子菜单对应的
menu/endmenu 代码块,那这两个子菜单是怎么来的呢?这两个子菜单就是 arch/Kconfig 文件生成的。包括主界面中的“Boot timing”、“Console recording”等等这些子菜单,都是分别由顶层Kconfig 所调用的 common/Kconfig、 cmd/Kconfig 等这些子 Kconfig 文件来创建的。

config 条目

顶层 Kconfig 中的“General setup”子菜单内容如下:

14 menu "General setup"
15
16 config LOCALVERSION
17     string "Local version - append to U-Boot release"
18     help
19         Append an extra string to the end of your U-Boot version.
20         This will show up on your boot log, for example.
21         The string you set here will be appended after the contents of
22         any files with a filename matching localversion* in your
23         object and source tree, in that order. Your total string can
24         be a maximum of 64 characters.
25
26 config LOCALVERSION_AUTO
27     bool "Automatically append version information to the version string"
28     default y
29     help
......
45
46 config CC_OPTIMIZE_FOR_SIZE
47     bool "Optimize for size"
48     default y
49     help
......
54
55 config SYS_MALLOC_F
56     bool "Enable malloc() pool before relocation"
57     default y if DM
58     help
......
63
64 config SYS_MALLOC_F_LEN
65     hex "Size of malloc() pool before relocation"
66     depends on SYS_MALLOC_F
67     default 0x400
68     help
......
73
74 menuconfig EXPERT
75     bool "Configure standard U-Boot features (expert users)"
76     default y
77     help
......
82
83 if EXPERT
84     config SYS_MALLOC_CLEAR_ON_INIT
85       bool "Init with zeros the memory reserved for malloc (slow)"
86       default y
87       help
......
99 endif
100 endmenu # General setup

        可以看出,在 menu/endmenu 代码块中有大量的“config xxxx”的代码块,也就是 config 条目。 config 条目就是“General setup”菜单的具体配置项,如图所示:

        config LOCALVERSION”对应着第一个配置项,“config LOCALVERSION_AUTO”对应着 第 二 个 配 置 项 , 以 此 类 推 。 我 们 以 “ config LOCALVERSION ” 和 “ config
LOCALVERSION_AUTO”这两个为例来分析一下 config 配置项的语法:

16 config LOCALVERSION
17     string "Local version - append to U-Boot release"
18     help
19         Append an extra string to the end of your U-Boot version.
20         This will show up on your boot log, for example.
21         The string you set here will be appended after the contents of
22         any files with a filename matching localversion* in your
23         object and source tree, in that order. Your total string can
24         be a maximum of 64 characters.
25
26 config LOCALVERSION_AUTO
27     bool "Automatically append version information to the version string"
28     default y
29     help
......

        第 16 和 26 行,这两行都以 config 关键字开头,后面跟着 LOCALVERSION 和LOCALVERSION_AUTO,这两个就是配置项名字。假如我们使能了 LOCALVERSION_AUTO
这个功能,那么就会在.config 文件中生成 CONFIG_LOCALVERSION_AUTO。由此可知, .config 文件中的“CONFIG_xxx” (xxx 就是具体的配置项名字)就是 Kconfig 文件中 config 关键字后面的配置项名字加上“CONFIG_”前缀。

        config 关键字下面的这几行是配置项属性, 17~24 行是 LOCALVERSION 的属性, 27~44 行是 LOCALVERSION_AUTO 的属性。属性里面描述了配置项的类型、输入提示、依赖关系、帮助信息和默认值等。

        第 17 行的 string 是变量类型,也就是“CONFIG_ LOCALVERSION”的变量类型。可以为:bool、 tristate、 string、 hex 和 int,一共 5 种。最常用的是 bool、 tristate 和 string 这三种, bool 类型有两种值: y 和 n,当为 y 的时候表示使能这个配置项,当为 n 的时候就禁止这个配置项。tristate 类型有三种值: y、 m 和 n,其中 y 和 n 的涵义与 bool 类型一样, m 表示将这个配置项编译为模块。 string 为字符串类型,所以 LOCALVERSION 是个字符串变量,用来存储本地字符串,选中以后即可输入用户定义的本地版本号,如图所示:

string 后面的“Local version - append to U-Boot release”就是这个配置项在图形界面上的显示出来的标题。
第 18 行, help 表示帮助信息,告诉我们配置项的含义,当我们按下“h”或“?”弹出来的帮助界面就是 help 的内容。
第 27 行,说明“CONFIG_LOCALVERSION_AUTO”是个 bool 类型,可以通过按下 Y 或N 键来使能或者禁止 CONFIG_LOCALVERSION_AUTO。
第 28 行,“default y”表示 CONFIG_LOCALVERSION_AUTO 的默认值就是 y,所以这一行默认会被选中。

depends on 和 select

打开 arch/Kconfig 文件,在里面有这如下代码:

7 config SYS_GENERIC_BOARD
8     bool
9     depends on HAVE_GENERIC_BOARD
10
11 choice
12     prompt "Architecture select"
13     default SANDBOX
14
15 config ARC
16     bool "ARC architecture"
17     select HAVE_PRIVATE_LIBGCC
18     select HAVE_GENERIC_BOARD
19     select SYS_GENERIC_BOARD
20     select SUPPORT_OF_CONTROL

        第 9 行,“depends on”说明“SYS_GENERIC_BOARD”项依赖于“HAVE_GENERIC_BOARD”,也就是说“HAVE_GENERIC_BOARD”被选中以后“ SYS_GENERIC_BOARD”才能被选中。第 17~20 行,“select”表示方向依赖,当选中“ARC”以后,“HAVE_PRIVATE_LIBGCC”、“HAVE_GENERIC_BOARD”、“SYS_GENERIC_BOARD”和“SUPPORT_OF_CONTROL”这四个也会被选中。

choice/endchoice

在 arch/Kconfig 文件中有如下代码:

11 choice
12     prompt "Architecture select"
13     default SANDBOX
14
15 config ARC
16     bool "ARC architecture"
......
21
22 config ARM
23     bool "ARM architecture"
......
29
30 config AVR32
31     bool "AVR32 architecture"
......
35
36 config BLACKFIN
37     bool "Blackfin architecture"
......
40
41 config M68K
42     bool "M68000 architecture"
......
117
118 endchoice

        choice/endchoice 代码段定义了一组可选择项,将多个类似的配置项组合在一起,供用户单选或者多选。示例代码 34.2.2.7 就是选择处理器架构,可以从 ARC、 ARM、 AVR32 等这些架构中选择,这里是单选。在 uboot 图形配置界面上选择“Architecture select”,进入以后如图所示:

可以在图中通过移动光标来选择所使用的 CPU 架构。第 12 行的 prompt 给出这个choice/endchoice 段的提示信息为“Architecture select”。

menuconfig

menuconfig 和 menu 很类似,但是 menuconfig 是个带选项的菜单,其一般用法为:

1 menuconfig MODULES
2     bool "菜单"
3 if MODULES
4 ...
5 endif # MODULES

第 1 行,定义了一个可选的菜单 MODULES,只有选中了 MODULES 第 3~5 行 if 到 endif之间的内容才会显示。在顶层 Kconfig 中有如下代码:

14 menu "General setup"
......
74 menuconfig EXPERT
75     bool "Configure standard U-Boot features (expert users)"
76     default y
77     help
78      This option allows certain base U-Boot options and settings
79      to be disabled or tweaked. This is for specialized
80      environments which can tolerate a "non-standard" U-Boot.
81      Only use this if you really know what you are doing.
82
83 if EXPERT
84     config SYS_MALLOC_CLEAR_ON_INIT
85     bool "Init with zeros the memory reserved for malloc (slow)"
86     default y
87     help
88      This setting is enabled by default. The reserved malloc
89      memory is initialized with zeros, so first malloc calls
......
98      should be replaced by calloc - if expects zeroed memory.
99 endif
100 endmenu # General setup

第 74~99 行使用 menuconfig 实现了一个菜单,路径如下:

General setup
    -> Configure standard U-Boot features (expert users) --->

从图中可以看到,前面有“[ ]”说明这个菜单是可选的,当选中这个菜单以后就可以进入到子选项中,也就是示例代码中的第 83~99 行所描述的菜单,如图所示:

        如果不选择“Configure standard U-Boot features (expert users)”,那么示例代码中的第 83~99 行所描述的菜单就不会显示出来,进去以后是空白的。

comment

        comment 用 于 注 释 , 也 就 是 在 图 形 化 界 面 中 显 示 一 行 注 释 , 打 开 文 件drivers/mtd/nand/Kconfig,有如下所示代码:

74 config NAND_ARASAN
75     bool "Configure Arasan Nand"
76     help
......
80
81 comment "Generic NAND options"

第 81 行使用 comment 标注了一行注释,注释内容为:“Generic NAND options”,这行注释在配置项 NAND_ARASAN 的下面。在图形化配置界面中按照如下路径打开:

menuconfig配置项分析

进入menuconfig图形界面:

 Architecture select (ARM architecture)

架构选择菜单,多选一cpu的架构,该选项一般原厂bsp包会默认选好,在架构选择中有一个sandbox架构,选择该模式可以不依托于硬件在沙盒中运行,便于调试软件。

ARM architecture

 ARM架构中要配置的项:

support boot from semihosting

        在仿真环境中,半宿主是宿主环境调用仿真器从主机检索文件的一种方式。

L2cache off

        如果SoC不支持L2CACHE或不希望启用L2CACHE,请选择此选项。

Target select (Freescale MX6)

        选择cpu型号

MX6 board select (Support mx6ull_14x14_evk)

        选择board

i.MX Resource domain controller driver

        i.MX资源域控制器用于将主机和外围设备分配给不同的域。这可用于隔离资源。

Support boot auxiliary core

        bootaux[addr]启动辅助内核。

ARM debug 

-Low-level debugging functions

        在这里选Y以包括U-Boot中printascii、printch和printhex的定义。如果您正在调试控制台初始化之前执行的代码,这将非常有用。

-Low-level debugging port (Low-level debugging via 8250 UART)

        低级调试端口使用8250串口

-Physical base address of debug UART

        调试UART的物理基地址

-Register offset shift for the 8250 debug UART

        8250调试UART的寄存器偏移

-Use 32-bit accesses for 8250 UART

        对8250 UART使用32位访问

-Enable flow control for 8250 UART 

        启用8250 UART的流量控制

General setup

 通用设置:

Local version - append to U-Boot release

        在U-Boot版本的末尾附加一个额外的字符串。例如,这将显示在您的启动日志中。您在这里设置的字符串将按顺序附加在对象和源树中任何文件名与localversion*匹配的文件的内容之后。总字符串最多可包含64个字符。

Automatically append version information to the version string

        自动将版本信息附加到版本字符串

Optimize for size

        优化大小

Enable malloc() pool before relocation 

        在重新定位之前启用malloc()池

(0x400) Size of malloc() pool before relocation

        重新定位前malloc()池的大小

Configure standard U-Boot features (expert users)

-Init with zeros the memory reserved for malloc (slow)

        用零初始化为malloc保留的内存(慢)

Boot images

 对启动镜像的配置

Support Flattened Image Tree

        支持FIT镜像,这是一种可以将kernel,dtb,rootfs合成一个镜像的一种镜像

Display verbose messages on FIT boot

        在FIT引导时显示详细消息

Enable signature verification of FIT uImages

        启用FIT uImages的签名验证

(IMX_CONFIG=board/freescale/mx6ullevk/imximage.cfg,MX6ULL_EVK_EMMC_REWORK) Extra Options (DEPRECATED)

        这是一个扩展选项,用于定义存放uboot头部信息的文件

Boot timing

 启动时间:

Boot timing and reporting 

        启动时间和报告

(20) Number of boot ID numbers available for user use

        可供用户使用的引导ID编号,这是可用用户引导阶段记录的数量。每次调用bootstage_mark(bootstage_ID_ALLOC,…)时,都会从该存储中分配一个新ID。如果超过限制,录制将停止。

(0) Address to stash boot timing information

        存储启动时间信息的地址

(4096) Size of boot timing stash region

        启动定时存储区域的大小

Console recording

 控制台录制

Console recording

        这提供了一种通过环形缓冲区记录控制台输出(并提供控制台输入)的方法。这对测试非常有用。即使控制台处于静音状态,也会记录控制台输出。要启用控制台录制,请从代码中调用console_record_reset_enable()。

(0x400) Output buffer size

        输出缓冲区大小

(0x100) Input buffer size

        输入缓冲区大小

Command line interface

 配置uboot命令

Use hush shell

        此选项启用“hush”shell(来自Busybox)作为命令行解释器,从而启用强大的命令行语法,如if…then…else…fi条件或“&&”和“||”构造(“shell脚本”)。如果禁用,您将获得更简单的旧行为,占用的内存更少。

(=> ) Shell prompt

        此字符串显示在光标左侧的命令行中

Autoboot options

-Stop autobooting via specific input key / string

        通过特定输入键/string停止自动启动

-(Autoboot in %d seconds\n) Autoboot stop prompt

        (%d秒内自动启动\n)自动启动停止提示

-Enable encryption in autoboot stopping

        在自动启动停止时启用加密

-Delay autobooting via specific input key / string

        通过特定输入键/string延迟自动启动

-Stop autobooting via specific input key / string

        通过特定输入键/string停止自动启动

-Enable Ctrl-C autoboot interruption

        启用Ctrl-C自动启动中断

Info commands

-bdinfo 

        打印板信息

-coninfo

        打印控制台设备和信息。

-cpu

        打印有关可用CPU的信息。这通常显示CPU的数量、类型(例如制造商、架构、产品或内部名称)和时钟频率。根据CPU驱动程序,其他信息可能可用。

-license

        打印GPL许可文本

Boot commands

-bootd

        运行存储在环境“bootcmd”中的命令,即“bootd”执行与“Run bootcmd“相同的操作。

-bootm

        从内存启动应用程序映像。

-bootelf, bootvx

        从内存启动ELF/vxWorks映像。

-go

        在给定地址启动应用程序。

-run

        在给定的环境变量中运行该命令。

-iminfo

        打印应用程序镜像的标题信息。

-imls

        列出闪存中找到的所有镜像

-imxtract

        提取多重镜像的一部分。

Environment commands

-env export

        导出环境。

-env import

        导入环境。

-editenv

        编辑环境变量。

-saveenv 

        将所有环境变量保存到已编译的持久存储中。

-env exists

        检查是否在环境中定义了用于shell脚本的变量。

Memory commands

-md, mm, nm, mw, cp, cmp, base, loop
        md-内存显示
        mm—内存修改(地址自动递增)
        nm—内存修改(恒定地址)
        mw-内存写入(填充)
        cp-内存拷贝
        cmp-内存比较
        base-打印或设置地址偏移
        loop-地址范围上的初始化循环

-crc32

        计算CRC32

-loopw

        地址范围上的无限写入循环

-memtest

        简单的RAM读/写测试。

-mdc, mwc

        mdc-内存显示循环
        mwc-内存写入循环

-meminfo

        显示内存信息。

Device access commands

-dm - Access to driver model information

        提供对驱动程序模型数据结构和信息的访问,例如设备列表、uclasse列表和每个设备的状态(例如已激活)。这不是操作所必需的,但可以用于查看驱动程序模型的状态以进行调试或感兴趣。

-demo - Demonstration commands for driver model

        提供一个“demo”命令,该命令可用于与驱动程序模型一起玩。要正确使用此功能,您需要启用一个或两个演示设备(DM_demo_SHAPE和DM_demo_StIMPLE)。否则,您将始终得到一个空的设备列表。演示设备在沙盒设备树中定义,因此最简单的选择是使用沙盒并将-d点传递到沙盒的u-boot.dtb文件。

-loadb

        通过串行线加载二进制文件。

-loads

        通过串行线加载S-Record文件

-flinfo, erase, protect

        NOR闪存支持。flinfo-打印闪存信息擦除-闪存保护-启用或禁用闪存写入保护

-nand

        NAND支持。

-sf

        SPI闪存支持

-sspi

        SPI实用程序命令。

-i2c

        I2C支持。

-usb

        USB支持。

-fpga

        FPGA支持。

-gpio

        GPIO支持。

Shell scripting commands

-echo

        回显参数到控制台

-itest

        回显参数到控制台

-source

        从内存运行脚本

-setexpr

        计算布尔表达式和数学表达式,并将结果存储在env变量中。还支持将内存位置的值加载到变量中。如果启用CONFIG_REGEX,setexpr也支持gsub函数。

Network commands

-bootp, tftpboot

        bootp-使用bootp/TFTP协议通过网络引导映像tftpboot-使用TFTP协议从网络引导映像

-tftp put

        TFTP put命令,用于将文件上载到服务器

-tftpsrv

        充当TFTP服务器并引导第一个接收到的文件

-rarpboot

        使用RARP/TFTP协议通过网络启动映像

-dhcp

        使用DHCP/TFTP协议通过网络启动映像

-nfs

        使用NFS协议通过网络启动映像。

-ping

        向网络主机发送ICMP ECHO_REQUEST

-cdp

        执行CDP网络配置

-sntp

        通过网络同步RTC

-dns

        查找主机名的IP

-linklocal

        使用链路本地协议获取网络IP地址

Misc commands

-time

        运行命令并总结执行时间。

-sleep

        延迟执行一段时间

-timer

        访问系统计时器。

Power commands

Security commands

Device Tree Control

Run-time configuration via Device Tree

        此功能通过扁平设备树提供U-Boot的运行时配置。

Default Device Tree for DT control

        此选项指定用于DT控制的默认设备树。它可以从命令行重写:$makeDEVICE_TREE=<devicetree-name>

Networking support

Random ethaddr if unset

        选择此选项将允许以太网接口运行,即使该接口的ethddr变量未设置。每次启动时都会生成一个新的MAC地址,不会将其添加到环境中。

NetConsole support

        支持网络控制台的“nc”输入/输出设备。有关详细信息,请参阅README.NetConsole。

Control TFTP timeout and count through environment

        如果设置,则允许通过环境变量tftptimeout控制TFTP超时,并通过变量tftptimeoutcountmax控制TFTP最大超时计数。如果未设置,则超时和最大值硬定义为每个TFTP传输1秒和10次超时。

Device Drivers

 imx6ull 基本都是使用的传统驱动模型,因此在menuconfig中的驱动配置项大多都未使用!

Generic Driver Options

-Enable Driver Model

        此配置选项启用驱动程序模型。这带来了核心支持,包括在启动时扫描平台数据。如果启用CONFIG_OF_CONTROL,设备树也将在可用时进行扫描。

-Enable warnings in driver model 

        dm_warn()函数可以为其字符串占用相当多的空间。默认情况下,这对于SPL构建是禁用的,以节省空间。这将导致dm_warn()被编译出来-调用时它将什么都不做。

-Support device removal

        我们可以通过删除对设备的支持来节省一些代码空间。SPL中通常不需要此选项,因此默认情况下,SPL禁用此选项。请注意,这可能会在USB子系统中产生不期望的结果,因为它会导致未拔出的设备在dm树中徘徊,并且会导致USB主机控制器在启动操作系统时无法停止。

-Support stdio registration 

        通常串行驱动程序向stdio注册,以便它们可以用作正常输出设备。在SPL中,我们通常不使用stdio,因此可以省略此功能。

-Support numbered aliases in device tree

        大多数电路板都有一个“/alias”节点,其中包含到编号设备的路径(例如serial0=&serial0)。如果不需要,可以禁用此功能。

-Support numbered aliases in device tree in SPL

        大多数电路板都有一个“/alias”节点,其中包含到编号设备的路径(例如serial0=&serial0)。如果不需要,可以禁用此功能,以节省SPL中的代码空间。

-Support register maps

        硬件外设往往有一组或多组寄存器,可以访问这些寄存器来控制硬件。寄存建器映射使用简单的读/写接口对此进行模。它原则上可以支持任何总线类型(I2C、SPI),但到目前为止,它只支持直接内存访问。

-Support register maps in SPL

        硬件外设往往有一组或多组寄存器,可以访问这些寄存器来控制硬件。寄存器映射使用简单的读/写接口对此进行建模。它原则上可以支持任何总线类型(I2C、SPI),但到目前为止,它只支持直接内存访问。

-Managed device resources

        此选项启用受管设备资源核心支持。无论初始化中途失败还是设备分离,devres框架管理的设备资源都会自动释放。如果禁用此选项,devres函数将返回到非托管变量。例如,devres_alloc()到kzaloc(),devm_kmalloc()和kmalloc)等。

Enable ADC drivers using Driver Model

        这实现了用于驱动器的ADC API,它允许通过单通道和多通道方法驱动ADC功能:-启动/停止/获取数据,以转换由位掩码选择的多个通道或多个通道选择的单个通道-获取数据掩码(ADC分辨率)ADC参考电压供应选项:-获取Vdd/Vss参考电压值的方法,具有极性-支持电源的显示,具有自动启用-供应极性在fdt中设置

Enable Exynos 54xx ADC driver

        这使Exynos ADC的基本驱动程序与Exynos54xx兼容。它提供:
        -10个模拟输入通道
        -12位分辨率
        -采样率为600 KSPS

Enable Sandbox ADC test driver

        这将启用Sandbox ADC设备仿真的驱动程序。它提供:
        -4个模拟输入通道
        -16位分辨率
        -单通道和多通道转换模式

Support disk controllers with driver model

        这将为U-Boot中的磁盘控制器启用uclass。各种驱动程序类型都可以使用此功能,例如AHCI/SATA。它目前没有提供任何标准操作。块设备接口尚未转换为驱动程序模型。

Clock

-Enable clock driver support

        这允许为时钟发生器提供驱动器,包括振荡器和PLL。设备可以使用公共时钟API来请求特定时钟速率并检查可用时钟。时钟可以以树形结构馈入其他时钟,多路复用器可以为每个时钟选择源。

Enable CPU drivers using Driver Model

        这允许为CPU提供驱动程序,并在板的设备树中指定其类型。对于支持多个CPU的板,通常必须在U-Boot中设置,以便它们在操作系统中正常工作。这为查找可用CPU的信息并进行更改提供了一个框架。

Hardware crypto devices

-Freescale Crypto Driver Support

        启用Freescale的加密加速器和保证模块(CAAM),也称为SEC版本4(SEC4)。驱动程序使用Job Ring作为与CAAM通信的接口。

Demo for driver model

-Enable demo uclass support

        这个uclass允许你在驱动模型上玩。它为一些演示设备提供了一个接口。您可以使用“demo”命令或从自己的代码调用uclass函数来访问它。

DFU support

-DFU via TFTP

        此选项允许通过TFTP引导发送数据来执行DFU管理介质的更新。有关此功能的详细说明,请访问/doc/README.dfutftp文件

DMA Support

-Enable Driver Model for DMA drivers

        启用DMA的驱动程序模型。DMA引擎可以在不涉及主机CPU的情况下进行异步数据传输。目前,该框架可用于向qspi、以太网等设备卸载内存副本。驱动程序提供访问DMA设备总线的方法,DMA设备总线用于向内存传输数据。uclass接口在include/dma.h中定义。

-TI EDMA3 driver

        为DRA7xx和AM43xx evms启用TI EDMA3驱动程序。此驱动程序支持内存区域之间的数据传输。

GPIO Support

-Enable Driver Model for GPIO drivers

        启用GPIO访问的驱动程序模型。标准GPIO接口(GPIO_get_value()等)随后由GPIO uclass实现。驱动程序提供了查询它们提供的特定GPIO的方法。uclass接口在include/asm generic/gpio.h中定义。

-ATMEL PIO4 driver

        在这里说“是”以支持Atmel PIO4驱动程序。PIO4是Atmel PIO控制器的新版本,可管理多达128条完全可编程的输入/输出线。每个I/O线可以专用于通用I/O或分配给嵌入式外围设备的功能。

-LPC32XX GPIO driver

        支持LPC32XX GPIO驱动程序。

-Vybrid GPIO driver

        在这里说“是”以支持Vybrid vf610 GPIO。

I2C support

-Enable Driver Model for I2C drivers

        启用I2C的驱动程序模型。I2C uclass接口:探测、读取、写入和速度,通过总线驱动器操作实现,为总线设置和数据传输提供了方法。每个芯片设备(总线子设备)信息都作为父平台数据保存。接口在include/i2c.h中定义。如果i2c总线驱动程序支持i2c类,但设备驱动程序不支持,则DM_i2c_COMPAT配置可以用作兼容层。

-Enable I2C compatibility layer

        启用旧式I2C功能以与现有代码兼容。此选项可以作为临时措施启用,以避免在一次提交中转换板的所有代码。在正式版本中,不应为任何董事会启用该功能。

Enable driver model keyboard support 

        这为键盘添加了一个uclass,并使用驱动程序模型实现了键盘支持。该API由keyboard.h实现,包括启动/停止设备、检查可用输入和更新LED(如果键盘有)的方法。

Enable Chrome OS EC keyboard support

        大多数ARM Chromebook使用EC提供对键盘的访问。消息用于请求来自EC的密钥扫描,然后由该驱动程序解码为密钥。

LED Support

-Enable LED support

        许多电路板都有LED,可用于发出状态或警报信号。U-Boot提供了一个uclassAPI来实现这个特性。LED驱动器可以提供对板特定LED的访问。鼓励使用设备树进行配置。

Multifunction device drivers

-Enable Driver Model for Misc drivers

        为其他设备启用驱动程序模型。此类仅用于不适合其他更一般类的类。可以使用一组通用的读、写和ioctl方法来访问设备。

-Enable Chrome OS EC

        启用对Chrome OS EC的访问。这是一个单独的微控制器,通常在Chromebook上的SPI总线上可用。它提供对键盘、一些内部存储器的访问,并可能根据设备控制对电池和主PMIC的访问。您可以使用“crosec”命令访问它。

-Enable FSL SEC_MON Driver

        Freescale安全监视器块负责监视系统状态。安全监视器可以在任何安全故障(如软件违规或硬件安全违规)时进行转换。

-Enable MXC OCOTP Driver

        如果你在这里说Y,你会得到一些Freescale i.MX处理器上存储的一次性可编程内存页的支持。

-Enable power-sequencing drivers 

        电源排序驱动程序为控制设备的电源提供支持。它们通常由另一个设备的显影剂引用。当设备启动时,可以启动其电源序列。

-Enable PCA9551 LED driver

        启用PCA9551 LED控制器的驱动程序。该控制器通过I2C连接。因此需要启用I2C。

-Enable support for reset drivers

        启用可用于重置CPU或板的重置驱动程序。每个驱动器都可以提供一种重置方法,该方法将被调用以实现重置。当调用reset_walk()时,uclass将尝试所有可用的驱动程序。

-Enable Winbond Super I/O driver

        如果您在这里说Y,您将获得Winbond W83627超级I/O驱动程序的支持。这可用于在X86平台上启用Winbond Super IO芯片中的传统UART或其他设备。

MMC Host controller Support

-Enable MMC controllers using Driver Model

        这将启用支持MMC和安全数字I/O(SDIO)卡的多媒体卡(MMC)类。支持可移动(SD、micro-SD等)和不可移动(例如eMMC芯片)设备。这些设备在U-Boot中显示为块设备,可以支持EXT4和FAT等文件系统。

MTD Support

-Enable Driver Model for MTD drivers

        启用内存技术设备(MTD)的驱动程序模型,如闪存、RAM和类似芯片,通常用于嵌入式设备上的固态文件系统

NAND Device Support

-Support Denali NAND controller

        启用对Denali NAND控制器的支持。

-Support for Freescale NFC for VF610/MPC5125

        支持某些Freescale处理器上的NAND闪存控制器,如VF610、MPC5125、MCF54418或Kinetis K70。驱动程序支持最大2k页面大小。驱动程序当前不支持硬件ECC。

-Support for NAND on PXA3xx and Armada 370/XP/38x

        这启用了PXA3xx处理器(NFCv1)和Armada 370/XP(NFCv2)上的NAND闪存设备的驱动程序。

-Configure Arasan Nand

         这使Nand驱动程序支持Arasan Nand闪存控制器。这使用硬件ECC进行读写操作。

SPI Flash Support

-Legacy SPI Flash Interface support

         启用传统SPI闪存支持。这将包括通过cmd_sf接口进行探测、读/写和擦除等基本标准支持。

Enable Driver Model for Ethernet drivers

        为以太网启用驱动程序模型。eth_*()接口将由UC_eth类实现。这目前在net/eth.c中实现。有关详细信息,请查看include/net.h。

Ethernet PHY (physical media interface) support

        启用以太网PHY(物理媒体接口)支持。

Network device support

-Intel PRO/1000 Gigabit Ethernet support

        此驱动程序支持Intel(R)PRO/1000千兆以太网适配器系列。有关如何识别适配器的更多信息,请访问适配器和驱动程序ID指南:<http://support.intel.com/support/network/adapter/pro100/21397.htm>

-Synopsys Designware Ethernet MAC

        该MAC存在于不同供应商的SoC中。它支持100Mbit和1Gbit操作。您必须启用CONFIG_PHYLIB以提供PHY(物理媒体接口)。

PCI

-Enable driver mode for PCI

        使用PCI的驱动程序模型。驱动程序模型是U-Boot中组织设备的新方法。对于PCI,驱动程序模型跟踪可用的PCI设备,允许扫描PCI总线并提供设备配置支持。

Pin controllers

-Support pin controllers

        这实现了对pinctrl框架的基本支持。您可能需要启用更多选项,具体取决于您要执行的操作。

Power

-Enable Driver Model for PMIC drivers (UCLASS_PMIC)

        此配置启用驱动程序模型PMIC支持。UCLASS_PMIC-设计用于为PMIC设备提供I/O接口。对于多功能PMIC设备,它可以用作每个IC接口的父I/O设备。然后,每个子级使用其父级进行读/写。有关详细说明,请参阅文件:
        -'驱动程序/ppower/pmic/pmic-uclass.c'
        -'包含/ppower/pmic.h'

-Enable Driver Model for REGULATOR drivers (UCLASS_REGULATOR) 

        此配置启用驱动器模型调节器支持。UCLASS_regulator-旨在为基本调节器功能提供通用API,如获取/设置电压或电流值、启用状态等。。。
        注:启用此功能时,请阅读文件中的说明:
        -'包含/ppower/pmic.h'
        -'包括/功率/调节器.h'
        -'驱动程序/ppower/pmic/pmic-uclass.c'
        -'驱动器/电源/pmic/调节器uclass.c'
        在绑定调节器设备时,使用适当的节点偏移量调用device_bind()非常重要。如果实现了pmic I/O驱动程序,则可以使用pmic_bind_childs(),否则使用dm_scan_fdt_node()。详细信息可在头文件中找到。

Enable support for pulse-width modulation devices (PWM)

        脉宽调制器发出变化宽度的脉冲,并提供对信号占空比(高和低时间)的控制。这通常用于控制电压电平。PWM处于“高”状态的时间越长,电压越高。PWM的频率/周期可以与信号高的时间比例一起控制。

Enable RAM drivers using Driver Model

        这允许为SDRAM和其他RAM控制器提供驱动程序,并在板的设备树中指定其类型。通常需要一些参数来设置RAM,并且可以静态地定义或动态地检测RAM大小。

Remote Processor drivers

        

Real Time Clock

-Enable Driver Model for RTC drivers

        为实时时钟驱动程序启用drver模型。然后RTC uclass提供RTC_get()/RTC_set()接口,委托驱动程序执行实际功能。有关API的描述,请参见rtc.h。

Serial drivers

-Enable Driver Model for serial drivers

        启用串行的驱动程序模型。这将用实现serial_putc()等的串行uclass替换drivers/serial/serial.c。uclass接口在include/serial.h中定义。

-Enable an early debug UART for debugging

        当ICE或其他调试机制不可用时,调试UART将在U-Boot的早期使用以调试问题。要使用它,您应该:
        -确保UART支持此接口
        -启用CONFIG_DEBUG_UART
        -启用UART的CONFIG,告诉它提供此接口(例如CONFIG_DEBUG_UART_NS16550)
        -根据需要定义所需的设置(见下文)
        -使用前调用debug_uart_init()
        -调用debug_uart_putc()以输出字符
        根据您的平台,可能在堆栈可用之前使用此UART。如果您的UART不支持此接口,您可能很容易添加支持。请记住,您不能使用驱动程序模型,最好不要使用堆栈。一旦驱动程序模型工作并且串行驱动程序启动并运行(在serial_init()中完成),您就不能使用此UART。否则,驱动程序可能会发生冲突,您将得到奇怪的输出。

-Skip UART initialization

        如果要用于调试输出的UART在U-Boot开始执行时已经初始化,请选择此选项。

-Freescale LPUART support

        选择此选项可为Freescale VF610和QorIQ Layerscape设备启用低功耗UART。

-NS16550 UART or compatible

        支持NS16550 UART或兼容。这可以在设备树中使用正确的输入时钟频率启用。如果设备树中未定义输入时钟频率,则将使用传统板头文件中定义的宏CONFIG_SYS_NS16550_CLK。它可以是常数,也可以是获取时钟的函数,例如get_serial_clock()。

Sound support

-Enable sound support

        支持通过音频编解码器发出声音。这通常是在选定的时间长度内以选定的频率发出的嘟嘟声。然而,驱动程序支持使用PCM接口播放任意声音样本。注意:目前声音设置有些混乱,因为音频编解码器是从sound-i2s代码调用的。这可以转换为驱动程序模型。

SPI Support

-Enable Driver Model for SPI drivers

        启用SPI的驱动程序模型。SPI从接口(SPI_setup_slave()、SPI_xfer()等)随后由SPI uclass实现。驱动程序提供了访问它们控制的SPI总线的方法。uclass接口在include/spi.h中定义。现有的spi_slave结构作为“父数据”附加到每条总线上的每个从设备。从属设备通常使用驱动程序私有数据,而不是扩展spi_slave结构。

-Freescale eSPI driver

        启用Freescale eSPI驱动程序。此驱动程序可用于在嵌入此Freescale eSPI IP核的平台上访问SPI接口和SPI NOR闪存。

-TI QSPI driver

        为DRA7xx和AM43xx evms启用TI Quad SPI(QSPI)驱动程序。该驱动程序支持spi闪存单读、四读和内存读取。

Driver support for thermal devices

        启用对临时传感设备的支持。一些SoC具有片上温度传感器,允许在温度过高或过低时发出警告、速度节流甚至自动断电。其他设备可以是分立的,但连接在合适的总线上。

Timer Support

-Enable driver model for timer driver

        启用计时器访问的驱动程序模型。它使用与lib/time.c相同的API,但现在由uclass实现。将使用第一个计时器。计时器通常是32位自由递增计数器。可能没有真正的滴答声,也没有定时器中断。

TPM support

       

USB support

-Enable driver model for USB

        启用USB驱动程序模型。然后,USB接口由USB uclass实现。可以连接和使用多个不同类型的USB控制器(XHCI、EHCI)。“usb”命令正常工作。目前不支持OCHI。大部分代码都是共享的,但启用此选项后,USB uclass将负责设备枚举。USB设备可以用U_BOOT_USB_DEVICE()宏声明,在总线上找到时将自动探测。

-xHCI HCD (USB 3.0) support

        可扩展主机控制器接口(xHCI)是USB 3.0“SuperSpeed”主机控制器硬件的标准配置。

-EHCI HCD (USB 2.0) support

        增强型主机控制器接口(EHCI)是USB 2.0“高速”(480Mbit/sec,60Mbyte/sec)主机控制器硬件的标准配置。如果您的USB主机控制器支持USB 2.0,您可能需要配置此主机控制器驱动程序。EHCI控制器与“配套”主机控制器(OHCI或UHCI)一起打包,以处理连接到根集线器端口的USB 1.1设备。如果设备高速,端口将连接到EHCI,否则它们将连接到配套控制器。如果您配置EHCI,您可能也应该配置OHCI(适用于NEC和一些其他供应商)USB主机控制器驱动程序或UHCI(适用于经主板)主机控制器驱动。您可能需要阅读Doc/usb/ehci.tx

-MUSB host mode support

        在主机模式下启用MUSB USB双角色控制器。

-MUSB gadget mode support

        在小工具模式下启用MUSB USB双角色控制器。

-USB Mass Storage support

        如果您想将USB大容量存储设备连接到板的USB端口,请在此处输入Y。

-USB Keyboard support

        如果您想使用USB键盘进行U-Boot命令行输入,请在此处输入Y。

Graphics support

-Enable driver model support for LCD/video

        这将启用LCD和视频设备的驱动程序模型。它们支持各种大小和深度的位图显示,可以在其上绘制以显示命令行控制台或启动屏幕。启用此选项将在视频uclass中编译,并通过此选项路由所有LCD/视频访问。

-Enable VESA video driver support

        启用此选项可启用一个非常简单的驱动程序,该驱动程序使用vesa来发现视频模式,然后提供一个帧缓冲区供U-Boot使用。原则上,这可以用于支持PCI的任何平台和支持VESA BIOS扩展(VBE)的视频卡。

-ANX9804 bridge chip

        支持ANX9804桥接芯片,该芯片可以从并行LCD接口获取像素数据,并将其在fy上转换为DP接口,用于驱动eDP TFT显示器。它使用I2C进行配置。

-SSD2828 bridge chip

        支持SSD2828桥接芯片,该芯片可以从并行LCD接口获取像素数据,并将其动态转换为MIPI DSI接口,以驱动MIPI兼容的LCD面板。它使用SPI进行配置。

-Armada XP LCD controller

        支持集成在Marvell Armada XP SoC中的LCD控制器。

-Enable Display support

        这支持提供显示器的驱动程序,例如eDP(嵌入式显示端口)和HDMI(高清多媒体接口)。这些设备提供了一个简单的界面来启动显示器,读取显示信息并启用它。

-Support video bridges

        一些平台使用视频桥将一个输出转换为另一个输出。例如,当SoC仅支持eDP而LCD需要LVDS时,可以使用eDP->LVDS桥接芯片来提供必要的转换。此选项启用对这些设备的支持。

Custom physical to bus address mapping 

        一些SoC对CPU物理地址和外围DMA主机访问使用不同的地址映射。如果需要,请在平台的Kconfig中选择此选项,并在平台的支持代码中实现适当的映射函数。

File systems

空。在imx6ull上不支持uboot文件系统

Library routines

Optimize libraries for speed

        在“lib”目录下编译时,启用此选项将向gcc传递“-O2”。

Use private libgcc

        此选项允许您使用U-Boot的内置libgcc实现,而不是编译器特权的实现。如果不确定,请说N。

Enable tiny printf() version

        此选项启用一个精简的小型printf版本。这只能在空间有限的环境中使用,例如具有硬内存限制的SPL版本。这个版本在armv7上将代码大小减少了大约2.5KiB。支持的格式说明符是%c、%s、%u/%d和%x。

Enable regular expression support

        如果定义了此变量,U-Boot将链接到SLRE(Super-Light正则表达式)库,该库为某些命令添加了正则表达式支持,例如“env-grep”和“setexpr”。

Pseudo-random library support

        此库提供伪随机数生成器函数。

Support the 'dhry' command to run the dhrystone benchmark

        Dhrystone是公共领域的一个老基准,它提供了CPU性能的大致概念。这将启用“dhry”命令,该命令在U-Boot中运行此基准测试并报告性能。还报告了“Dhrystone MIPS”的数量。

Use RSA Library

        RSA支持。这将启用用于U-Boot中FIT镜像验证的RSA算法。有关详细信息,请参阅doc/uImage.FIT/signature.txt。

Trusted Platform Module (TPM) Support

        这支持TPM,TPM可用于为您的电路板提供安全功能。TPM可以通过LPC或I2C连接,并且提供了用于测试目的的沙盒TPM。使用“tpm”命令交互tpm。为低级TPM接口提供驱动程序模型支持,但TPM库一次仅支持一个TPM。

Hashing Support

-Enable SHA1 support

        此选项支持使用SHA1算法进行哈希。哈希在软件中计算。SHA1算法生成160位(20字节)哈希值(摘要)。

-Enable SHA256 support

        此选项支持使用SHA256算法进行哈希运算。哈希是在软件中计算的。SHA256算法生成256位(32字节)哈希值(摘要)。

-Enable hashing using hardware

        此选项启用SHA1/SHA256哈希的硬件加速。这会影响“hash”命令以及hash_lookup_algo()函数。

Compression Support

-Enable LZ4 decompression support

        如果设置了此选项,则包括对LZ4压缩图像的支持。只要将压缩图像加载到输出缓冲区的末尾,LZ4算法就可以运行,并以较低的压缩比换取更快的解压缩。注意:这实现了默认情况下由'LZ4'命令行工具生成的LZ4帧格式的发布版本。这与当前(2015年)在Linux内核中实现的过时、效率较低的传统帧格式(由'lz4-l'生成)不同。这两种格式不兼容。

Enable function for getting errno-related string message

        函数errno_str(int errno)返回指向errno对应文本消息的指针:-如果errno为空或正数-指向“成功”消息的指针-如果errno-为负数-指向errno相关消息的指针

Unit tests

Unit tests

        选择此选项可编译U-Boot各个部分的单元测试。测试套件将是“ut”命令的子命令。这不需要包含沙盒,但它最常在那里使用。

Unit tests for time functions

        启用“ut time”命令,以测试时间函数是否正常工作。测试相当简单,不会发现所有问题。但如果您在udelay()等方面遇到问题,这是一个很好的开始。

Enable env unit tests

        这将启用“ut-env”命令,该命令将对env代码运行一系列单元测试。如果一切顺利,那么所有测试都通过了,尽管沿途会打印一些消息。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Absorbed_w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值