diff mbox series

[meta-rockchip,v4] fitimage rework

Message ID 20250626031810.35828-1-twoerner@gmail.com
State New
Headers show
Series [meta-rockchip,v4] fitimage rework | expand

Commit Message

Trevor Woerner June 26, 2025, 3:18 a.m. UTC
oe-core has completely re-written the fitImage support starting roughly at
commit [1], update meta-rockchip to match.

Most of the MACHINEs in meta-rockchip use a fitImage for the kernel, but
some don't. Create a boolean variable (RK_KERNEL_FITIMAGE), enabled by
default, to keep track of which ones do and which ones don't. Use this
variable to decide how to configure various image-related fields.

Build tested with all meta-rockchip MACHINEs both with and without RAUC.

Run tested on the following with RAUC configured:
	- nanopi-m4b
	- nanopi-r2s
	- radxa-zero-3e
	- rock-pi-4b
	- rock-pi-e
	- rock-pi-s

Run tested on the following without RAUC:
	- radxa-zero-3e
	- rock-pi-e
	- rock-pi-s

[1] oe-core: 3442d9297dca ("oe-selftest: fitimage: test external dtb")
Signed-off-by: Trevor Woerner <twoerner@gmail.com>
---
changes in v4:
- rename the variable to RK_KERNEL_FITIMAGE
- update the README, variable name, and comments to emphasize the fitImage
  is kernel-related (and does not pertain to other fit-able components)
- use ?= so the RK_KERNEL_FITIMAGE value can be changed by the user
- the location of the RK_KERNEL_FITIMAGE variable is not arbitrary (as
  it may be for other variables) add a comment to this effect
- re-organize the fit and non-fit values to do away with adding two new
  files (rockchip-fitimage.inc and rockchip-unfitimage.inc) so as to add
  only one (rockchip-fitimage.inc); set all non-fit values as defaults
  to be over-ridden in the rockchip-fitimage.inc file as required

changes in v3:
- remove the 2nd MACHINE_ESSENTIAL_EXTRA_RDEPENDS from the
  rockchip-extlinux.inc file and place the relevant portions into either
  the rockchip-fitimage.inc or rockchip-unfitimage.inc files as
  appropriate

changes in v2:
- remove the ",False" from the bb.utils.to_boolean() calls
- add information on new param (RK_FITIMAGE) to README
- re-structure the fitimage require so it is less invasive in
  MACHINE.conf files
---
 README                                     | 10 ++++++++++
 conf/machine/include/px30.inc              |  2 --
 conf/machine/include/rk3066.inc            |  2 +-
 conf/machine/include/rk3188.inc            |  2 +-
 conf/machine/include/rk3288.inc            |  2 +-
 conf/machine/include/rk3308.inc            |  2 --
 conf/machine/include/rk3328.inc            |  2 --
 conf/machine/include/rk3399.inc            |  2 --
 conf/machine/include/rk3566.inc            |  2 --
 conf/machine/include/rk3568.inc            |  2 --
 conf/machine/include/rk3588s.inc           |  2 --
 conf/machine/include/rockchip-defaults.inc |  7 +++++++
 conf/machine/include/rockchip-extlinux.inc |  7 +++----
 conf/machine/include/rockchip-fitimage.inc |  5 +++++
 14 files changed, 28 insertions(+), 21 deletions(-)
 create mode 100644 conf/machine/include/rockchip-fitimage.inc

Comments

Quentin Schulz June 27, 2025, 10:34 a.m. UTC | #1
Hi Trevor,

On 6/26/25 5:18 AM, Trevor Woerner via lists.yoctoproject.org wrote:

[...]

> diff --git a/conf/machine/include/rockchip-defaults.inc b/conf/machine/include/rockchip-defaults.inc
> index 85ec7b944d1d..fc8930635fbe 100644
> --- a/conf/machine/include/rockchip-defaults.inc
> +++ b/conf/machine/include/rockchip-defaults.inc
> @@ -1,9 +1,16 @@
>   # meta-rockchip default settings
>   MACHINEOVERRIDES =. "${@bb.utils.contains('ROCKCHIP_CLOSED_TPL', '1', 'closed-tpl:', '', d)}"
>   MACHINEOVERRIDES =. "rockchip:"
> +
>   # kernel
> +# RK_KERNEL_FITIMAGE needs to be set before the next "require ..."
> +RK_KERNEL_FITIMAGE ?= "True"
>   PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
>   KCONFIG_MODE ?= "alldefconfig"
> +KERNEL_IMAGETYPE ??= "zImage"

