[OE-core] [PATCH v8 3/3] kernel-devicetree.bbclass: Add support to generate append to kernel

André Draszik git at andred.net
Thu Sep 14 10:19:55 UTC 2017


On Tue, 2017-09-12 at 17:36 -0300, Otavio Salvador wrote:
> The are use cases where the Device Tree appended to the kernel is
> convinient, so we generate the bundle concatenating the kernel (and
> potentionally the initramfs) and the Device Tree binaries.
> 
> To enable it, set KERNEL_DEVICETREE_BUNDLE variable to '1'
> 
> Signed-off-by: Otavio Salvador <otavio at ossystems.com.br>
> ---
> 
> Changes in v8:
> - rework append support to support ARM and MIPS (obi)
> 
> Changes in v7:
> - simplified code
> - rename bundle to use .bin extension
> 
> Changes in v6: None
> Changes in v5:
> - add support for initramfs bundle
> 
> Changes in v4:
> - new patch
> 
> Changes in v3: None
> Changes in v2: None
> 
>  meta/classes/kernel-devicetree.bbclass | 62
> +++++++++++++++++++++++++++++++++-
>  1 file changed, 61 insertions(+), 1 deletion(-)
> 
> diff --git a/meta/classes/kernel-devicetree.bbclass b/meta/classes/kernel-
> devicetree.bbclass
> index 8723f24212..c618594c96 100644
> --- a/meta/classes/kernel-devicetree.bbclass
> +++ b/meta/classes/kernel-devicetree.bbclass
> @@ -1,6 +1,13 @@
>  # Support for device tree generation
> -PACKAGES_append = " kernel-devicetree"
> +PACKAGES_append = " \
> +    kernel-devicetree \
> +    ${@['kernel-image-zimage-bundle',
> ''][d.getVar('KERNEL_DEVICETREE_BUNDLE') != '1']} \
> +"
>  FILES_kernel-devicetree = "/${KERNEL_IMAGEDEST}/*.dtb
> /${KERNEL_IMAGEDEST}/*.dtbo"
> +FILES_kernel-image-zimage-bundle = "/${KERNEL_IMAGEDEST}/zImage-
> *.dtb.bin"
> +
> +# Generate kernel+devicetree bundle
> +KERNEL_DEVICETREE_BUNDLE ?= "0"
>  
>  normalize_dtb () {
>  	DTB="$1"
> @@ -20,6 +27,38 @@ get_real_dtb_path_in_kernel () {
>  	echo "${DTB_PATH}"
>  }
>  
> +
> +do_configure_devicetree() {
> +	if [ "${KERNEL_DEVICETREE_BUNDLE}" = "1" ]; then
> +		if echo ${KERNEL_IMAGETYPE_FOR_MAKE} | grep -q 'zImage';
> then
> +			case "${ARCH}" in
> +				"arm")
> +				config="${B}/.config"
> +				if ! grep -q 'CONFIG_ARM_APPENDED_DTB=y'
> $config; then
> +					bbwarn 'CONFIG_ARM_APPENDED_DTB
> is NOT enabled in the kernel. Enabling it to allow the kernel to boot with
> the Device Tree appended!'
> +					sed -i "/CONFIG_ARM_APPENDED_DTB[
> =]/d" $config
> +					echo "CONFIG_ARM_APPENDED_DTB=y"
> >> $config
> +					echo "#
> CONFIG_ARM_ATAG_DTB_COMPAT is not set" >> $config
> +				fi
> +				;;
> +				"mips")
> +				config="${B}/.config"
> +				if ! grep -q 'CONFIG_MIPS_APPENDED_DTB=y'
> $config; then

Looking more into this, this Kconfig option doesn't actually exist on mips.
Instead, it has these three related options:
CONFIG_MIPS_NO_APPENDED_DTB
CONFIG_MIPS_ELF_APPENDED_DTB
CONFIG_MIPS_RAW_APPENDED_DTB

I've never used this, but I think you'd have to check for
CONFIG_MIPS_RAW_APPENDED_DTB=y for similar semantics to arm.

And the KERNEL_IMAGETYPE_FOR_MAKE can be either vmlinux.bin, or vmlinuz.bin
(where vmlinuz.bin is similar to the arm zImage).

i.e.:
cat vmlinux.bin <filename>.dtb > vmlinux_w_dtb
cat vmlinuz.bin <filename>.dtb > vmlinuz_w_dtb


To also support CONFIG_MIPS_ELF_APPENDED_DTB, you'd have to

objcopy --update-section .appended_dtb=<filename>.dtb vmlinux

instead.


All untested.


Cheers,
Andre'




More information about the Openembedded-core mailing list