Look for a hook script in any config/images/rauc-hooks.sh in the usual
search locations, and if one is found, package it into the RAUC bundle
and reference it in the manifest. Otherwise leave the [hooks] section
in the manifest empty.
As hooks that should be called by RAUC need to be mentioned in the
manifest too (in the relevant slot or the [bundle] section), the image
config will still need to be forked by BSPs in order to adapt the
manifest for that use case. However, the mechanism to find the hook
script is then already in place, and can be used as-is.
Signed-off-by: Roland Hieber
---
config/images/rauc.config | 4
platforms/image-rauc.in | 4
rules/image-rauc.make | 15 +++
3 files changed, 23 insertions(+)
diff --git a/config/images/rauc.config b/config/images/rauc.config
index e4169cc8cd95..4a6b34deee29 100644
--- a/config/images/rauc.config
+++ b/config/images/rauc.config
@@ -1,6 +1,7 @@
image @IMAGE@ {
rauc {
file root.tar.gz { image = "root.tgz" }
+ @RAUC_HOOK_FILE@
manifest = "
[update]
compatible=@RAUC_BUNDLE_COMPATIBLE@
@@ -11,6 +12,9 @@ image @IMAGE@ {
[bundle]
format=@RAUC_BUNDLE_FORMAT@
+ [hooks]
+ @RAUC_HOOK_MANIFEST@
+
[image.rootfs]
filename=root.tar.gz
"
diff --git a/platforms/image-rauc.in b/platforms/image-rauc.in
index 391956a42f81..2850045c313e 100644
--- a/platforms/image-rauc.in
+++ b/platforms/image-rauc.in
@@ -17,6 +17,10 @@ menuconfig IMAGE_RAUC
To customize the bundle, copy and adapt the genimage configuration
in configs/images/rauc.config.
+ If you create a file config/images/rauc-hooks.sh in any PTXDIST_PATH
+ component, it will be included in the bundle and declared as a hook
+ script in the manifest.
+
if IMAGE_RAUC
config IMAGE_RAUC_DESCRIPTION
diff --git a/rules/image-rauc.make b/rules/image-rauc.make
index 23d8d83b5251..860f69834687 100644
--- a/rules/image-rauc.make
+++ b/rules/image-rauc.make
@@ -19,6 +19,10 @@ IMAGE_RAUC := image-rauc
IMAGE_RAUC_DIR := $(BUILDDIR)/$(IMAGE_RAUC)
IMAGE_RAUC_IMAGE := $(IMAGEDIR)/update.raucb
IMAGE_RAUC_CONFIG := rauc.config
+IMAGE_RAUC_HOOK_SCRIPT := $(call ptx/in-path, PTXDIST_PATH,
config/images/rauc-hooks.sh)
+
+$(call ptx/cfghash, IMAGE_RAUC, $(IMAGE_RAUC_HOOK_SCRIPT))
+$(call ptx/cfghash-file, IMAGE_RAUC, $(IMAGE_RAUC_HOOK_SCRIPT))
#
# Image
@@ -36,6 +40,16 @@ ifdef PTXCONF_IMAGE_RAUC_BUNDLE_FORMAT_CRYPT
IMAGE_RAUC_BUNDLE_FORMAT := "crypt"
endif
+ifneq ($(IMAGE_RAUC_HOOK_SCRIPT),)
+IMAGE_RAUC_ENV_HOOK = \
+ RAUC_HOOK_FILE="file hooks.sh { image = \\"$(IMAGE_RAUC_HOOK_SCRIPT)\\"
}" \
+ RAUC_HOOK_MANIFEST="filename=hooks.sh"
+else
+IMAGE_RAUC_ENV_HOOK = \
+ RAUC_HOOK_FILE="" \
+ RAUC_HOOK_MANIFEST=""
+endif
+
IMAGE_RAUC_ENV = \
$(CODE_SIGNING_ENV) \
RAUC_BUNDLE_COMPATIBLE="$(call
remove_quotes,$(PTXCONF_RAUC_COMPATIBLE))" \
@@ -43,6 +57,7 @@ IMAGE_RAUC_ENV= \
RAUC_BUNDLE_VERSION="$(call remove_quotes,
$(PTXCONF_RAUC_BUNDLE_VERSION))" \
RAUC_BUNDLE_BUILD=$(call ptx/sh, date +%FT%T%z) \
RAUC_BUNDLE_DESCRIPTION=$(PTXCONF_IMAGE_RAUC_DESCRIPTION) \
+ $(IMAGE_RAUC_ENV_HOOK) \
RAUC_KEY="$(shell cs_get_uri update)" \
RAUC_CERT="$(shell cs_get_uri update)" \
RAUC_KEYRING="$(shell cs_get_ca update)" \
--
2.39.2