Any reason for having ??= instead of ?= here? I would assume that ?= 
would be enough? Can leave as is though.

> +MACHINE_ESSENTIAL_EXTRA_RDEPENDS_KERNEL += "kernel-devicetree"

Any reason for the += here? I believe = should be fine? Can leave as is 
though.

Looks ok to me otherwise!

FYI, I'm on PTO for the next two weeks and won't have the time to test 
this today, do what you will with this info :)

Cheers,
Quentin
Trevor Woerner June 27, 2025, 2:57 p.m. UTC | #2
On Wed 2025-06-25 @ 11:18:10 PM, Trevor Woerner wrote:
> oe-core has completely re-written the fitImage support starting roughly at
> commit [1], update meta-rockchip to match.
> 
> Most of the MACHINEs in meta-rockchip use a fitImage for the kernel, but
> some don't. Create a boolean variable (RK_KERNEL_FITIMAGE), enabled by
> default, to keep track of which ones do and which ones don't. Use this
> variable to decide how to configure various image-related fields.
> 
> Build tested with all meta-rockchip MACHINEs both with and without RAUC.
> 
> Run tested on the following with RAUC configured:
> 	- nanopi-m4b
> 	- nanopi-r2s
> 	- radxa-zero-3e
> 	- rock-pi-4b
> 	- rock-pi-e
> 	- rock-pi-s
> 
> Run tested on the following without RAUC:
> 	- radxa-zero-3e
> 	- rock-pi-e
> 	- rock-pi-s
> 
> [1] oe-core: 3442d9297dca ("oe-selftest: fitimage: test external dtb")
> Signed-off-by: Trevor Woerner <twoerner@gmail.com>
> ---
> changes in v4:
> - rename the variable to RK_KERNEL_FITIMAGE
> - update the README, variable name, and comments to emphasize the fitImage
>   is kernel-related (and does not pertain to other fit-able components)
> - use ?= so the RK_KERNEL_FITIMAGE value can be changed by the user
> - the location of the RK_KERNEL_FITIMAGE variable is not arbitrary (as
>   it may be for other variables) add a comment to this effect
> - re-organize the fit and non-fit values to do away with adding two new
>   files (rockchip-fitimage.inc and rockchip-unfitimage.inc) so as to add
>   only one (rockchip-fitimage.inc); set all non-fit values as defaults
>   to be over-ridden in the rockchip-fitimage.inc file as required
> 
> changes in v3:
> - remove the 2nd MACHINE_ESSENTIAL_EXTRA_RDEPENDS from the
>   rockchip-extlinux.inc file and place the relevant portions into either
>   the rockchip-fitimage.inc or rockchip-unfitimage.inc files as
>   appropriate
> 
> changes in v2:
> - remove the ",False" from the bb.utils.to_boolean() calls
> - add information on new param (RK_FITIMAGE) to README
> - re-structure the fitimage require so it is less invasive in
>   MACHINE.conf files
> ---
>  README                                     | 10 ++++++++++
>  conf/machine/include/px30.inc              |  2 --
>  conf/machine/include/rk3066.inc            |  2 +-
>  conf/machine/include/rk3188.inc            |  2 +-
>  conf/machine/include/rk3288.inc            |  2 +-
>  conf/machine/include/rk3308.inc            |  2 --
>  conf/machine/include/rk3328.inc            |  2 --
>  conf/machine/include/rk3399.inc            |  2 --
>  conf/machine/include/rk3566.inc            |  2 --
>  conf/machine/include/rk3568.inc            |  2 --
>  conf/machine/include/rk3588s.inc           |  2 --
>  conf/machine/include/rockchip-defaults.inc |  7 +++++++
>  conf/machine/include/rockchip-extlinux.inc |  7 +++----
>  conf/machine/include/rockchip-fitimage.inc |  5 +++++
>  14 files changed, 28 insertions(+), 21 deletions(-)
>  create mode 100644 conf/machine/include/rockchip-fitimage.inc

Applied (with some tweaks discussed on IRC) to meta-rockchip, master branch.
Thanks for the review!
diff mbox series

Patch

diff --git a/README b/README
index 9672c6ab8d5b..985101b1b5c3 100644
--- a/README
+++ b/README
@@ -159,6 +159,16 @@  Notes:
 	compatible (see Rockchip Media Process Platform (MPP) and
 	downstream gstreamer-rockchip plugin for those kernels).
 
