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

Yocto构建中如何为最终部署的应用二进制文件签名并安装至rootfs?

问题解决方案

你的核心问题是签名时机不对——编译后生成的二进制文件会在后续的strip等优化步骤中被修改,导致签名与最终部署到rootfs的文件不匹配。要解决这个问题,需要调整签名任务的执行时机,并直接对安装目录下的最终二进制文件签名。

修改后的BitBake Recipe

SRC_URI = "file://hello.c"
DEPENDS += "openssl-native"

S = "${WORKDIR}"

do_compile() {
    ${CC} hello.c ${LDFLAGS} -o hello
}

do_install() {
    install -d ${D}/opt/project
    install -m 0755 hello ${D}/opt/project/hello
}

# 调整签名任务顺序:在安装、strip完成后,打包前执行
addtask sign_application after do_install do_strip before do_package

do_sign_application() {
    local target_bin="${D}/opt/project/hello"
    local target_sig="${target_bin}.sig"

    openssl dgst -sha256 -sign ${PATH_TO_PRIVATE_KEY}/${PRIVATE_KEY_NAME}.pem \
        -passin file:${PATH_TO_PRIVATE_KEY_PWD_FILE}/${PRIVATE_KEY_PWD_FILE_NAME} \
        -out ${target_sig} ${target_bin}
    
    chmod 0400 ${target_sig}
}

FILES:${PN} += "/opt/project/*"

关键修改说明

  1. 调整任务执行顺序
    通过addtask sign_application after do_install do_strip before do_package,确保签名操作在二进制文件被安装到${D}目录、且完成strip优化后执行,同时在打包生成软件包前完成,保证签名文件能被纳入最终rootfs。

  2. 直接签名最终部署文件
    签名目标从编译目录${B}下的原始二进制,改为${D}/opt/project/hello——这是经过所有优化步骤后的最终版本,签名与部署文件完全匹配。

  3. 简化签名文件处理
    签名生成后直接写入${D}目录对应位置,并设置正确权限,后续打包流程会自动将其包含进rootfs,无需在do_install中手动复制。

额外注意事项

  • 确保PATH_TO_PRIVATE_KEY、PRIVATE_KEY_NAME等变量已在构建环境或recipe中正确定义,避免路径错误。
  • 若你的构建流程包含其他自定义二进制修改任务,需将sign_application放在这些任务之后执行。
  • 可通过bitbake -e <你的recipe名称>查看任务执行顺序,确认签名任务的位置是否符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:55:03