我无法在配方create_signed_swu.sh
的食谱(panther2-swu.bb
)中执行shell脚本(inherit swupdate
),如果删除了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
,但是它也不执行我的命令。
我们将不胜感激,在此先感谢... !!!
答案 0 :(得分:0)
如果删除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
答案 1 :(得分:0)
生成SWU不会编译任何东西,不仅会编译do_compile,甚至会关闭do_configure。类“ swupdate”具有自己的任务:do_swuimage。可以使用do_swuimage_append()更改默认行为。 无论如何,上面的脚本没有任何意义:该类完全可以执行脚本试图执行的操作,并提供变量替换以自动设置sha256和其他值。 “ sed”条目以及在此脚本中签名都没有意义。取而代之的是,应该继承该类,并且必须使用变量(所有变量均以SWUPDATE_开头,请参阅文档)才能使该类完成其工作。该脚本是插入文档中以在Yocto外部构建的脚本的一种变体-应该采用meta-swupdate中的功能,而不是遵循这种方法。