Как выполнить скрипт в рецепте swupdate image в Yocto? - PullRequest
0 голосов
/ 29 апреля 2019

Я не могу выполнить сценарий оболочки (create_signed_swu.sh) в моем рецепте (panther2-swu.bb), который 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, но мой srcipt тоже не выполняется.

Любая помощь будет принята с благодарностью, Заранее спасибо ... !!!

1 Ответ

0 голосов
/ 29 апреля 2019

Если удаление 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
...