Busybox Bitbake 配置不保存

Mic*_*ael 1 embedded-linux busybox bitbake yocto

我正在尝试将 devmem 添加到我的 yocto 图像中。我这样做我运行命令

bitbake -c menuconfig busybox
Run Code Online (Sandbox Code Playgroud)

我转到“杂项实用程序”并在 devmem 菜单中放置一个 *。退出并保存配置然后执行

bitbake busybox
Run Code Online (Sandbox Code Playgroud)

其次是

bitbake core-image-full-cmdline
Run Code Online (Sandbox Code Playgroud)

当我启动设备时,该devmem程序不存在,当我重新运行menuconfigbusybox 时,该devmem选项不再被选中!我可以做什么来解决这个问题?

Tal*_*LEM 17

Busybox就像其他项目一样,使用 a.config来定义需要编译到最终输出中的功能,就像 Linux 内核和 U-boot 等。

那么,在 Yocto 中如何处理它们:

当你跑步时:

bitbake busybox -c menuconfig
Run Code Online (Sandbox Code Playgroud)

它将运行make menuconfig到其工作目录并为您打开配置菜单。

现在,如果您保存并退出,则只会.config更改工作目录中的内容,这意味着如果配方再次解压,您的修改将丢失。

此外,当您更改.configvia时menuconfig,您需要强制编译配方busybox,因为对于bitbake它已经构建了:

bitbake busybox -c compile -f
Run Code Online (Sandbox Code Playgroud)

但是,对于最佳实践,如果您希望修改成为可以轻松从配方中启用或禁用的功能,我向您建议如下:

  1. 跑步:bitbake busybox -c menuconfig
  2. 编辑并保存您的修改
  3. 跑步:bitbake busybox -c diffconfig

diffconfig命令将为您提供一个fragment.cfg包含您刚刚所做的修改的文件。

该文件应包含:

CONFIG_DEVMEM=y
Run Code Online (Sandbox Code Playgroud)

关于该片段的快速解释:

当你打开menuconfig它时备份.config.config.old,然后diffconfig将你的修改保存到后会给你它们之间的区别.config

现在,Busybox 与其他使用配置文件的配方一样,它们知道如果.cfg文件存在于其工作目录中,则需要.config在编译之前将其应用到主文件。

因此,获取后您需要做的fragment.cfg是在自定义配方中创建一个.bbappend配方busybox并指定新片段:

meta-custom/
     | recipes-core/
         | busybox/
             | busybox_%.bbappend
             | busybox/
                 | devmem.cfg
Run Code Online (Sandbox Code Playgroud)

现在,busybox_%.bbappend包含:

FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI += "file://devmem.cfg"
Run Code Online (Sandbox Code Playgroud)

现在,当您再次重新 bitbake Busybox 时,它将解压片段并应用它。

要检查 bitbake 完成后是否应用了片段,您可以检查该.config文件:

  1. 首先获取Busybox的Build目录路径
bitbake -e busybox | grep ^B=
Run Code Online (Sandbox Code Playgroud)
  1. Grep 查找 CONFIG_DEVMEM
grep CONFIG_DEVMEM <path_of_previous_command>/.config
Run Code Online (Sandbox Code Playgroud)

你应该看到:

CONFIG_DEVMEM=y
Run Code Online (Sandbox Code Playgroud)