《嵌入式系统 – Zephyr开发笔记》 第3章 Zephyr 工程配置

官方网站

开发环境

主机: Ubuntu v18.04
Zephyr:V2.3.99
SDK:0.11.4
Date:2020-08-22

Zephyr工程通过Kconfig进行配置管理,与linux工程配置相似,zephyr支持linux开发者熟悉的menuconfig,同时还也支持guiconfig。

3.1图形化配置界面

3.1.1初始化应用

启动图形配置界面首先,需要初始化默认工程,生成默认的配置文件.config。先随便选择一个应用。
 使用west:

#west build -p -b nucleo_f746zg samples/basic/blinky

0O8XsP.png

 使用CMake 和ninja:

#mkdir build && cd build
#cmake -GNinja -DBOARD=<board\> ..
#ninja

3.1.2 menuconfig启动

启动menuconfig,执行如下命令,出现menuconfig界面。熟悉Linux开发的朋友一定对这个界面非常熟悉。

A.启动terminal-based menuconfig使用以下方式:

 使用west:

#west build -t menuconfig

 ninja:

#ninja menuconfig

0OGSIg.png

执行上面的命令后,生成~/zephyrproject/zephyr/build/zephyr/.config

0OGELV.png

B.使用guiconfig,输入以下命令:
 使用west:

#west build -t guiconfig

 ninja:

#ninja guiconfig

【注意】
1.如果在尝试运行guiconfig时出现tkinter的导入错误,则说明缺少必需的软件包。 请参阅安装Linux主机依赖项。需要的软件包通常称为python3-tk / python3-tkinter之类的软件包。

2.尽管tkinter是标准库的一部分,但默认情况下在许多Python安装中都不包含tkinter。

下图是guiconfig的界面。

0OGDyt.png

如果你更喜欢在guiconfig界面中工作,那么最好检查在单菜单模式下对Kconfig文件所做的任何更改,该更改可通过顶部的复选框进行切换。与full-tree模式不同,单菜单模式将区分由config定义的符号和由menuconfig定义的符号,从而向你显示menuconfig界面中的外观。

3.1.2 修改configuration

更改菜单配置界面中的配置值,如下所示:

  • 使用箭头键浏览菜单。也支持常用的Vim键绑定。
  • 使用空格键和Enter键进入菜单并切换值。菜单旁边显示—>。按ESC返回到父菜单。

布尔型配置选项用[]括号显示,而数字和字符串值配置符号用()括号显示。不能更改的符号值显示为–或-*-。

你还可以按Y或N将布尔配置符号设置为相应的值。

  • 按 ?显示有关当前所选符号的信息,包括其帮助文本。按ESC或Q从信息显示返回菜单。
    在guiconfig界面中,单击该符号旁边的图像以更改其值,或双击带有该符号的行(这仅在该符号没有子代的情况下才有效,因为双击具有子代打开/而是关闭其菜单)。
    guiconfig还支持键盘菜单,类似于menuconfig。

  • 在menuconfig界面中按Q将打开“保存并退出”对话框(如果有要保存的更改):

0OG5yq.png

按Y将内核配置选项保存为默认文件名(zephyr / .config)。 除非你使用不同的配置,否则通常将保存为默认文件名。

如果已修改,guiconfig界面还将在退出时提示您保存配置。

【注意】
1.构建期间使用的配置文件始终是zephyr / .config。 如果要使用其他已保存的配置,请将其复制到zephyr / .config。 确保备份原始配置文件。

2.另请注意,文件名以开头。 在Linux和macOS上,默认情况下ls不会列出它们。 使用-a标志查看它们。

在菜单树中找到一个符号并导航到它可能很乏味。 要直接跳至符号,请按/键(在guiconfig中也可以使用)。 这将弹出以下对话框,您可以在其中按名称搜索符号并跳至它们。 在guiconfig中,您也可以直接在对话框中更改符号值。

0OGLY4.png

如果你跳到当前不可见的符号(例如,由于依赖关系不满意),则将启用“全部显示”模式。 在全部显示模式下,将显示所有符号,包括当前不可见的符号。 要关闭全部显示模式,请在menuconfig中按A或在guiconfig中按Ctrl-A。

【注1】如果当前菜单中没有可见的项目,则无法关闭“全部显示”模式。
要弄清楚为什么跳转到的符号不可见,请按一下来检查其依赖性。 在menuconfig或guiconfig底部的信息窗格中。 如果发现该符号依赖于另一个未启用的符号,则可以依次跳至该符号以查看是否可以启用它。

【注2】在menuconfig中,您可以按Ctrl-F在跳出对话框中查看当前所选项目的帮助,而无需退出该对话框。

有关menuconfig和guiconfig的更多信息,请参见menuconfig.py和guiconfig.py顶部的Python文档字符串。

3.2设置Kconfig配置值

menuconfig和guiconfig接口可用于在应用程序开发期间配置测试。 本页说明如何使设置永久化。
在Kconfig符号参考中可以找到所有Kconfig选项的自动生成的列表。
【注意】在更改Kconfig文件之前,最好先浏览一下Kconfig-提示和最佳做法页面。

3.2.1 Kconfig配置项

进行Kconfig更改时,重要的是要了解配置项和不可见配置项之间的区别。

  • 可见符号是用提示定义的符号。可见符号显示在交互式配置界面中(因此可见),可以在配置文件中进行设置。

这是可见配置的示例:

config FPU
   bool "Support floating point operations"
   depends on HAS_FPU

该配置项在menuconfig中显示如下,可以在其中进行切换:
[ ] Support floating point operations

  • 不可见的配置项是没有提示的符号。交互式配置界面中未显示不可见的配置项,用户无法直接控制其值。相反,它们从默认值或其他配置项中获取值。

这是一个示例或不可见的配置项:

config CPU_HAS_FPU
   bool
   help
     This symbol is y if the CPU has a hardware floating point unit.

在这种情况下,通过具有选择CPU_HAS_FPU的其他符号来启用CPU_HAS_FPU。

3.2.2通过配置文件中设置配置项

可见配置项可以通过在配置文件中进行设置来配置。初始配置是通过将板子的* _defconfig文件与应用程序设置(通常来自prj.conf)合并而产生的。有关更多详细信息,请参见下面的初始配置。
配置文件中的分配使用以下语法:

CONFIG_<symbol name\>=<value\>

【注】等号两边不能有空格。
可以通过将bool符号分别设置为y或n来启用或禁用它们。上面的示例中的FPU符号可以这样启用:

CONFIG_FPU=y

【注意】
1.布尔符号也可以设置为n,其注释格式如下:

#CONFIG_SOME_OTHER_BOOL is not set

2.这个在zephyr / .config中的合并配置中看到的格式。
3.出于历史原因,可以接受这种样式:Kconfig配置文件可以解析为makefile(尽管Zephyr不使用此文件)。使n值符号对应于未设置的变量可简化Make中的测试。

其他符号类型的分配如下:

CONFIG_SOME_STRING="cool value"
CONFIG_SOME_INT=123

注释使用#:

#This is a comment

仅在满足配置项之间依赖性的情况下,才遵守配置文件中的分配。否则将打印警告。要弄清楚配置项的依赖性是什么,请使用交互式配置界面之一(可以使用/直接跳转到符号),或在Kconfig符号参考中查找符号。

3.2.3初始配置

应用程序的初始配置有三个配置来源合并:

1.A BOARD-specific configuration file stored in boards/// defconfig
2.Any CMake cache entries prefix with CONFIG

3.The application configuration

Related posts

Leave a Comment