+  RK_KERNEL_FITIMAGE
+
+	When generating an image, the BSP code needs to know whether or not to
+	package the kernel pieces as a fitImage or not. By default it is assumed
+	most MACHINEs will use the fitImage format. Otherwise disable the
+	RK_KERNEL_FITIMAGE variable boolean to indicate otherwise.
+
+	NOTE: this variable must be set before any include/require in the
+	      machine configuration file
+
 U-Boot Environment:
 ------------------
 	In order to configure U-Boot to be able to store its environment into the
diff --git a/conf/machine/include/px30.inc b/conf/machine/include/px30.inc
index 8173cb19be2c..1997f6fe6a9d 100644
--- a/conf/machine/include/px30.inc
+++ b/conf/machine/include/px30.inc
@@ -11,8 +11,6 @@  require conf/machine/include/arm/armv8a/tune-cortexa35.inc
 require conf/machine/include/rockchip-wic.inc
 
 KBUILD_DEFCONFIG ?= "defconfig"
-KERNEL_CLASSES = "kernel-fitimage"
-KERNEL_IMAGETYPE ?= "fitImage"
 
 TFA_PLATFORM = "px30"
 TFA_BUILD_TARGET = "bl31"
diff --git a/conf/machine/include/rk3066.inc b/conf/machine/include/rk3066.inc
index a898309bbf88..2829a68431a8 100644
--- a/conf/machine/include/rk3066.inc
+++ b/conf/machine/include/rk3066.inc
@@ -2,6 +2,7 @@ 
 # Released under the MIT license (see COPYING.MIT for the terms)
 
 SOC_FAMILY = "rk3066"
+RK_KERNEL_FITIMAGE ?= "False"
 
 require conf/machine/include/soc-family.inc
 require conf/machine/include/rockchip-defaults.inc
@@ -11,6 +12,5 @@  SERIAL_CONSOLES = "115200;ttyS2"
 
 KBUILD_DEFCONFIG = "multi_v7_defconfig"
 KERNEL_FEATURES:append:rk3066 = " bsp/rockchip/remove-non-rockchip-arch-arm.scc"
-KERNEL_IMAGETYPE ?= "zImage"
 
 ENABLE_STATELESS_VPU_GST ?= "1"
diff --git a/conf/machine/include/rk3188.inc b/conf/machine/include/rk3188.inc
index 554d4f1c904d..1af745524bfa 100644
--- a/conf/machine/include/rk3188.inc
+++ b/conf/machine/include/rk3188.inc
@@ -2,6 +2,7 @@ 
 # Released under the MIT license (see COPYING.MIT for the terms)
 
 SOC_FAMILY  = "rk3188"
+RK_KERNEL_FITIMAGE ?= "False"
 
 require conf/machine/include/soc-family.inc
 require conf/machine/include/rockchip-defaults.inc
@@ -11,6 +12,5 @@  SERIAL_CONSOLES = "115200;ttyFIQ0"
 
 KBUILD_DEFCONFIG = "multi_v7_defconfig"
 KERNEL_FEATURES:append:rk3188 = " bsp/rockchip/remove-non-rockchip-arch-arm.scc"
-KERNEL_IMAGETYPE ?= "zImage"
 
 ENABLE_STATELESS_VPU_GST ?= "1"
diff --git a/conf/machine/include/rk3288.inc b/conf/machine/include/rk3288.inc
index 06fda69a3eb7..a648b440105f 100644
--- a/conf/machine/include/rk3288.inc
+++ b/conf/machine/include/rk3288.inc
@@ -2,6 +2,7 @@ 
 # Released under the MIT license (see COPYING.MIT for the terms)
 
 SOC_FAMILY = "rk3288"
+RK_KERNEL_FITIMAGE ?= "False"
 
 require conf/machine/include/soc-family.inc
 require conf/machine/include/rockchip-defaults.inc
@@ -11,7 +12,6 @@  SERIAL_CONSOLES = "115200;ttyS2"
 
 KBUILD_DEFCONFIG ?= "multi_v7_defconfig"
 KERNEL_FEATURES:append:rk3288 = " bsp/rockchip/remove-non-rockchip-arch-arm.scc"
-KERNEL_IMAGETYPE ?= "zImage"
 
 UBOOT_SUFFIX ?= "bin"
 
diff --git a/conf/machine/include/rk3308.inc b/conf/machine/include/rk3308.inc
index d30901f15b4f..6876564fbcb2 100644
--- a/conf/machine/include/rk3308.inc
+++ b/conf/machine/include/rk3308.inc
@@ -13,8 +13,6 @@  SERIAL_CONSOLES = "1500000;ttyS0"
 
 KBUILD_DEFCONFIG ?= "defconfig"
 KERNEL_FEATURES:append:rk3308 = " bsp/rockchip/remove-non-rockchip-arch-arm64.scc"
