Message ID | 20240626135632.1623-1-twoerner@gmail.com |
---|---|
State | New |
Headers | show |
Series | [meta-rockchip,v3] rauc demo: add | expand |
Hi Trevor, On 6/26/24 3:56 PM, Trevor Woerner via lists.yoctoproject.org wrote: > Add an example of implementing rauc on a rockchip board. Adding the meta-rauc > layer, adding 'rauc' to DISTRO_FEATURES, and enabling RK_RAUC_DEMO will build > an image using the example provided in dynamic-layers/rk-rauc-demo. > > This example uses a simple A/B + D scheme (i.e. two root partitions and a > non-updated /data partition). Repartitioning occurs automatically on first > boot thanks to systemd's 'repart' mechanism. > > NOTE: > - this example only works with systemd > > If you wish to provide your own implementation, simply add the meta-rauc > layer, add 'rauc' to DISTRO_FEATURES, don't enable RK_RAUC_DEMO, and provide > your own implementation in a separate layer. > > Signed-off-by: Trevor Woerner <twoerner@gmail.com> > --- > v3 changes: > - change the OVERRIDE mechanism from a class to a config > - fix the required features check to include an OVERRIDE > - use a systemd mount unit for the /data partition > - abd-partition recipe cleanup: > - remove extraneous FILESEXTRAPATHS > - remove OVERRIDES, this recipe will only be used with rauc > - remove extraneous FILES:${PN} for ${sysconfdir} > > v2 changes: > - add information/instructions to README > - rauc-conf cleanup: > - remove ca.cert.pem from SRC_URI, it's already in parent > - rename systemd.conf.in to system.conf so the parent handles it > - process the system.conf file as a prepend, leaving it for the parent to manage > - use walrus operator with THISDIR > - break out the systemd repart config files into their own recipe so they can > be updated without triggering a full rebuild of systemd (and its dependents) > - class cleanup: > - update the classes so they have only 1 job (each) > - rename the classes to reflect their jobs > - update recipes/configs to use the new classes > --- > README | 18 +++++ > .../rk-rauc-demo-features-check.bbclass | 8 ++ > conf/layer.conf | 4 + > conf/machine/include/rockchip-rauc.inc | 4 + > conf/machine/include/rockchip-wic.inc | 2 + > .../recipes-bsp/u-boot/files/boot.cmd.in | 51 ++++++++++++ > .../recipes-bsp/u-boot/files/uboot-rauc.cfg | 8 ++ > .../recipes-bsp/u-boot/u-boot_%.bbappend | 26 ++++++ > .../base-files/base-files_%.bbappend | 2 + > .../recipes-core/base-files/files/fstab | 5 ++ > .../rauc-bundles/files/development-1.cert.pem | 80 +++++++++++++++++++ > .../rauc-bundles/files/development-1.key.pem | 28 +++++++ > .../rauc-bundles/rockchip-rauc-bundle.bb | 14 ++++ > .../recipes-core/rauc/files/ca.cert.pem | 80 +++++++++++++++++++ > .../recipes-core/rauc/files/system.conf | 17 ++++ > .../recipes-core/rauc/rauc-conf.bbappend | 7 ++ > .../recipes-core/systemd/abd-partition.bb | 26 ++++++ > .../systemd/files/25-rootfsA.conf | 4 + > .../systemd/files/35-rootfsB.conf | 7 ++ > .../recipes-core/systemd/files/45-data.conf | 6 ++ > .../recipes-core/systemd/files/data.mount | 10 +++ > .../recipes-core/systemd/systemd_%.bbappend | 3 + > 22 files changed, 410 insertions(+) > create mode 100644 classes-recipe/rk-rauc-demo-features-check.bbclass > create mode 100644 conf/machine/include/rockchip-rauc.inc > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/files/boot.cmd.in > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/files/uboot-rauc.cfg > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/u-boot_%.bbappend > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/base-files/base-files_%.bbappend > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/base-files/files/fstab > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/files/development-1.cert.pem > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/files/development-1.key.pem > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/rockchip-rauc-bundle.bb > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/ca.cert.pem > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/system.conf > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc/rauc-conf.bbappend > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/abd-partition.bb > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/25-rootfsA.conf > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/35-rootfsB.conf > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/45-data.conf > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/data.mount > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/systemd_%.bbappend > > diff --git a/README b/README > index 6003e7c652fe..8ff006e942b9 100644 > --- a/README > +++ b/README > @@ -85,6 +85,24 @@ Notes: > > in the configuration (e.g. conf/local.conf). > > + A/B updates with RAUC > + This layer now contains one example of building an A/B update using RAUC. > + Users are free to use/test this example, to optionally enable it, to build > + their own update strategies based on this one, or to ignore it completely. > + This example only works with > + > + INIT_MANAGER = "systemd" > + > + If you wish to use this example in your builds: > + - enable 'systemd' as your init system > + - add the meta-rauc layer to your build (with the corresponding branch) > + - add 'rauc' to your DISTRO_FEATURES > + - enable RK_RAUC_DEMO in your config > + > + If you wish to implement your own RAUC update without using the example from > + this layer, perform the same steps as above except for the step enabling > + RK_RAUC_DEMO. > + > U-Boot Environment: > ------------------ > In order to configure U-Boot to be able to store its environment into the > diff --git a/classes-recipe/rk-rauc-demo-features-check.bbclass b/classes-recipe/rk-rauc-demo-features-check.bbclass > new file mode 100644 > index 000000000000..946091802f8d > --- /dev/null > +++ b/classes-recipe/rk-rauc-demo-features-check.bbclass > @@ -0,0 +1,8 @@ > +inherit features_check > + > +REQUIRED_DISTRO_FEATURES:append:rk-rauc-demo = " systemd rauc" > +REQUIRED_MACHINE_FEATURES:append:rk-rauc-demo = " rk-u-boot-env" > + > +# 'RK_RAUC_DEMO' indicates the user wants to use the > +# rauc demo configuration from this layer > +OVERRIDES .= "${@ ':rk-rauc-demo' if bb.utils.to_boolean(d.getVar('RK_RAUC_DEMO'), False) else ''}" I don't understand why this is in a recipe bbclass, the one in conf/machine/include/rockchip-rauc.inc should already be enough? [...] > diff --git a/conf/machine/include/rockchip-rauc.inc b/conf/machine/include/rockchip-rauc.inc > new file mode 100644 > index 000000000000..a6f79503076b > --- /dev/null > +++ b/conf/machine/include/rockchip-rauc.inc > @@ -0,0 +1,4 @@ > +# 'RK_RAUC_DEMO' indicates the user wants to use the > +# rauc demo configuration from this layer > +OVERRIDES .= "${@ ':rk-rauc-demo' if bb.utils.to_boolean(d.getVar('RK_RAUC_DEMO'), False) else ''}" [...] > +do_compile:append:rk-rauc-demo() { > + # create boot script > + sed -e 's|@@KERNEL_BOOTFILE@@|${UBOOT_EXTLINUX_KERNEL_IMAGE}|' \ > + "${UNPACKDIR}/boot.cmd.in" > "${UNPACKDIR}/boot.cmd" > + mkimage -A ${UBOOT_ARCH} -T script -C none -n "Boot script" -d "${UNPACKDIR}/boot.cmd" ${UNPACKDIR}/boot.scr > + Richard has said today he'd prefer we don't use UNPACKDIR for that kind of things, c.f. https://lore.kernel.org/openembedded-core/20240623213254.3215897-1-leon.anavi@konsulko.com/T/#md4b10cea4af07c1a2e5be43e4ee8c8b1fbc6e420 (though we "agreed" later in the thread to use ${B} instead of the originally suggested ${WORKDIR}). [...] > diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/system.conf b/dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/system.conf > new file mode 100644 > index 000000000000..4945c67345c4 > --- /dev/null > +++ b/dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/system.conf > @@ -0,0 +1,17 @@ > +[system] > +compatible=@MACHINE@ > +bootloader=uboot > +data-directory=/data/ > + > +[keyring] > +path=/etc/rauc/ca.cert.pem > + > +[slot.rootfs.0] > +device=/dev/disk/by-partlabel/rootfsA > +type=ext4 > +bootname=A > + > +[slot.rootfs.1] > +device=/dev/disk/by-partlabel/rootfsB > +type=ext4 > +bootname=B > diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/rauc/rauc-conf.bbappend b/dynamic-layers/rk-rauc-demo/recipes-core/rauc/rauc-conf.bbappend > new file mode 100644 > index 000000000000..281eb2c4de91 > --- /dev/null > +++ b/dynamic-layers/rk-rauc-demo/recipes-core/rauc/rauc-conf.bbappend > @@ -0,0 +1,7 @@ > +inherit rk-rauc-demo-features-check > + > +FILESEXTRAPATHS:prepend:rk-rauc-demo := "${THISDIR}/files:" > + I would recommend renaming the directory to rauc-conf here, but that's just up to one's preference. Looking good otherwise :) Cheers, Quentin
On Wed 2024-06-26 @ 05:09:14 PM, Quentin Schulz via lists.yoctoproject.org wrote: > Hi Trevor, > > On 6/26/24 3:56 PM, Trevor Woerner via lists.yoctoproject.org wrote: > > Add an example of implementing rauc on a rockchip board. Adding the meta-rauc > > layer, adding 'rauc' to DISTRO_FEATURES, and enabling RK_RAUC_DEMO will build > > an image using the example provided in dynamic-layers/rk-rauc-demo. > > > > This example uses a simple A/B + D scheme (i.e. two root partitions and a > > non-updated /data partition). Repartitioning occurs automatically on first > > boot thanks to systemd's 'repart' mechanism. > > > > NOTE: > > - this example only works with systemd > > > > If you wish to provide your own implementation, simply add the meta-rauc > > layer, add 'rauc' to DISTRO_FEATURES, don't enable RK_RAUC_DEMO, and provide > > your own implementation in a separate layer. > > > > Signed-off-by: Trevor Woerner <twoerner@gmail.com> > > --- > > v3 changes: > > - change the OVERRIDE mechanism from a class to a config > > - fix the required features check to include an OVERRIDE > > - use a systemd mount unit for the /data partition > > - abd-partition recipe cleanup: > > - remove extraneous FILESEXTRAPATHS > > - remove OVERRIDES, this recipe will only be used with rauc > > - remove extraneous FILES:${PN} for ${sysconfdir} > > > > v2 changes: > > - add information/instructions to README > > - rauc-conf cleanup: > > - remove ca.cert.pem from SRC_URI, it's already in parent > > - rename systemd.conf.in to system.conf so the parent handles it > > - process the system.conf file as a prepend, leaving it for the parent to manage > > - use walrus operator with THISDIR > > - break out the systemd repart config files into their own recipe so they can > > be updated without triggering a full rebuild of systemd (and its dependents) > > - class cleanup: > > - update the classes so they have only 1 job (each) > > - rename the classes to reflect their jobs > > - update recipes/configs to use the new classes > > --- > > README | 18 +++++ > > .../rk-rauc-demo-features-check.bbclass | 8 ++ > > conf/layer.conf | 4 + > > conf/machine/include/rockchip-rauc.inc | 4 + > > conf/machine/include/rockchip-wic.inc | 2 + > > .../recipes-bsp/u-boot/files/boot.cmd.in | 51 ++++++++++++ > > .../recipes-bsp/u-boot/files/uboot-rauc.cfg | 8 ++ > > .../recipes-bsp/u-boot/u-boot_%.bbappend | 26 ++++++ > > .../base-files/base-files_%.bbappend | 2 + > > .../recipes-core/base-files/files/fstab | 5 ++ > > .../rauc-bundles/files/development-1.cert.pem | 80 +++++++++++++++++++ > > .../rauc-bundles/files/development-1.key.pem | 28 +++++++ > > .../rauc-bundles/rockchip-rauc-bundle.bb | 14 ++++ > > .../recipes-core/rauc/files/ca.cert.pem | 80 +++++++++++++++++++ > > .../recipes-core/rauc/files/system.conf | 17 ++++ > > .../recipes-core/rauc/rauc-conf.bbappend | 7 ++ > > .../recipes-core/systemd/abd-partition.bb | 26 ++++++ > > .../systemd/files/25-rootfsA.conf | 4 + > > .../systemd/files/35-rootfsB.conf | 7 ++ > > .../recipes-core/systemd/files/45-data.conf | 6 ++ > > .../recipes-core/systemd/files/data.mount | 10 +++ > > .../recipes-core/systemd/systemd_%.bbappend | 3 + > > 22 files changed, 410 insertions(+) > > create mode 100644 classes-recipe/rk-rauc-demo-features-check.bbclass > > create mode 100644 conf/machine/include/rockchip-rauc.inc > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/files/boot.cmd.in > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/files/uboot-rauc.cfg > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/u-boot_%.bbappend > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/base-files/base-files_%.bbappend > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/base-files/files/fstab > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/files/development-1.cert.pem > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/files/development-1.key.pem > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/rockchip-rauc-bundle.bb > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/ca.cert.pem > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/system.conf > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc/rauc-conf.bbappend > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/abd-partition.bb > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/25-rootfsA.conf > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/35-rootfsB.conf > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/45-data.conf > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/data.mount > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/systemd_%.bbappend > > > > diff --git a/README b/README > > index 6003e7c652fe..8ff006e942b9 100644 > > --- a/README > > +++ b/README > > @@ -85,6 +85,24 @@ Notes: > > in the configuration (e.g. conf/local.conf). > > + A/B updates with RAUC > > + This layer now contains one example of building an A/B update using RAUC. > > + Users are free to use/test this example, to optionally enable it, to build > > + their own update strategies based on this one, or to ignore it completely. > > + This example only works with > > + > > + INIT_MANAGER = "systemd" > > + > > + If you wish to use this example in your builds: > > + - enable 'systemd' as your init system > > + - add the meta-rauc layer to your build (with the corresponding branch) > > + - add 'rauc' to your DISTRO_FEATURES > > + - enable RK_RAUC_DEMO in your config > > + > > + If you wish to implement your own RAUC update without using the example from > > + this layer, perform the same steps as above except for the step enabling > > + RK_RAUC_DEMO. > > + > > U-Boot Environment: > > ------------------ > > In order to configure U-Boot to be able to store its environment into the > > diff --git a/classes-recipe/rk-rauc-demo-features-check.bbclass b/classes-recipe/rk-rauc-demo-features-check.bbclass > > new file mode 100644 > > index 000000000000..946091802f8d > > --- /dev/null > > +++ b/classes-recipe/rk-rauc-demo-features-check.bbclass > > @@ -0,0 +1,8 @@ > > +inherit features_check > > + > > +REQUIRED_DISTRO_FEATURES:append:rk-rauc-demo = " systemd rauc" > > +REQUIRED_MACHINE_FEATURES:append:rk-rauc-demo = " rk-u-boot-env" > > + > > +# 'RK_RAUC_DEMO' indicates the user wants to use the > > +# rauc demo configuration from this layer > > +OVERRIDES .= "${@ ':rk-rauc-demo' if bb.utils.to_boolean(d.getVar('RK_RAUC_DEMO'), False) else ''}" > > I don't understand why this is in a recipe bbclass, the one in > conf/machine/include/rockchip-rauc.inc should already be enough? Good catch! That wasn't supposed to be there, it must have snuck in with all the rebasing I was doing late at night. > [...] > > > diff --git a/conf/machine/include/rockchip-rauc.inc b/conf/machine/include/rockchip-rauc.inc > > new file mode 100644 > > index 000000000000..a6f79503076b > > --- /dev/null > > +++ b/conf/machine/include/rockchip-rauc.inc > > @@ -0,0 +1,4 @@ > > +# 'RK_RAUC_DEMO' indicates the user wants to use the > > +# rauc demo configuration from this layer > > +OVERRIDES .= "${@ ':rk-rauc-demo' if bb.utils.to_boolean(d.getVar('RK_RAUC_DEMO'), False) else ''}" > > [...] > > > +do_compile:append:rk-rauc-demo() { > > + # create boot script > > + sed -e 's|@@KERNEL_BOOTFILE@@|${UBOOT_EXTLINUX_KERNEL_IMAGE}|' \ > > + "${UNPACKDIR}/boot.cmd.in" > "${UNPACKDIR}/boot.cmd" > > + mkimage -A ${UBOOT_ARCH} -T script -C none -n "Boot script" -d "${UNPACKDIR}/boot.cmd" ${UNPACKDIR}/boot.scr > > + > > Richard has said today he'd prefer we don't use UNPACKDIR for that kind of > things, c.f. https://lore.kernel.org/openembedded-core/20240623213254.3215897-1-leon.anavi@konsulko.com/T/#md4b10cea4af07c1a2e5be43e4ee8c8b1fbc6e420 > (though we "agreed" later in the thread to use ${B} instead of the > originally suggested ${WORKDIR}). Alright. > [...] > > > diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/system.conf b/dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/system.conf > > new file mode 100644 > > index 000000000000..4945c67345c4 > > --- /dev/null > > +++ b/dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/system.conf > > @@ -0,0 +1,17 @@ > > +[system] > > +compatible=@MACHINE@ > > +bootloader=uboot > > +data-directory=/data/ > > + > > +[keyring] > > +path=/etc/rauc/ca.cert.pem > > + > > +[slot.rootfs.0] > > +device=/dev/disk/by-partlabel/rootfsA > > +type=ext4 > > +bootname=A > > + > > +[slot.rootfs.1] > > +device=/dev/disk/by-partlabel/rootfsB > > +type=ext4 > > +bootname=B > > diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/rauc/rauc-conf.bbappend b/dynamic-layers/rk-rauc-demo/recipes-core/rauc/rauc-conf.bbappend > > new file mode 100644 > > index 000000000000..281eb2c4de91 > > --- /dev/null > > +++ b/dynamic-layers/rk-rauc-demo/recipes-core/rauc/rauc-conf.bbappend > > @@ -0,0 +1,7 @@ > > +inherit rk-rauc-demo-features-check > > + > > +FILESEXTRAPATHS:prepend:rk-rauc-demo := "${THISDIR}/files:" > > + > > I would recommend renaming the directory to rauc-conf here, but that's just > up to one's preference. Hmm... the rauc-conf recipe is in the rauc diretory in meta-rauc so I followed how the parent layer was doing it. I think I prefer it this way; makes it slightly easier to find the thing the bbappend is appending when both the parent and child layers use the same directory structure. > Looking good otherwise :) > > Cheers, > Quentin > > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#381): https://lists.yoctoproject.org/g/yocto-patches/message/381 > Mute This Topic: https://lists.yoctoproject.org/mt/106889680/900817 > Group Owner: yocto-patches+owner@lists.yoctoproject.org > Unsubscribe: https://lists.yoctoproject.org/g/yocto-patches/leave/13168745/900817/63955952/xyzzy [twoerner@gmail.com] > -=-=-=-=-=-=-=-=-=-=-=- > >
On Wed 2024-06-26 @ 11:46:44 AM, Trevor Woerner wrote: > On Wed 2024-06-26 @ 05:09:14 PM, Quentin Schulz via lists.yoctoproject.org wrote: > > Hi Trevor, > > > > On 6/26/24 3:56 PM, Trevor Woerner via lists.yoctoproject.org wrote: > > > Add an example of implementing rauc on a rockchip board. Adding the meta-rauc > > > layer, adding 'rauc' to DISTRO_FEATURES, and enabling RK_RAUC_DEMO will build > > > an image using the example provided in dynamic-layers/rk-rauc-demo. > > > > > > This example uses a simple A/B + D scheme (i.e. two root partitions and a > > > non-updated /data partition). Repartitioning occurs automatically on first > > > boot thanks to systemd's 'repart' mechanism. > > > > > > NOTE: > > > - this example only works with systemd > > > > > > If you wish to provide your own implementation, simply add the meta-rauc > > > layer, add 'rauc' to DISTRO_FEATURES, don't enable RK_RAUC_DEMO, and provide > > > your own implementation in a separate layer. > > > > > > Signed-off-by: Trevor Woerner <twoerner@gmail.com> > > > --- > > > v3 changes: > > > - change the OVERRIDE mechanism from a class to a config > > > - fix the required features check to include an OVERRIDE > > > - use a systemd mount unit for the /data partition > > > - abd-partition recipe cleanup: > > > - remove extraneous FILESEXTRAPATHS > > > - remove OVERRIDES, this recipe will only be used with rauc > > > - remove extraneous FILES:${PN} for ${sysconfdir} > > > > > > v2 changes: > > > - add information/instructions to README > > > - rauc-conf cleanup: > > > - remove ca.cert.pem from SRC_URI, it's already in parent > > > - rename systemd.conf.in to system.conf so the parent handles it > > > - process the system.conf file as a prepend, leaving it for the parent to manage > > > - use walrus operator with THISDIR > > > - break out the systemd repart config files into their own recipe so they can > > > be updated without triggering a full rebuild of systemd (and its dependents) > > > - class cleanup: > > > - update the classes so they have only 1 job (each) > > > - rename the classes to reflect their jobs > > > - update recipes/configs to use the new classes > > > --- > > > README | 18 +++++ > > > .../rk-rauc-demo-features-check.bbclass | 8 ++ > > > conf/layer.conf | 4 + > > > conf/machine/include/rockchip-rauc.inc | 4 + > > > conf/machine/include/rockchip-wic.inc | 2 + > > > .../recipes-bsp/u-boot/files/boot.cmd.in | 51 ++++++++++++ > > > .../recipes-bsp/u-boot/files/uboot-rauc.cfg | 8 ++ > > > .../recipes-bsp/u-boot/u-boot_%.bbappend | 26 ++++++ > > > .../base-files/base-files_%.bbappend | 2 + > > > .../recipes-core/base-files/files/fstab | 5 ++ > > > .../rauc-bundles/files/development-1.cert.pem | 80 +++++++++++++++++++ > > > .../rauc-bundles/files/development-1.key.pem | 28 +++++++ > > > .../rauc-bundles/rockchip-rauc-bundle.bb | 14 ++++ > > > .../recipes-core/rauc/files/ca.cert.pem | 80 +++++++++++++++++++ > > > .../recipes-core/rauc/files/system.conf | 17 ++++ > > > .../recipes-core/rauc/rauc-conf.bbappend | 7 ++ > > > .../recipes-core/systemd/abd-partition.bb | 26 ++++++ > > > .../systemd/files/25-rootfsA.conf | 4 + > > > .../systemd/files/35-rootfsB.conf | 7 ++ > > > .../recipes-core/systemd/files/45-data.conf | 6 ++ > > > .../recipes-core/systemd/files/data.mount | 10 +++ > > > .../recipes-core/systemd/systemd_%.bbappend | 3 + > > > 22 files changed, 410 insertions(+) > > > create mode 100644 classes-recipe/rk-rauc-demo-features-check.bbclass > > > create mode 100644 conf/machine/include/rockchip-rauc.inc > > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/files/boot.cmd.in > > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/files/uboot-rauc.cfg > > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/u-boot_%.bbappend > > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/base-files/base-files_%.bbappend > > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/base-files/files/fstab > > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/files/development-1.cert.pem > > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/files/development-1.key.pem > > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/rockchip-rauc-bundle.bb > > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/ca.cert.pem > > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/system.conf > > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc/rauc-conf.bbappend > > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/abd-partition.bb > > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/25-rootfsA.conf > > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/35-rootfsB.conf > > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/45-data.conf > > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/data.mount > > > create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/systemd_%.bbappend > > > > > > diff --git a/README b/README > > > index 6003e7c652fe..8ff006e942b9 100644 > > > --- a/README > > > +++ b/README > > > @@ -85,6 +85,24 @@ Notes: > > > in the configuration (e.g. conf/local.conf). > > > + A/B updates with RAUC > > > + This layer now contains one example of building an A/B update using RAUC. > > > + Users are free to use/test this example, to optionally enable it, to build > > > + their own update strategies based on this one, or to ignore it completely. > > > + This example only works with > > > + > > > + INIT_MANAGER = "systemd" > > > + > > > + If you wish to use this example in your builds: > > > + - enable 'systemd' as your init system > > > + - add the meta-rauc layer to your build (with the corresponding branch) > > > + - add 'rauc' to your DISTRO_FEATURES > > > + - enable RK_RAUC_DEMO in your config > > > + > > > + If you wish to implement your own RAUC update without using the example from > > > + this layer, perform the same steps as above except for the step enabling > > > + RK_RAUC_DEMO. > > > + > > > U-Boot Environment: > > > ------------------ > > > In order to configure U-Boot to be able to store its environment into the > > > diff --git a/classes-recipe/rk-rauc-demo-features-check.bbclass b/classes-recipe/rk-rauc-demo-features-check.bbclass > > > new file mode 100644 > > > index 000000000000..946091802f8d > > > --- /dev/null > > > +++ b/classes-recipe/rk-rauc-demo-features-check.bbclass > > > @@ -0,0 +1,8 @@ > > > +inherit features_check > > > + > > > +REQUIRED_DISTRO_FEATURES:append:rk-rauc-demo = " systemd rauc" > > > +REQUIRED_MACHINE_FEATURES:append:rk-rauc-demo = " rk-u-boot-env" > > > + > > > +# 'RK_RAUC_DEMO' indicates the user wants to use the > > > +# rauc demo configuration from this layer > > > +OVERRIDES .= "${@ ':rk-rauc-demo' if bb.utils.to_boolean(d.getVar('RK_RAUC_DEMO'), False) else ''}" > > > > I don't understand why this is in a recipe bbclass, the one in > > conf/machine/include/rockchip-rauc.inc should already be enough? > > Good catch! That wasn't supposed to be there, it must have snuck in with all > the rebasing I was doing late at night. > > > [...] > > > > > diff --git a/conf/machine/include/rockchip-rauc.inc b/conf/machine/include/rockchip-rauc.inc > > > new file mode 100644 > > > index 000000000000..a6f79503076b > > > --- /dev/null > > > +++ b/conf/machine/include/rockchip-rauc.inc > > > @@ -0,0 +1,4 @@ > > > +# 'RK_RAUC_DEMO' indicates the user wants to use the > > > +# rauc demo configuration from this layer > > > +OVERRIDES .= "${@ ':rk-rauc-demo' if bb.utils.to_boolean(d.getVar('RK_RAUC_DEMO'), False) else ''}" > > > > [...] > > > > > +do_compile:append:rk-rauc-demo() { > > > + # create boot script > > > + sed -e 's|@@KERNEL_BOOTFILE@@|${UBOOT_EXTLINUX_KERNEL_IMAGE}|' \ > > > + "${UNPACKDIR}/boot.cmd.in" > "${UNPACKDIR}/boot.cmd" > > > + mkimage -A ${UBOOT_ARCH} -T script -C none -n "Boot script" -d "${UNPACKDIR}/boot.cmd" ${UNPACKDIR}/boot.scr > > > + > > > > Richard has said today he'd prefer we don't use UNPACKDIR for that kind of > > things, c.f. https://lore.kernel.org/openembedded-core/20240623213254.3215897-1-leon.anavi@konsulko.com/T/#md4b10cea4af07c1a2e5be43e4ee8c8b1fbc6e420 > > (though we "agreed" later in the thread to use ${B} instead of the > > originally suggested ${WORKDIR}). > > Alright. Actually... I have to do it that way so that the parent u-boot recipe picks up this file "automatically". See the "install" line in u-boot.inc in oe-core. Are our other uses of UNPACKDIR in meta-rockchip okay? If not I could submit another patch to fix them up (and fixup any of the ones related to this patch as part of a v4). > > [...] > > > > > diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/system.conf b/dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/system.conf > > > new file mode 100644 > > > index 000000000000..4945c67345c4 > > > --- /dev/null > > > +++ b/dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/system.conf > > > @@ -0,0 +1,17 @@ > > > +[system] > > > +compatible=@MACHINE@ > > > +bootloader=uboot > > > +data-directory=/data/ > > > + > > > +[keyring] > > > +path=/etc/rauc/ca.cert.pem > > > + > > > +[slot.rootfs.0] > > > +device=/dev/disk/by-partlabel/rootfsA > > > +type=ext4 > > > +bootname=A > > > + > > > +[slot.rootfs.1] > > > +device=/dev/disk/by-partlabel/rootfsB > > > +type=ext4 > > > +bootname=B > > > diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/rauc/rauc-conf.bbappend b/dynamic-layers/rk-rauc-demo/recipes-core/rauc/rauc-conf.bbappend > > > new file mode 100644 > > > index 000000000000..281eb2c4de91 > > > --- /dev/null > > > +++ b/dynamic-layers/rk-rauc-demo/recipes-core/rauc/rauc-conf.bbappend > > > @@ -0,0 +1,7 @@ > > > +inherit rk-rauc-demo-features-check > > > + > > > +FILESEXTRAPATHS:prepend:rk-rauc-demo := "${THISDIR}/files:" > > > + > > > > I would recommend renaming the directory to rauc-conf here, but that's just > > up to one's preference. > > Hmm... the rauc-conf recipe is in the rauc diretory in meta-rauc so I followed > how the parent layer was doing it. I think I prefer it this way; makes it > slightly easier to find the thing the bbappend is appending when both the > parent and child layers use the same directory structure. > > > Looking good otherwise :) > > > > Cheers, > > Quentin > > > > > > -=-=-=-=-=-=-=-=-=-=-=- > > Links: You receive all messages sent to this group. > > View/Reply Online (#381): https://lists.yoctoproject.org/g/yocto-patches/message/381 > > Mute This Topic: https://lists.yoctoproject.org/mt/106889680/900817 > > Group Owner: yocto-patches+owner@lists.yoctoproject.org > > Unsubscribe: https://lists.yoctoproject.org/g/yocto-patches/leave/13168745/900817/63955952/xyzzy [twoerner@gmail.com] > > -=-=-=-=-=-=-=-=-=-=-=- > > > >
Hi Trevor, On 6/26/24 5:53 PM, Trevor Woerner via lists.yoctoproject.org wrote: > On Wed 2024-06-26 @ 11:46:44 AM, Trevor Woerner wrote: >> On Wed 2024-06-26 @ 05:09:14 PM, Quentin Schulz via lists.yoctoproject.org wrote: >>> Hi Trevor, >>> >>> On 6/26/24 3:56 PM, Trevor Woerner via lists.yoctoproject.org wrote: [...] >>>> +do_compile:append:rk-rauc-demo() { >>>> + # create boot script >>>> + sed -e 's|@@KERNEL_BOOTFILE@@|${UBOOT_EXTLINUX_KERNEL_IMAGE}|' \ >>>> + "${UNPACKDIR}/boot.cmd.in" > "${UNPACKDIR}/boot.cmd" >>>> + mkimage -A ${UBOOT_ARCH} -T script -C none -n "Boot script" -d "${UNPACKDIR}/boot.cmd" ${UNPACKDIR}/boot.scr >>>> + >>> >>> Richard has said today he'd prefer we don't use UNPACKDIR for that kind of >>> things, c.f. https://lore.kernel.org/openembedded-core/20240623213254.3215897-1-leon.anavi@konsulko.com/T/#md4b10cea4af07c1a2e5be43e4ee8c8b1fbc6e420 >>> (though we "agreed" later in the thread to use ${B} instead of the >>> originally suggested ${WORKDIR}). >> >> Alright. > > Actually... I have to do it that way so that the parent u-boot recipe picks up > this file "automatically". See the "install" line in u-boot.inc in oe-core. > I only see it using UNPACKDIR for fw_env.config and I don't think we're writing this here in this patch? Though we do write it in rk_generate_env already (in a previous patch)... I think meta-rockchip is fine for now due to this code path only being run whenever rk-u-boot-env OVERRIDE is there AND the fact that we have an append for this OVERRIDE in SRC_URI. Which means if we unset it, do_fetch will run again, and it should delete UNPACKDIR then. So no poisoning **today**. It is an interesting question though... I'm wondering if recipes shouldn't copy their files from UNPACKDIR to S/B before using them instead of directly getting them from UNPACKDIR, so they could be overridden by bbappend without poisoning UNPACKDIR between builds. It feels like this WORKDIR->UNPACKDIR migration fixed one issue (patches in SRC_URI being removed but still being applied) but not everything. I don't have a suggestion right now though :/ > Are our other uses of UNPACKDIR in meta-rockchip okay? If not I could submit > another patch to fix them up (and fixup any of the ones related to this patch > as part of a v4). > In the current state, I think it's fine. We should rather fix the upstream u-boot recipe to fix the use of UNPACKDIR for getting fw_env.config? [...] >>>> diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/rauc/rauc-conf.bbappend b/dynamic-layers/rk-rauc-demo/recipes-core/rauc/rauc-conf.bbappend >>>> new file mode 100644 >>>> index 000000000000..281eb2c4de91 >>>> --- /dev/null >>>> +++ b/dynamic-layers/rk-rauc-demo/recipes-core/rauc/rauc-conf.bbappend >>>> @@ -0,0 +1,7 @@ >>>> +inherit rk-rauc-demo-features-check >>>> + >>>> +FILESEXTRAPATHS:prepend:rk-rauc-demo := "${THISDIR}/files:" >>>> + >>> >>> I would recommend renaming the directory to rauc-conf here, but that's just >>> up to one's preference. >> >> Hmm... the rauc-conf recipe is in the rauc diretory in meta-rauc so I followed >> how the parent layer was doing it. I think I prefer it this way; makes it >> slightly easier to find the thing the bbappend is appending when both the >> parent and child layers use the same directory structure. >> I usually try to avoid using files/ except when I want two recipes or bbappends for different recipes to share the same files. But matching the original recipe layout is a good justification :) Cheers, Quentin
diff --git a/README b/README index 6003e7c652fe..8ff006e942b9 100644 --- a/README +++ b/README @@ -85,6 +85,24 @@ Notes: in the configuration (e.g. conf/local.conf). + A/B updates with RAUC + This layer now contains one example of building an A/B update using RAUC. + Users are free to use/test this example, to optionally enable it, to build + their own update strategies based on this one, or to ignore it completely. + This example only works with + + INIT_MANAGER = "systemd" + + If you wish to use this example in your builds: + - enable 'systemd' as your init system + - add the meta-rauc layer to your build (with the corresponding branch) + - add 'rauc' to your DISTRO_FEATURES + - enable RK_RAUC_DEMO in your config + + If you wish to implement your own RAUC update without using the example from + this layer, perform the same steps as above except for the step enabling + RK_RAUC_DEMO. + U-Boot Environment: ------------------ In order to configure U-Boot to be able to store its environment into the diff --git a/classes-recipe/rk-rauc-demo-features-check.bbclass b/classes-recipe/rk-rauc-demo-features-check.bbclass new file mode 100644 index 000000000000..946091802f8d --- /dev/null +++ b/classes-recipe/rk-rauc-demo-features-check.bbclass @@ -0,0 +1,8 @@ +inherit features_check + +REQUIRED_DISTRO_FEATURES:append:rk-rauc-demo = " systemd rauc" +REQUIRED_MACHINE_FEATURES:append:rk-rauc-demo = " rk-u-boot-env" + +# 'RK_RAUC_DEMO' indicates the user wants to use the +# rauc demo configuration from this layer +OVERRIDES .= "${@ ':rk-rauc-demo' if bb.utils.to_boolean(d.getVar('RK_RAUC_DEMO'), False) else ''}" diff --git a/conf/layer.conf b/conf/layer.conf index 68205dd7ea4c..03914d2952e1 100644 --- a/conf/layer.conf +++ b/conf/layer.conf @@ -21,3 +21,7 @@ BBFILES_DYNAMIC += " \ qt5-layer:${LAYERDIR}/dynamic-layers/qt5-layer/*/*/*.bb \ qt5-layer:${LAYERDIR}/dynamic-layers/qt5-layer/*/*/*.bbappend \ " +BBFILES_DYNAMIC += " \ + rauc:${LAYERDIR}/dynamic-layers/rk-rauc-demo/*/*/*.bb \ + rauc:${LAYERDIR}/dynamic-layers/rk-rauc-demo/*/*/*.bbappend \ +" diff --git a/conf/machine/include/rockchip-rauc.inc b/conf/machine/include/rockchip-rauc.inc new file mode 100644 index 000000000000..a6f79503076b --- /dev/null +++ b/conf/machine/include/rockchip-rauc.inc @@ -0,0 +1,4 @@ +# 'RK_RAUC_DEMO' indicates the user wants to use the +# rauc demo configuration from this layer +OVERRIDES .= "${@ ':rk-rauc-demo' if bb.utils.to_boolean(d.getVar('RK_RAUC_DEMO'), False) else ''}" +IMAGE_INSTALL:append:rk-rauc-demo = " abd-partition" diff --git a/conf/machine/include/rockchip-wic.inc b/conf/machine/include/rockchip-wic.inc index ebfc0cb96507..0e0aa5d9b340 100644 --- a/conf/machine/include/rockchip-wic.inc +++ b/conf/machine/include/rockchip-wic.inc @@ -2,6 +2,7 @@ require conf/machine/include/rockchip-extlinux.inc require conf/machine/include/rockchip-rk-u-boot-env.inc +require conf/machine/include/rockchip-rauc.inc SPL_BINARY ?= "idbloader.img" @@ -9,6 +10,7 @@ SPL_BINARY ?= "idbloader.img" # WIC_COMPRESSION_EXTENSION = ".xz" WIC_COMPRESSION_EXTENSION ?= "" IMAGE_FSTYPES += "wic${WIC_COMPRESSION_EXTENSION} wic.bmap" +IMAGE_FSTYPES:append:rk-rauc-demo = " ext4" WKS_FILE ?= "rockchip.wks" WKS_FILE_DEPENDS ?= " \ e2fsprogs-native \ diff --git a/dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/files/boot.cmd.in b/dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/files/boot.cmd.in new file mode 100644 index 000000000000..0887d2b5b812 --- /dev/null +++ b/dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/files/boot.cmd.in @@ -0,0 +1,51 @@ +echo "devtype: ${devtype}" +echo "devnum: ${devnum}" +echo "distro_bootpart: ${distro_bootpart}" + +test -n "${BOOT_ORDER}" || env set BOOT_ORDER "A B" +test -n "${BOOT_A_LEFT}" || env set BOOT_A_LEFT 3 +test -n "${BOOT_B_LEFT}" || env set BOOT_B_LEFT 3 +test -n "${RAUC_BOOTDEV}" || env set RAUC_BOOTDEV "${devtype} ${devnum}:${distro_bootpart}" + +env set RAUC_BOOTPART +env set RAUC_SLOT + +echo "BOOT_ORDER: ${BOOT_ORDER}" +for RAUC_BOOTSLOT in "${BOOT_ORDER}"; do + if test "x${RAUC_BOOTPART}" != "x"; then + # skip remaining slots + elif test "x${RAUC_BOOTSLOT}" = "xA"; then + if test ${BOOT_A_LEFT} -gt 0; then + echo "using RAUC slot A" + setexpr BOOT_A_LEFT ${BOOT_A_LEFT} - 1 + env set RAUC_BOOTPART "PARTLABEL=rootfsA" + env set RAUC_SLOT "A" + env set RAUC_BOOTDEV "${devtype} ${devnum}:${distro_bootpart}" + echo "RAUC_BOOTDEV: ${RAUC_BOOTDEV}" + fi + elif test "x${RAUC_BOOTSLOT}" = "xB"; then + if test ${BOOT_B_LEFT} -gt 0; then + echo "using RAUC slot B" + setexpr BOOT_B_LEFT ${BOOT_B_LEFT} - 1 + env set RAUC_BOOTPART "PARTLABEL=rootfsB" + env set RAUC_SLOT "B" + setexpr BOOTPART1 ${distro_bootpart} + 1 + env set RAUC_BOOTDEV "${devtype} ${devnum}:${BOOTPART1}" + echo "RAUC_BOOTDEV: ${RAUC_BOOTDEV}" + fi + fi +done + +if test -n "${RAUC_BOOTPART}"; then + env set bootargs "${bootargsbase} root=${RAUC_BOOTPART} rauc.slot=${RAUC_SLOT}" + env save +else + echo "No valid RAUC slot found. Resetting tries to 3" + env set BOOT_A_LEFT 3 + env set BOOT_B_LEFT 3 + env save + reset +fi + +ext4load ${RAUC_BOOTDEV} ${kernel_addr_r} @@KERNEL_BOOTFILE@@ +bootm ${kernel_addr_r} diff --git a/dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/files/uboot-rauc.cfg b/dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/files/uboot-rauc.cfg new file mode 100644 index 000000000000..77b7164e0192 --- /dev/null +++ b/dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/files/uboot-rauc.cfg @@ -0,0 +1,8 @@ +CONFIG_CMD_BOOTDEV=y +CONFIG_CMD_BOOTMETH=y +CONFIG_CMD_SETEXPR=y +CONFIG_CMD_SETEXPR_FMT=y +CONFIG_BOOTSTD_DEFAULTS=n +CONFIG_BOOTMETH_EXTLINUX=n +CONFIG_BOOTMETH_EXTLINUX_PXE=n +CONFIG_BOOTMETH_VBE=n diff --git a/dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/u-boot_%.bbappend b/dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/u-boot_%.bbappend new file mode 100644 index 000000000000..fa96b4dd18bf --- /dev/null +++ b/dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/u-boot_%.bbappend @@ -0,0 +1,26 @@ +inherit rk-rauc-demo-features-check + +FILESEXTRAPATHS:prepend:rk-rauc-demo := "${THISDIR}/files:" + +DEPENDS:append:rk-rauc-demo = " u-boot-mkimage-native" +SRC_URI:append:rk-rauc-demo = " \ + file://uboot-rauc.cfg \ + file://boot.cmd.in \ + " + +do_compile:append:rk-rauc-demo() { + # create boot script + sed -e 's|@@KERNEL_BOOTFILE@@|${UBOOT_EXTLINUX_KERNEL_IMAGE}|' \ + "${UNPACKDIR}/boot.cmd.in" > "${UNPACKDIR}/boot.cmd" + mkimage -A ${UBOOT_ARCH} -T script -C none -n "Boot script" -d "${UNPACKDIR}/boot.cmd" ${UNPACKDIR}/boot.scr + + # tweak environment + echo "bootmeths=script extlinux" >> ${B}/u-boot-initial-env + echo "bootargsbase=${UBOOT_EXTLINUX_KERNEL_ARGS} ${UBOOT_EXTLINUX_CONSOLE}" >> ${B}/u-boot-initial-env +} + +do_install:append:rk-rauc-demo() { + install -d ${D}/boot + install -m 0644 ${UNPACKDIR}/boot.scr ${D}/boot +} +FILES:${PN}-extlinux += "/boot/boot.scr" diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/base-files/base-files_%.bbappend b/dynamic-layers/rk-rauc-demo/recipes-core/base-files/base-files_%.bbappend new file mode 100644 index 000000000000..705979a17c3e --- /dev/null +++ b/dynamic-layers/rk-rauc-demo/recipes-core/base-files/base-files_%.bbappend @@ -0,0 +1,2 @@ +inherit rk-rauc-demo-features-check +FILESEXTRAPATHS:prepend:rk-rauc-demo := "${THISDIR}/files:" diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/base-files/files/fstab b/dynamic-layers/rk-rauc-demo/recipes-core/base-files/files/fstab new file mode 100644 index 000000000000..3be093e457e9 --- /dev/null +++ b/dynamic-layers/rk-rauc-demo/recipes-core/base-files/files/fstab @@ -0,0 +1,5 @@ +/dev/root / auto x-systemd.growfs 1 1 +proc /proc proc defaults 0 0 +devpts /dev/pts devpts mode=0620,ptmxmode=0666,gid=5 0 0 +tmpfs /run tmpfs mode=0755,nodev,nosuid,strictatime 0 0 +tmpfs /var/volatile tmpfs defaults 0 0 diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/files/development-1.cert.pem b/dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/files/development-1.cert.pem new file mode 100644 index 000000000000..92e71125d22f --- /dev/null +++ b/dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/files/development-1.cert.pem @@ -0,0 +1,80 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 2 (0x2) + Signature Algorithm: sha256WithRSAEncryption + Issuer: O=Test Org, CN=Test Org rauc CA Development + Validity + Not Before: Jan 1 00:00:00 1970 GMT + Not After : Dec 31 23:59:59 9999 GMT + Subject: O=Test Org, CN=Test Org Development-1 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public-Key: (2048 bit) + Modulus: + 00:ac:2b:0f:05:02:d0:bb:b0:47:05:36:71:3c:20: + 0e:a7:76:8d:75:c1:23:5e:6c:7a:2d:94:ff:3c:17: + d8:0b:44:48:2a:82:03:92:c5:fd:33:76:0c:42:cf: + 4d:8a:c9:47:7f:af:52:7c:15:6c:3b:e7:60:d1:04: + 97:24:7b:07:1f:56:7d:6c:3f:31:e8:f9:36:7b:33: + 5b:cf:54:ea:37:98:a6:b1:9a:1d:da:96:a1:07:14: + 9c:15:80:4d:db:0c:03:86:ce:c7:3d:72:57:a2:da: + a0:c0:8c:b2:9a:a0:6a:e5:b8:5f:52:d2:f6:27:ca: + 48:f4:e3:86:eb:be:24:93:6a:af:60:68:7f:09:3b: + 81:96:ce:85:0c:63:93:d8:fa:91:dc:50:2e:77:bb: + bc:38:42:e9:86:d8:ac:33:dd:e6:d4:37:69:e3:01: + 8d:21:8f:a9:4a:7f:15:a5:aa:a9:be:fc:36:93:a4: + 10:0c:18:33:30:06:7f:1c:13:b3:a9:c6:57:d7:6b: + 96:45:15:e7:f5:8f:3d:48:e0:08:46:4f:7f:ef:14: + 77:95:25:25:9b:14:21:84:25:eb:37:0b:01:48:e6: + f5:c1:8b:61:c6:cb:8c:6b:a7:d8:d2:f9:31:e3:80: + 3f:78:ea:6a:41:6c:5d:4d:83:a6:54:0d:5b:c2:0e: + f6:ef + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Key Identifier: + 89:4C:FE:8A:60:4D:C9:6D:F7:A8:C0:04:49:7F:AA:05:92:29:17:FB + X509v3 Authority Key Identifier: + keyid:44:0C:AF:4A:74:B4:C7:65:02:B2:95:F1:91:7C:A3:CC:E6:3E:99:E8 + DirName:/O=Test Org/CN=Test Org rauc CA Development + serial:01 + + X509v3 Basic Constraints: + CA:FALSE + Signature Algorithm: sha256WithRSAEncryption + 2c:d2:30:68:f5:84:52:1e:cf:ed:0d:fc:e7:02:69:0b:3b:f6: + c3:77:00:12:1d:2d:d0:8f:49:9e:5c:f1:00:7b:1d:4f:d5:a9: + 46:a5:df:54:90:50:b4:8f:8e:ba:4b:2d:82:74:eb:5b:a8:f5: + 45:7b:77:73:b1:9b:32:93:15:c0:5c:02:2a:ed:b0:1e:bb:d8: + 4e:41:17:20:af:04:46:21:20:7b:86:9f:32:ab:54:71:26:e8: + 0b:75:12:9c:63:53:4f:54:db:a7:f9:b2:fa:e9:ee:4a:9d:80: + ba:ae:3f:eb:ef:10:11:2d:4f:5a:34:fb:8b:45:10:63:0b:f8: + af:f3:8b:24:21:2a:e0:0b:44:38:44:b5:9d:6e:8a:ff:1f:bf: + 6e:44:21:22:ec:8a:8d:73:63:e5:df:1a:ec:2a:64:1f:97:f9: + 5c:3a:25:7f:03:80:4c:db:99:5e:f9:7d:2b:f1:d0:97:4d:95: + 6f:29:47:7b:3f:29:e3:96:25:b0:1c:f1:0b:8b:8b:ba:de:3b: + 3f:40:2e:bd:31:68:ea:a9:8f:dc:c9:09:22:df:76:69:08:5d: + 5d:a4:09:62:80:20:83:9e:bd:d4:a6:35:ee:97:50:66:39:62: + 66:1b:2e:75:f2:6d:e7:06:ae:67:5f:4b:63:5c:52:e7:5d:dd: + c9:0c:86:2b +-----BEGIN CERTIFICATE----- +MIIDfTCCAmWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADA6MREwDwYDVQQKDAhUZXN0 +IE9yZzElMCMGA1UEAwwcVGVzdCBPcmcgcmF1YyBDQSBEZXZlbG9wbWVudDAgFw03 +MDAxMDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowNDERMA8GA1UECgwIVGVzdCBP +cmcxHzAdBgNVBAMMFlRlc3QgT3JnIERldmVsb3BtZW50LTEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCsKw8FAtC7sEcFNnE8IA6ndo11wSNebHotlP88 +F9gLREgqggOSxf0zdgxCz02KyUd/r1J8FWw752DRBJckewcfVn1sPzHo+TZ7M1vP +VOo3mKaxmh3alqEHFJwVgE3bDAOGzsc9clei2qDAjLKaoGrluF9S0vYnykj044br +viSTaq9gaH8JO4GWzoUMY5PY+pHcUC53u7w4QumG2Kwz3ebUN2njAY0hj6lKfxWl +qqm+/DaTpBAMGDMwBn8cE7OpxlfXa5ZFFef1jz1I4AhGT3/vFHeVJSWbFCGEJes3 +CwFI5vXBi2HGy4xrp9jS+THjgD946mpBbF1Ng6ZUDVvCDvbvAgMBAAGjgZEwgY4w +HQYDVR0OBBYEFIlM/opgTclt96jABEl/qgWSKRf7MGIGA1UdIwRbMFmAFEQMr0p0 +tMdlArKV8ZF8o8zmPpnooT6kPDA6MREwDwYDVQQKDAhUZXN0IE9yZzElMCMGA1UE +AwwcVGVzdCBPcmcgcmF1YyBDQSBEZXZlbG9wbWVudIIBATAJBgNVHRMEAjAAMA0G +CSqGSIb3DQEBCwUAA4IBAQAs0jBo9YRSHs/tDfznAmkLO/bDdwASHS3Qj0meXPEA +ex1P1alGpd9UkFC0j466Sy2CdOtbqPVFe3dzsZsykxXAXAIq7bAeu9hOQRcgrwRG +ISB7hp8yq1RxJugLdRKcY1NPVNun+bL66e5KnYC6rj/r7xARLU9aNPuLRRBjC/iv +84skISrgC0Q4RLWdbor/H79uRCEi7IqNc2Pl3xrsKmQfl/lcOiV/A4BM25le+X0r +8dCXTZVvKUd7PynjliWwHPELi4u63js/QC69MWjqqY/cyQki33ZpCF1dpAligCCD +nr3UpjXul1BmOWJmGy518m3nBq5nX0tjXFLnXd3JDIYr +-----END CERTIFICATE----- diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/files/development-1.key.pem b/dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/files/development-1.key.pem new file mode 100644 index 000000000000..80305f8291b1 --- /dev/null +++ b/dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/files/development-1.key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCsKw8FAtC7sEcF +NnE8IA6ndo11wSNebHotlP88F9gLREgqggOSxf0zdgxCz02KyUd/r1J8FWw752DR +BJckewcfVn1sPzHo+TZ7M1vPVOo3mKaxmh3alqEHFJwVgE3bDAOGzsc9clei2qDA +jLKaoGrluF9S0vYnykj044brviSTaq9gaH8JO4GWzoUMY5PY+pHcUC53u7w4QumG +2Kwz3ebUN2njAY0hj6lKfxWlqqm+/DaTpBAMGDMwBn8cE7OpxlfXa5ZFFef1jz1I +4AhGT3/vFHeVJSWbFCGEJes3CwFI5vXBi2HGy4xrp9jS+THjgD946mpBbF1Ng6ZU +DVvCDvbvAgMBAAECggEASphBYq9sltVyf/ytpRpSnxYLhmiPFXs0mIlE6Nl/3qnQ +BrLcL3yfDuvntg6xjx9UXistNtvlUDMYzJcLkV/InzhPEVZ0HnfTth9zeOpWrI30 +M2EN7EZ1MGcqlVpI4U5cPM1cn+/proLBQYv0WnCEwFFY477JrkXDxG7MZ1mz6TaL +IGcCCIUu1BxECngQ344eaKrSR5F2MtlxAl19Pt5QSPfmuMdmElrK6RtBjnKrDu1K +fe6DCfObZ3nbG2fhFV4uTxhlTC9lUmfTQMKR79rLmHNKnbMx74kFNvy3XlT2l35I +ZVfRMLPWph7yMom9v/Im3Q70uhJ1lxyqbbl/DFZVmQKBgQDVo19SqR/QeDIxPIPn +XvVWzo5ml3KO/dVxA8sok6twr+G7yUeIUnuauYFA/tX/FS32azFRa/7GjUfoTx3q +GHK43TBCMyEt0we6WwZb+FkWa/b/RBoyD/audrpmgDDi1+fXPs8bBvoO8/oju20D +I6wOjSovcIMaeLo/+u3U6ShNQwKBgQDOTpoGMsQzXchZfDmxL61h3j4Gtjrl4BpU +WhAkJ9U2BRpL8NSZLErn5ik8MwgK2ut+YdU7aogI0D6Gc+4zZoJDEbhhmPD9cprv +LMyfAKoisR01OyU57mMSGQq0dfjmK6PfYJdX5sQJGkMFptNAJLTDoYtmXItSICoY +1j5KTvwe5QKBgGytxmErjfakHoxzh3pdERuOylwgMPPS5xCt6FyE+pLBtmisFQqh +QyXLtpgUy1IPOSmBED6mXJ4u4uSn0sTymPG3+8PBdOB12RmREqQYq2E/nQ/wWg8b +ldbcqShZkATl5pfV6M+L9gtDS/1/bA5LyExCvbISX29I+R5xDSnhTlI3AoGBAJRK +VVXtOa/+UhtYOpPMxGCbgZQLemxvWB2XmxCR/SRWKJ+7XOU4vCLSAoO93qMG1szB +/6Y0ndFP9hFo1SfnH+ybmR+18ksLDKisV+xWavSCwI7Zk5l/a4C/tT0fqyeu6JyQ +bliFjBVK5i/yyNfLSo9v16ZdENuYOQofPSjmezytAoGBALhwvtzgqvqGSXID2w5N +ullK8ny3WRa1o5DLXuMV19CvknmrN/zmmjQLblKkdp9VBb7uo8czon+qL1ZZyywC +W2BmHfGMPUyQHux4btsdJhlWcS7z7aYXM9QWiKlI+EKLHLILYk+LPIEf85sUcOZV +eCBpViT7fv2iv/0L+mzjWtLA +-----END PRIVATE KEY----- diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/rockchip-rauc-bundle.bb b/dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/rockchip-rauc-bundle.bb new file mode 100644 index 000000000000..5a42f59b821e --- /dev/null +++ b/dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/rockchip-rauc-bundle.bb @@ -0,0 +1,14 @@ +DESCRIPTION = "Rockchip RAUC bundle generator" + +inherit bundle + +RAUC_BUNDLE_COMPATIBLE = "${MACHINE}" +RAUC_BUNDLE_VERSION = "v20240512" +RAUC_BUNDLE_DESCRIPTION = "RAUC Demo Bundle" +RAUC_BUNDLE_FORMAT = "verity" +RAUC_BUNDLE_SLOTS = "rootfs" +RAUC_SLOT_rootfs = "core-image-base" +RAUC_SLOT_rootfs[fstype] = "ext4" + +RAUC_KEY_FILE := "${THISDIR}/files/development-1.key.pem" +RAUC_CERT_FILE := "${THISDIR}/files/development-1.cert.pem" diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/ca.cert.pem b/dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/ca.cert.pem new file mode 100644 index 000000000000..46944a99df22 --- /dev/null +++ b/dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/ca.cert.pem @@ -0,0 +1,80 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 1 (0x1) + Signature Algorithm: sha256WithRSAEncryption + Issuer: O=Test Org, CN=Test Org rauc CA Development + Validity + Not Before: Jan 1 00:00:00 1970 GMT + Not After : Dec 31 23:59:59 9999 GMT + Subject: O=Test Org, CN=Test Org rauc CA Development + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public-Key: (2048 bit) + Modulus: + 00:c0:fe:7b:6c:c3:e3:47:cc:d4:15:e1:0c:b2:1c: + c9:f7:61:3e:42:d7:f1:a4:30:f2:db:0e:49:95:49: + 70:ee:97:6d:fe:48:5d:b9:22:63:47:e0:be:63:d7: + 68:9b:38:04:7d:7f:d9:65:ef:1d:6c:26:cb:05:7f: + 59:45:15:9d:76:59:c4:8d:59:a0:38:a0:25:fa:86: + 1b:f4:85:ff:cf:7c:c7:57:a3:7e:56:71:7d:69:c3: + 69:a7:fb:e6:8e:bc:f9:49:e2:f5:9a:97:e5:2d:75: + ef:f9:76:29:5f:76:11:1b:70:6f:4d:26:4f:e0:06: + 9b:8c:e3:76:91:81:4a:4e:98:5d:2e:f4:bd:23:4d: + e7:5d:9b:ea:68:4d:03:9e:35:90:c5:f2:8d:ae:ed: + 44:4f:f3:50:dc:2b:ef:ae:44:35:79:78:3d:65:4b: + d9:16:98:aa:be:08:47:25:af:68:1c:0b:8e:c1:aa: + 02:a7:61:4f:4d:15:1b:07:3c:4e:60:b3:9a:d5:c1: + 39:34:4e:8e:e7:93:46:f1:75:95:aa:16:9a:1d:e6: + 49:15:a5:ae:06:8a:45:16:a9:af:59:60:9b:c6:6d: + 3d:19:57:5d:de:31:d5:dc:96:0e:a4:25:fe:7a:07: + 71:c5:40:c0:a3:d0:d5:84:47:14:7a:5a:f1:07:75: + 79:35 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Key Identifier: + 44:0C:AF:4A:74:B4:C7:65:02:B2:95:F1:91:7C:A3:CC:E6:3E:99:E8 + X509v3 Authority Key Identifier: + keyid:44:0C:AF:4A:74:B4:C7:65:02:B2:95:F1:91:7C:A3:CC:E6:3E:99:E8 + DirName:/O=Test Org/CN=Test Org rauc CA Development + serial:01 + + X509v3 Basic Constraints: + CA:TRUE + Signature Algorithm: sha256WithRSAEncryption + 30:07:51:4d:d6:2c:0c:2f:3e:6c:5c:34:1f:07:21:8d:50:77: + 9a:a6:81:75:62:f0:fe:ff:3b:5b:d0:7c:d1:45:e7:e2:67:d4: + 23:cb:af:9a:8b:f4:2b:d2:33:3d:45:bb:a7:7d:b4:9b:41:db: + fb:62:ac:83:fc:41:ae:e5:dc:2d:df:7d:72:7e:df:34:01:60: + 94:7f:15:78:84:87:f0:23:e4:8e:b8:dc:71:cb:84:4b:25:bb: + 62:8f:fd:7f:d3:3c:1d:85:45:fb:03:7c:a2:bc:c4:a8:fa:2b: + ec:79:67:8d:f4:5f:37:a8:5a:54:bc:b3:78:11:0b:8b:29:90: + 8b:48:4a:d7:87:93:96:97:72:10:1d:70:29:f8:e4:c3:81:6d: + 7d:c3:6e:d4:c8:1b:0b:0d:f9:c0:b9:7b:11:54:e2:af:8b:a0: + 45:de:c2:67:81:8c:0c:9d:ba:a1:31:8b:f2:cc:da:c7:cc:6d: + 21:92:2a:57:29:9c:48:92:75:d9:1a:6e:d3:ee:53:66:83:2e: + 08:74:09:5d:78:13:99:34:7d:16:8c:ba:29:75:80:20:8b:ca: + 91:19:29:64:ef:64:37:de:5b:22:18:99:5b:63:69:9a:a2:44: + 21:70:30:41:f2:58:27:ab:4f:5c:d0:e1:94:5d:d1:5b:8d:fd: + bf:8f:a9:99 +-----BEGIN CERTIFICATE----- +MIIDhjCCAm6gAwIBAgIBATANBgkqhkiG9w0BAQsFADA6MREwDwYDVQQKDAhUZXN0 +IE9yZzElMCMGA1UEAwwcVGVzdCBPcmcgcmF1YyBDQSBEZXZlbG9wbWVudDAgFw03 +MDAxMDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowOjERMA8GA1UECgwIVGVzdCBP +cmcxJTAjBgNVBAMMHFRlc3QgT3JnIHJhdWMgQ0EgRGV2ZWxvcG1lbnQwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDA/ntsw+NHzNQV4QyyHMn3YT5C1/Gk +MPLbDkmVSXDul23+SF25ImNH4L5j12ibOAR9f9ll7x1sJssFf1lFFZ12WcSNWaA4 +oCX6hhv0hf/PfMdXo35WcX1pw2mn++aOvPlJ4vWal+Utde/5dilfdhEbcG9NJk/g +BpuM43aRgUpOmF0u9L0jTeddm+poTQOeNZDF8o2u7URP81DcK++uRDV5eD1lS9kW +mKq+CEclr2gcC47BqgKnYU9NFRsHPE5gs5rVwTk0To7nk0bxdZWqFpod5kkVpa4G +ikUWqa9ZYJvGbT0ZV13eMdXclg6kJf56B3HFQMCj0NWERxR6WvEHdXk1AgMBAAGj +gZQwgZEwHQYDVR0OBBYEFEQMr0p0tMdlArKV8ZF8o8zmPpnoMGIGA1UdIwRbMFmA +FEQMr0p0tMdlArKV8ZF8o8zmPpnooT6kPDA6MREwDwYDVQQKDAhUZXN0IE9yZzEl +MCMGA1UEAwwcVGVzdCBPcmcgcmF1YyBDQSBEZXZlbG9wbWVudIIBATAMBgNVHRME +BTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAwB1FN1iwMLz5sXDQfByGNUHeapoF1 +YvD+/ztb0HzRRefiZ9Qjy6+ai/Qr0jM9RbunfbSbQdv7YqyD/EGu5dwt331yft80 +AWCUfxV4hIfwI+SOuNxxy4RLJbtij/1/0zwdhUX7A3yivMSo+ivseWeN9F83qFpU +vLN4EQuLKZCLSErXh5OWl3IQHXAp+OTDgW19w27UyBsLDfnAuXsRVOKvi6BF3sJn +gYwMnbqhMYvyzNrHzG0hkipXKZxIknXZGm7T7lNmgy4IdAldeBOZNH0WjLopdYAg +i8qRGSlk72Q33lsiGJlbY2maokQhcDBB8lgnq09c0OGUXdFbjf2/j6mZ +-----END CERTIFICATE----- diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/system.conf b/dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/system.conf new file mode 100644 index 000000000000..4945c67345c4 --- /dev/null +++ b/dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/system.conf @@ -0,0 +1,17 @@ +[system] +compatible=@MACHINE@ +bootloader=uboot +data-directory=/data/ + +[keyring] +path=/etc/rauc/ca.cert.pem + +[slot.rootfs.0] +device=/dev/disk/by-partlabel/rootfsA +type=ext4 +bootname=A + +[slot.rootfs.1] +device=/dev/disk/by-partlabel/rootfsB +type=ext4 +bootname=B diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/rauc/rauc-conf.bbappend b/dynamic-layers/rk-rauc-demo/recipes-core/rauc/rauc-conf.bbappend new file mode 100644 index 000000000000..281eb2c4de91 --- /dev/null +++ b/dynamic-layers/rk-rauc-demo/recipes-core/rauc/rauc-conf.bbappend @@ -0,0 +1,7 @@ +inherit rk-rauc-demo-features-check + +FILESEXTRAPATHS:prepend:rk-rauc-demo := "${THISDIR}/files:" + +do_install:prepend:rk-rauc-demo() { + sed -ie 's!@MACHINE@!${MACHINE}!g' ${UNPACKDIR}/system.conf +} diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/systemd/abd-partition.bb b/dynamic-layers/rk-rauc-demo/recipes-core/systemd/abd-partition.bb new file mode 100644 index 000000000000..1952805f4a6d --- /dev/null +++ b/dynamic-layers/rk-rauc-demo/recipes-core/systemd/abd-partition.bb @@ -0,0 +1,26 @@ +SUMMARY = "A/B+D partition definition for systemd's repart mechanism" +LICENSE = "OSL-3.0" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/OSL-3.0;md5=438ec6d864bbb958a49df939a56511cf" + +inherit rk-rauc-demo-features-check systemd + +SYSTEMD_SERVICE:${PN} = "data.mount" + +S = "${UNPACKDIR}" + +SRC_URI = " \ + file://data.mount \ + file://25-rootfsA.conf \ + file://35-rootfsB.conf \ + file://45-data.conf \ + " + +do_install() { + install -d ${D}${sysconfdir}/repart.d/ + install -m 0644 ${UNPACKDIR}/25-rootfsA.conf ${D}${sysconfdir}/repart.d/ + install -m 0644 ${UNPACKDIR}/35-rootfsB.conf ${D}${sysconfdir}/repart.d/ + install -m 0644 ${UNPACKDIR}/45-data.conf ${D}${sysconfdir}/repart.d/ + + install -d ${D}${sysconfdir}/systemd/system + install -m 0644 ${UNPACKDIR}/data.mount ${D}${sysconfdir}/systemd/system/ +} diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/25-rootfsA.conf b/dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/25-rootfsA.conf new file mode 100644 index 000000000000..dba01e1ff863 --- /dev/null +++ b/dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/25-rootfsA.conf @@ -0,0 +1,4 @@ +[Partition] +Type=root +Weight=250 +SizeMaxBytes=5G diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/35-rootfsB.conf b/dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/35-rootfsB.conf new file mode 100644 index 000000000000..31a7c06c17ff --- /dev/null +++ b/dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/35-rootfsB.conf @@ -0,0 +1,7 @@ +[Partition] +Type=root +Label=rootfsB +Weight=250 +SizeMaxBytes=5G +Format=ext4 +GrowFileSystem=yes diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/45-data.conf b/dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/45-data.conf new file mode 100644 index 000000000000..1aac59addc26 --- /dev/null +++ b/dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/45-data.conf @@ -0,0 +1,6 @@ +[Partition] +Type=root-secondary +Label=data +Weight=500 +Format=ext4 +GrowFileSystem=yes diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/data.mount b/dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/data.mount new file mode 100644 index 000000000000..c81a55be1d1a --- /dev/null +++ b/dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/data.mount @@ -0,0 +1,10 @@ +[Unit] +Description=data partition + +[Mount] +What=/dev/disk/by-partlabel/data +Where=/data +Type=ext4 + +[Install] +WantedBy=multi-user.target diff --git a/dynamic-layers/rk-rauc-demo/recipes-core/systemd/systemd_%.bbappend b/dynamic-layers/rk-rauc-demo/recipes-core/systemd/systemd_%.bbappend new file mode 100644 index 000000000000..cf6c188277db --- /dev/null +++ b/dynamic-layers/rk-rauc-demo/recipes-core/systemd/systemd_%.bbappend @@ -0,0 +1,3 @@ +inherit rk-rauc-demo-features-check + +PACKAGECONFIG:append:rk-rauc-demo = " repart openssl"
Add an example of implementing rauc on a rockchip board. Adding the meta-rauc layer, adding 'rauc' to DISTRO_FEATURES, and enabling RK_RAUC_DEMO will build an image using the example provided in dynamic-layers/rk-rauc-demo. This example uses a simple A/B + D scheme (i.e. two root partitions and a non-updated /data partition). Repartitioning occurs automatically on first boot thanks to systemd's 'repart' mechanism. NOTE: - this example only works with systemd If you wish to provide your own implementation, simply add the meta-rauc layer, add 'rauc' to DISTRO_FEATURES, don't enable RK_RAUC_DEMO, and provide your own implementation in a separate layer. Signed-off-by: Trevor Woerner <twoerner@gmail.com> --- v3 changes: - change the OVERRIDE mechanism from a class to a config - fix the required features check to include an OVERRIDE - use a systemd mount unit for the /data partition - abd-partition recipe cleanup: - remove extraneous FILESEXTRAPATHS - remove OVERRIDES, this recipe will only be used with rauc - remove extraneous FILES:${PN} for ${sysconfdir} v2 changes: - add information/instructions to README - rauc-conf cleanup: - remove ca.cert.pem from SRC_URI, it's already in parent - rename systemd.conf.in to system.conf so the parent handles it - process the system.conf file as a prepend, leaving it for the parent to manage - use walrus operator with THISDIR - break out the systemd repart config files into their own recipe so they can be updated without triggering a full rebuild of systemd (and its dependents) - class cleanup: - update the classes so they have only 1 job (each) - rename the classes to reflect their jobs - update recipes/configs to use the new classes --- README | 18 +++++ .../rk-rauc-demo-features-check.bbclass | 8 ++ conf/layer.conf | 4 + conf/machine/include/rockchip-rauc.inc | 4 + conf/machine/include/rockchip-wic.inc | 2 + .../recipes-bsp/u-boot/files/boot.cmd.in | 51 ++++++++++++ .../recipes-bsp/u-boot/files/uboot-rauc.cfg | 8 ++ .../recipes-bsp/u-boot/u-boot_%.bbappend | 26 ++++++ .../base-files/base-files_%.bbappend | 2 + .../recipes-core/base-files/files/fstab | 5 ++ .../rauc-bundles/files/development-1.cert.pem | 80 +++++++++++++++++++ .../rauc-bundles/files/development-1.key.pem | 28 +++++++ .../rauc-bundles/rockchip-rauc-bundle.bb | 14 ++++ .../recipes-core/rauc/files/ca.cert.pem | 80 +++++++++++++++++++ .../recipes-core/rauc/files/system.conf | 17 ++++ .../recipes-core/rauc/rauc-conf.bbappend | 7 ++ .../recipes-core/systemd/abd-partition.bb | 26 ++++++ .../systemd/files/25-rootfsA.conf | 4 + .../systemd/files/35-rootfsB.conf | 7 ++ .../recipes-core/systemd/files/45-data.conf | 6 ++ .../recipes-core/systemd/files/data.mount | 10 +++ .../recipes-core/systemd/systemd_%.bbappend | 3 + 22 files changed, 410 insertions(+) create mode 100644 classes-recipe/rk-rauc-demo-features-check.bbclass create mode 100644 conf/machine/include/rockchip-rauc.inc create mode 100644 dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/files/boot.cmd.in create mode 100644 dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/files/uboot-rauc.cfg create mode 100644 dynamic-layers/rk-rauc-demo/recipes-bsp/u-boot/u-boot_%.bbappend create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/base-files/base-files_%.bbappend create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/base-files/files/fstab create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/files/development-1.cert.pem create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/files/development-1.key.pem create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc-bundles/rockchip-rauc-bundle.bb create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/ca.cert.pem create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc/files/system.conf create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/rauc/rauc-conf.bbappend create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/abd-partition.bb create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/25-rootfsA.conf create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/35-rootfsB.conf create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/45-data.conf create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/files/data.mount create mode 100644 dynamic-layers/rk-rauc-demo/recipes-core/systemd/systemd_%.bbappend