You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yocto定制构建:如何生成差异极小的安装版与消费版镜像?

差异镜像构建最优方案及weston.ini修改问题解决

一、先解决weston.ini修改不生效的问题

你之前用do_install_append没生效,核心原因是image recipe的do_install阶段早于weston包的配置文件安装时序,后续weston包的安装会覆盖你修改的文件。推荐两种可靠的解决方式:

方式1:文件替换法

  1. 在image-installer.bb所在的recipes-core/images目录下,创建files子目录,把修改好的weston_for_installer.ini放入其中。
  2. 在image-installer.bb中添加以下代码:
# 让bitbake优先查找当前目录下的files文件夹
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
# 添加要替换的文件到源码路径
SRC_URI += "file://weston_for_installer.ini"

# 在镜像预处理阶段替换配置文件(所有包安装完成后执行)
IMAGE_PREPROCESS_COMMAND += "installer_replace_weston_config;"
installer_replace_weston_config() {
    # 复制文件到目标路径,设置正确权限
    install -m 0644 ${WORKDIR}/weston_for_installer.ini ${IMAGE_ROOTFS}${sysconfdir}/xdg/weston/weston.ini
}

方式2:sed动态修改法

如果不想维护整个配置文件,只想修改特定行,用IMAGE_PREPROCESS_COMMAND确保在所有包安装完成后执行修改:

IMAGE_PREPROCESS_COMMAND += "installer_patch_weston_config;"
installer_patch_weston_config() {
    # 在[shell]段后追加panel-position配置
    sed -i "/\[shell\]/apanel-position=none" ${IMAGE_ROOTFS}${sysconfdir}/xdg/weston/weston.ini
}

二、差异镜像的最优构建方案

为了减少重复代码、降低维护成本,建议采用基础镜像+差异继承的结构:

1. 创建基础镜像recipe

在recipes-core/images下新建image-base.bb,存放两个版本共有的配置:

inherit core-image

# 两个版本都需要安装的包(示例)
IMAGE_INSTALL += "weston bash coreutils ..."

# 其他公共配置,比如文件系统、启动项等
...

2. 消费版镜像(image-consumer.bb)

直接继承基础镜像,仅添加消费版特有的密码配置:

require image-base.bb

# 设置消费版的root和普通用户密码
EXTRA_USERS_PARAMS = "usermod -P consumer_root_pass root; usermod -P consumer_user_pass user;"

3. 安装版镜像(image-installer.bb)

继承基础镜像,添加安装版的密码和weston配置:

require image-base.bb

# 设置安装版的root和普通用户密码
EXTRA_USERS_PARAMS = "usermod -P installer_root_pass root; usermod -P installer_user_pass user;"

# 以下是weston.ini的修改(二选一即可)
# 方式1:文件替换
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
SRC_URI += "file://weston_for_installer.ini"
IMAGE_PREPROCESS_COMMAND += "installer_replace_weston_config;"
installer_replace_weston_config() {
    install -m 0644 ${WORKDIR}/weston_for_installer.ini ${IMAGE_ROOTFS}${sysconfdir}/xdg/weston/weston.ini
}

# 方式2:sed修改(注释掉方式1后启用)
# IMAGE_PREPROCESS_COMMAND += "installer_patch_weston_config;"
# installer_patch_weston_config() {
#     sed -i "/\[shell\]/apanel-position=none" ${IMAGE_ROOTFS}${sysconfdir}/xdg/weston/weston.ini
# }

三、构建命令

分别执行以下命令构建对应版本:

bitbake image-consumer  # 构建消费版
bitbake image-installer # 构建安装版

内容的提问来源于stack exchange,提问作者Egor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 09:05:59