【问题标题】:How to execute a script in swupdate image recipe in Yocto?如何在 Yocto 的 swupdate 图像配方中执行脚本?
【发布时间】:2019-09-17 17:34:08
【问题描述】:

我无法在inherit swupdate 的配方(panther2-swu.bb) 中执行shell 脚本(create_signed_swu.sh),如果我删除inherit swupdate,我看到do_compile 被编译并且脚本成功执行。 这是panther2-swu.bb 食谱:

DESCRIPTION = "Building swupdate image (.swu ) for panther2  board"

LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

inherit swupdate
FILESEXTRAPATHS_append := "${THISDIR}/../../../../build/tmp/deploy/images/panther2/"

SRC_URI = "file://sw-description \
          file://postinstall_swu.sh \
          file://bzImage \
          file://create_signed_swu.sh \
          file://priv.pem \
          file://passphrase \
        "
do_compile() {
        ${WORKDIR}/create_signed_swu.sh
}
DEPENDS = "openssl-native"

这里是create_signed_swu.sh

#!/bin/bash

IMAGES="bzImage panther2-usb-panther2.ext4"
FILES="sw-description sw-description.sig postinstall_swu.sh $IMAGES"
echo "Executing swu signing script..."

cp ../sw-description .
cp ../postinstall_swu.sh .
cp ../../../../../deploy/images/panther2/bzImage .
cp ../../../../../deploy/images/panther2/panther2-usb-panther2.ext4 .

read -d ' ' SHA_ROOTFS < <(sha256sum panther2-usb-panther2.ext4)
read -d ' ' SHA_BZIMAGE < <(sha256sum bzImage)
read -d ' ' SHA_POSTINSTALL < <(sha256sum postinstall_swu.sh)

sed -i ':a;N;$!ba; s/sha256 = "[0-9A-Za-z]*"/sha256 = '"\"${SHA_ROOTFS}"\"'/1' sw-description
sed -i ':a;N;$!ba; s/sha256 = "[0-9A-Za-z]*"/sha256 = '"\"${SHA_BZIMAGE}"\"'/2' sw-description
sed -i ':a;N;$!ba; s/sha256 = "[0-9A-Za-z]*"/sha256 = '"\"${SHA_POSTINSTALL}"\"'/3' sw-description

openssl dgst -sha256 -sign ../priv.pem -passin file:../passphrase sw-description > sw-description.sig

for i in $FILES;do
        echo $i;done | cpio -ov -H crc >  panther2-swu-$USER-devbuild.swu

cp panther2-swu-$USER-devbuild.swu ../../../../../deploy/images/panther2

rm -f sw-description
rm -f postinstall_swu.sh
rm -f sw-description.sig
rm -f bzImage
rm -f panther2-usb-panther2.ext4
rm -f panther2-swu-$USER-devbuild.swu 

我也尝试过ROOTFS_POSTPROCESS_COMMAND,但它也没有执行我的脚本。

任何帮助将不胜感激,在此先感谢...!!!

【问题讨论】:

  • 您应该查看examples 以在 Yocto 中集成 swupdate。 meta-swupdate 将自动计算签名图像,this file 解释得很好。

标签: yocto software-update


【解决方案1】:

如果删除inherit swupdate 使您的do_compile 执行并启动您的脚本,则意味着swupdate.bbclass 类不执行do_compile 任务。 该课程肯定有这一行:

do_compile[noexec] = "1"

这意味着 do_compile 根本没有被执行。

您可以在两种解决方案之间进行选择:

使用前置/附加某些任务

将用于启动脚本的配方任务添加/附加到现有任务,如下所示:

假设 do_configure 已启动:

do_configure_append() 
{
 ${WORKDIR}/create_signed_swu.sh
}

这将在 do_configure 结束时启动您的脚本。

创建自己的任务:

假设你想在 do_build 任务之前启动你的脚本

do_launch_script () {
     ${WORKDIR}/create_signed_swu.sh
}
addtask launch_script after do_configure before do_build

【讨论】:

    【解决方案2】:

    生成 SWU 不会编译任何东西,不仅 do_compile,甚至 do_configure 都被关闭。 “swupdate”类有自己的任务:do_swuimage。可以使用 do_swuimage_append() 更改默认行为。 无论如何,上面的脚本毫无意义:该类完全按照脚本试图做的事情,并提供变量替换来自动设置 sha256 和其他值。 “sed”条目没有意义,以及在此脚本中签名。取而代之的是,该类应该被继承并且变量必须是(所有这些都以 SWUPDATE_ 开头,请查看文档)以让该类完成其工作。该脚本是插入到文档中以在 Yocto 外部构建的脚本的变体 - 应该使用 meta-swupdate 中的功能,而不是遵循这种方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-18
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多