-KERNEL_CLASSES = "kernel-fitimage"
-KERNEL_IMAGETYPE ?= "fitImage"
 
 UBOOT_SUFFIX ?= "itb"
 UBOOT_ENTRYPOINT ?= "0x06000000"
diff --git a/conf/machine/include/rk3328.inc b/conf/machine/include/rk3328.inc
index e6f810dcd2ca..2fe2710399b1 100644
--- a/conf/machine/include/rk3328.inc
+++ b/conf/machine/include/rk3328.inc
@@ -12,8 +12,6 @@  require conf/machine/include/rockchip-wic.inc
 
 KBUILD_DEFCONFIG ?= "defconfig"
 KERNEL_FEATURES:append:rk3328 = " bsp/rockchip/remove-non-rockchip-arch-arm64.scc"
-KERNEL_CLASSES = "kernel-fitimage"
-KERNEL_IMAGETYPE ?= "fitImage"
 
 TFA_PLATFORM = "rk3328"
 TFA_BUILD_TARGET = "bl31"
diff --git a/conf/machine/include/rk3399.inc b/conf/machine/include/rk3399.inc
index cd1be49064ed..8d30cf7e460b 100644
--- a/conf/machine/include/rk3399.inc
+++ b/conf/machine/include/rk3399.inc
@@ -12,8 +12,6 @@  require conf/machine/include/rockchip-wic.inc
 
 KBUILD_DEFCONFIG ?= "defconfig"
 KERNEL_FEATURES:append:rk3399 = " bsp/rockchip/remove-non-rockchip-arch-arm64.scc"
-KERNEL_CLASSES = "kernel-fitimage"
-KERNEL_IMAGETYPE ?= "fitImage"
 
 TFA_PLATFORM = "rk3399"
 TFA_BUILD_TARGET = "bl31"
diff --git a/conf/machine/include/rk3566.inc b/conf/machine/include/rk3566.inc
index 6386ec7eb51c..5b65ad7d4a47 100644
--- a/conf/machine/include/rk3566.inc
+++ b/conf/machine/include/rk3566.inc
@@ -11,8 +11,6 @@  require conf/machine/include/rockchip-wic.inc
 
 KBUILD_DEFCONFIG ?= "defconfig"
 KERNEL_FEATURES:append:rk3566 = " bsp/rockchip/remove-non-rockchip-arch-arm64.scc"
-KERNEL_CLASSES = "kernel-fitimage"
-KERNEL_IMAGETYPE ?= "fitImage"
 
 PREFERRED_PROVIDER_trusted-firmware-a = "rockchip-rkbin-tf-a"
 PREFERRED_PROVIDER_optee-os = "rockchip-rkbin-optee-os"
diff --git a/conf/machine/include/rk3568.inc b/conf/machine/include/rk3568.inc
index bcf9dd8b0f44..ad3952de074c 100644
--- a/conf/machine/include/rk3568.inc
+++ b/conf/machine/include/rk3568.inc
@@ -11,8 +11,6 @@  require conf/machine/include/rockchip-wic.inc
 
 KBUILD_DEFCONFIG ?= "defconfig"
 KERNEL_FEATURES:append:rk3568 = " bsp/rockchip/remove-non-rockchip-arch-arm64.scc"
-KERNEL_CLASSES = "kernel-fitimage"
-KERNEL_IMAGETYPE ?= "fitImage"
 
 PREFERRED_PROVIDER_trusted-firmware-a = "rockchip-rkbin-tf-a"
 PREFERRED_PROVIDER_optee-os = "rockchip-rkbin-optee-os"
diff --git a/conf/machine/include/rk3588s.inc b/conf/machine/include/rk3588s.inc
index 6ec344abae5b..203b97c6353c 100644
--- a/conf/machine/include/rk3588s.inc
+++ b/conf/machine/include/rk3588s.inc
@@ -10,8 +10,6 @@  require conf/machine/include/rockchip-wic.inc
 
 KBUILD_DEFCONFIG ?= "defconfig"
 KERNEL_FEATURES:append:rk3588s = " bsp/rockchip/remove-non-rockchip-arch-arm64.scc"
-KERNEL_CLASSES = "kernel-fitimage"
-KERNEL_IMAGETYPE ?= "fitImage"
 
 PREFERRED_PROVIDER_trusted-firmware-a = "rockchip-rkbin-tf-a"
 PREFERRED_PROVIDER_optee-os = "rockchip-rkbin-optee-os"
diff --git a/conf/machine/include/rockchip-defaults.inc b/conf/machine/include/rockchip-defaults.inc
index 85ec7b944d1d..fc8930635fbe 100644
--- a/conf/machine/include/rockchip-defaults.inc
+++ b/conf/machine/include/rockchip-defaults.inc
@@ -1,9 +1,16 @@ 
 # meta-rockchip default settings
 MACHINEOVERRIDES =. "${@bb.utils.contains('ROCKCHIP_CLOSED_TPL', '1', 'closed-tpl:', '', d)}"
 MACHINEOVERRIDES =. "rockchip:"
+
 # kernel
+# RK_KERNEL_FITIMAGE needs to be set before the next "require ..."
+RK_KERNEL_FITIMAGE ?= "True"
 PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
 KCONFIG_MODE ?= "alldefconfig"
+KERNEL_IMAGETYPE ??= "zImage"
+MACHINE_ESSENTIAL_EXTRA_RDEPENDS_KERNEL += "kernel-devicetree"
+MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "${MACHINE_ESSENTIAL_EXTRA_RDEPENDS_KERNEL}"
+require ${@ 'conf/machine/include/rockchip-fitimage.inc' if bb.utils.to_boolean(d.getVar('RK_KERNEL_FITIMAGE')) else ''}
 
 # xserver
 XSERVER = " \
diff --git a/conf/machine/include/rockchip-extlinux.inc b/conf/machine/include/rockchip-extlinux.inc
index fddab735bbf7..20f339675483 100644
--- a/conf/machine/include/rockchip-extlinux.inc
+++ b/conf/machine/include/rockchip-extlinux.inc
@@ -13,13 +13,12 @@  NONFITDT ?= "${@d.getVar('KERNEL_DEVICETREE').split()[0].split('/')[1]}"
 
 UBOOT_EXTLINUX ?= "1"
 UBOOT_EXTLINUX_ROOT ?= "root=PARTLABEL=rootfsA"
-UBOOT_EXTLINUX_FDTDIR ?= "${@bb.utils.contains('KERNEL_IMAGETYPE', 'fitImage', '', '/boot', d)}"
-UBOOT_EXTLINUX_FDT ?= "${@bb.utils.contains('KERNEL_IMAGETYPE', 'fitImage', '', '/boot/${NONFITDT}', d)}"
+UBOOT_EXTLINUX_FDTDIR ?= "${@ '' if bb.utils.to_boolean(d.getVar('RK_KERNEL_FITIMAGE')) else '/boot'}"
+UBOOT_EXTLINUX_FDT ?= "${@ '' if bb.utils.to_boolean(d.getVar('RK_KERNEL_FITIMAGE')) else '/boot/${NONFITDT}'}"
 UBOOT_EXTLINUX_CONSOLE ?= "earlycon console=tty1 console=${RK_CONSOLE_DEVICE},${RK_CONSOLE_BAUD}n8"
 UBOOT_EXTLINUX_KERNEL_ARGS ?= "rootwait rw rootfstype=ext4"
-UBOOT_EXTLINUX_KERNEL_IMAGE ?= "/boot/${KERNEL_IMAGETYPE}"
+UBOOT_EXTLINUX_KERNEL_IMAGE ?= "/boot/${@ 'fitImage' if bb.utils.to_boolean(d.getVar('RK_KERNEL_FITIMAGE')) else '${KERNEL_IMAGETYPE}'}"
 UBOOT_EXTLINUX_LABELS ?= "default"
 UBOOT_EXTLINUX_MENU_DESCRIPTION:default ?= "${MACHINE}"
 
 MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "u-boot-extlinux"
-MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "kernel-image ${@bb.utils.contains('KERNEL_IMAGETYPE', 'fitImage', '', 'kernel-devicetree', d)}"
diff --git a/conf/machine/include/rockchip-fitimage.inc b/conf/machine/include/rockchip-fitimage.inc
new file mode 100644
index 000000000000..b09a9fe40825
--- /dev/null
+++ b/conf/machine/include/rockchip-fitimage.inc
@@ -0,0 +1,5 @@ 
+KERNEL_CLASSES += "kernel-fit-extra-artifacts"
+KERNEL_IMAGETYPE ?= "Image"
+RRECOMMENDS:${KERNEL_PACKAGE_NAME}-base = ""
+KERNEL_DEPLOY_DEPEND ?= "linux-yocto-fitimage:do_deploy"
+MACHINE_ESSENTIAL_EXTRA_RDEPENDS_KERNEL = "linux-yocto-fitimage"