From e0deb8b0bdf82feb9e8640837eb7ef6e4bc2c7a9 Mon Sep 17 00:00:00 2001 From: Christophe Priouzeau Date: Tue, 27 Oct 2020 12:14:48 +0100 Subject: [PATCH] Configure extlinux.conf file generation for kernel fit image Change-Id: I579efe79781803f383369c887b128a33cca9155b --- classes/extlinuxconf-stm32mp.bbclass | 44 +++++++++++++-- classes/flashlayout-stm32mp.bbclass | 4 +- .../include/st-machine-common-stm32mp.inc | 22 ++++++-- .../st-machine-extlinux-config-stm32mp.inc | 53 +++++++++---------- conf/machine/stm32mp1-eval.conf | 1 + 5 files changed, 85 insertions(+), 39 deletions(-) diff --git a/classes/extlinuxconf-stm32mp.bbclass b/classes/extlinuxconf-stm32mp.bbclass index e06d458..1d2f081 100644 --- a/classes/extlinuxconf-stm32mp.bbclass +++ b/classes/extlinuxconf-stm32mp.bbclass @@ -71,6 +71,9 @@ UBOOT_EXTLINUX_TARGETS ?= "" +# Configure FIT kernel image for extlinux file creation +UBOOT_EXTLINUX_FIT ??= "0" + UBOOT_EXTLINUX_CONSOLE ??= "console=${console}" UBOOT_EXTLINUX_LABELS ??= "linux" UBOOT_EXTLINUX_FDT ??= "" @@ -136,7 +139,13 @@ def create_extlinux_file(cfile, labels, data): fdt = localdata.getVar('UBOOT_EXTLINUX_FDT') - if fdt: + fit = localdata.getVar('UBOOT_EXTLINUX_FIT') + + if fit == '1': + # Set specific kernel configuration if 'fit' feature is enabled + kernel_image = kernel_image + '#conf@' + label + '.dtb' + cfgfile.write('LABEL %s\n\tKERNEL %s\n' % (menu_description, kernel_image)) + elif fdt: cfgfile.write('LABEL %s\n\tKERNEL %s\n\tFDT %s\n' % (menu_description, kernel_image, fdt)) elif fdtdir: @@ -172,6 +181,9 @@ python do_create_multiextlinux_config() { # an override for that target will be added back in while we're processing that target keep_overrides = list(filter(lambda x: x not in target_overrides, default_overrides)) + # Init FIT parameter + fit_config = d.getVar('UBOOT_EXTLINUX_FIT') + for target in targets.split(): bb.note("Loop for '%s' target" % target) @@ -201,9 +213,12 @@ python do_create_multiextlinux_config() { # Create extlinux folder bb.utils.mkdirhier(os.path.dirname(cfile)) - # Go for config file creation - bb.note("Create %s/extlinux.conf file for %s labels" % (subdir, labels)) - create_extlinux_file(cfile, labels, d) + # Standard extlinux file creation + if fit_config == '1': + bb.note("UBOOT_EXTLINUX_FIT set to '1'. Skip standard extlinux file creation") + else: + bb.note("Create %s/extlinux.conf file for %s labels" % (subdir, labels)) + create_extlinux_file(cfile, labels, d) # Manage UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG extra_extlinuxtargetconfigflag = d.getVarFlags('UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG') @@ -216,6 +231,25 @@ python do_create_multiextlinux_config() { # Init extra config vars: extra_extlinuxlabels = "" extra_cfile = "" + # Specific case for 'fit' to automate configuration with device tree name + if fit_config == '1': + # Override current 'labels' with 'config' from UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG + # Under such configuration, UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG should contain the + # list of supported device tree file (without '.dtb' suffix) to allow proper extlinux + # file creation for each device tree file. + bb.note(">>> Override default init to allow default extlinux file creation with %s config as extra label." % config) + labels = config + # Update extra config vars for this specific case: + extra_extlinuxlabels = labels + extra_cfile = os.path.join(d.getVar('B'), subdir , config + '_' + 'extlinux.conf') + # Configure dynamically the default menu configuration if there is no specific one configured + if d.getVar('UBOOT_EXTLINUX_DEFAULT_LABEL_%s' % config): + bb.note(">>> Specific configuration for UBOOT_EXTLINUX_DEFAULT_LABEL var detected for %s label: %s" % (config, d.getVar('UBOOT_EXTLINUX_DEFAULT_LABEL_%s' % config))) + else: + bb.note(">>> Set UBOOT_EXTLINUX_DEFAULT_LABEL to %s" % config) + d.setVar('UBOOT_EXTLINUX_DEFAULT_LABEL', config) + + # Append extra configuration if any for f, v in extra_extlinuxtargetconfigflag.items(): if config == f: bb.note(">>> Loop for '%s' extra target config." % config) @@ -238,7 +272,7 @@ do_create_multiextlinux_config[cleandirs] += "${B}" # Manage specific var dependency: # Because of local overrides within create_multiextlinux_config() function, we # need to make sure to add each variables to the vardeps list. -UBOOT_EXTLINUX_TARGET_VARS = "LABELS BOOTPREFIXES TIMEOUT DEFAULT_LABEL TARGETS_EXTRA_CONFIG" +UBOOT_EXTLINUX_TARGET_VARS = "FIT LABELS BOOTPREFIXES TIMEOUT DEFAULT_LABEL TARGETS_EXTRA_CONFIG" do_create_multiextlinux_config[vardeps] += "${@' '.join(['UBOOT_EXTLINUX_%s_%s' % (v, l) for v in d.getVar('UBOOT_EXTLINUX_TARGET_VARS').split() for l in d.getVar('UBOOT_EXTLINUX_TARGETS').split()])}" UBOOT_EXTLINUX_LABELS_VARS = "CONSOLE MENU_DESCRIPTION ROOT KERNEL_IMAGE FDTDIR FDT KERNEL_ARGS INITRD" UBOOT_EXTLINUX_LABELS_CONFIGURED = "${@" ".join(map(lambda t: "%s" % d.getVar("UBOOT_EXTLINUX_LABELS_%s" % t), d.getVar('UBOOT_EXTLINUX_TARGETS').split()))}" diff --git a/classes/flashlayout-stm32mp.bbclass b/classes/flashlayout-stm32mp.bbclass index 0736968..dfef992 100644 --- a/classes/flashlayout-stm32mp.bbclass +++ b/classes/flashlayout-stm32mp.bbclass @@ -352,7 +352,7 @@ def get_binaryname(labeltype, bootscheme, config, partition, d): bb.note('>>> Basename selected for %s: %s' % (binary_name, binary_name_base)) # Treat TF-A, TEE, U-BOOT and U-BOOT-SPL binary rename case - if re.match('^tf-a.*$', binary_name_base) or re.match('^u-boot.*$', binary_name_base) or re.match('^tee-.*$', binary_name_base): + if re.match('^tf-a.*$', binary_name_base) or re.match('^u-boot.*$', binary_name_base) or re.match('^tee-.*$', binary_name_base) or re.match('^zImage-.*$', binary_name_base): file_name, file_ext = os.path.splitext(binary_name) # Init binary_type to use from labeltype binary_type = labeltype + '-' + bootscheme @@ -373,6 +373,8 @@ def get_binaryname(labeltype, bootscheme, config, partition, d): # Append binary_type to binary name if re.match('^u-boot-spl.*$', binary_name_base): binary_name = file_name + file_ext + '-' + binary_type + elif re.match('^zImage.*$', binary_name_base): + binary_name = file_name + '-' + labeltype + file_ext else: binary_name = file_name + '-' + binary_type + file_ext diff --git a/conf/machine/include/st-machine-common-stm32mp.inc b/conf/machine/include/st-machine-common-stm32mp.inc index 89f0c51..b40d68e 100644 --- a/conf/machine/include/st-machine-common-stm32mp.inc +++ b/conf/machine/include/st-machine-common-stm32mp.inc @@ -38,6 +38,9 @@ MACHINE_FEATURES_append = " autoresize " # in our bootfs image instead of rootfs DISTRO_EXTRA_RRECOMMENDS_remove = "${@bb.utils.contains('COMBINED_FEATURES', 'autoresize', '${AUTORESIZE}', '', d)}" +# Use Little Kernel loader to program storage device +MACHINE_FEATURES += "kloader" + # Default serial consoles (TTYs) to enable using getty # Before kernel 4.18, serial console are ttyS3 but after is ttySTM0 SERIAL_CONSOLES = "115200;ttySTM0" @@ -169,7 +172,7 @@ EXTRA_IMAGECMD_ext4 = "-i 4096 -L ${@d.getVar('IMAGE_NAME_SUFFIX').replace('.', # Allow debug on the platform with gdb and openocd tools EXTRA_IMAGEDEPENDS_append = " \ - gdb-cross-arm \ + gdb-cross-${TARGET_ARCH} \ openocd-stm32mp-native \ stm32wrapper4dbg-native \ sdcard-raw-tools-native \ @@ -192,6 +195,11 @@ ST_TOOLS_FOR_SDK_PERL = " \ nativesdk-perl-module-encode-mime-header \ " +# For some scripts in kernel source code +ST_TOOLS_FOR_SDK_PERL = " \ + nativesdk-perl-module-file-spec-functions \ +" + ST_TOOLS_FOR_SDK_append = " ${ST_TOOLS_FOR_SDK_PERL} " # For support of python module for optee-os @@ -248,8 +256,8 @@ TOOLCHAIN_HOST_TASK_remove_task-populate-sdk-ext = " ${ST_DEPENDENCIES_BUILD_FOR # uninative: basic tools for devtool TOOLCHAIN_HOST_TASK_remove_pn-buildtools-tarball = " ${ST_TOOLS_FOR_SDK_PERL} " -TOOLCHAIN_TARGET_TASK += " bash-dev " -TOOLCHAIN_TARGET_TASK_remove_pn-buildtools-tarball = " bash-dev " +TOOLCHAIN_TARGET_TASK += " bash-dev libgomp-dev" +TOOLCHAIN_TARGET_TASK_remove_pn-buildtools-tarball = " bash-dev libgomp-dev" # ========================================================================= # Kernel @@ -258,15 +266,19 @@ TOOLCHAIN_TARGET_TASK_remove_pn-buildtools-tarball = " bash-dev " PREFERRED_PROVIDER_virtual/kernel = "linux-stm32mp" # Kernel image type -KERNEL_IMAGETYPE = "uImage" +KERNEL_IMAGETYPE = "${@bb.utils.contains('MACHINE_FEATURES', 'fit', 'fitImage', 'uImage', d)}" KERNEL_ALT_IMAGETYPE = " Image " KERNEL_ALT_IMAGETYPE =+ " vmlinux " -KERNEL_ALT_IMAGETYPE =+ " zImage " +KERNEL_ALT_IMAGETYPE =+ " ${@bb.utils.contains('MACHINE_FEATURES', 'fit', 'uImage', 'zImage', d)} " + # Maxsize authorized for uncompressed kernel binary # Define to null to skip kernel image size check KERNEL_IMAGE_MAXSIZE ?= "" +# For fit usage +UBOOT_ENTRYPOINT = "0xC0800000" + # List of device tree to install KERNEL_DEVICETREE ?= "${STM32MP_KERNEL_DEVICETREE}" STM32MP_KERNEL_DEVICETREE += "${@' '.join('%s.dtb' % d for d in '${STM32MP_DEVICETREE}'.split())}" diff --git a/conf/machine/include/st-machine-extlinux-config-stm32mp.inc b/conf/machine/include/st-machine-extlinux-config-stm32mp.inc index 28738e5..d76e9d0 100644 --- a/conf/machine/include/st-machine-extlinux-config-stm32mp.inc +++ b/conf/machine/include/st-machine-extlinux-config-stm32mp.inc @@ -2,10 +2,10 @@ # Define extlinux console for stm32mp machine UBOOT_EXTLINUX_CONSOLE = "console=${@d.getVar('SERIAL_CONSOLE').split()[1]},${@d.getVar('SERIAL_CONSOLE').split()[0]}" +# Define FIT option for extlinux file generation +UBOOT_EXTLINUX_FIT = "${@bb.utils.contains('MACHINE_FEATURES', 'fit', '1', '0', d)}" # Define default FDTDIR for all configs UBOOT_EXTLINUX_FDTDIR = "/" -# Define default MENU DESCRIPTION for all configs -UBOOT_EXTLINUX_MENU_DESCRIPTION = "OpenSTLinux" # Define default boot config for all config UBOOT_EXTLINUX_DEFAULT_LABEL ?= "OpenSTLinux" # Define default INITRD for all configs @@ -34,6 +34,13 @@ UBOOT_EXTLINUX_ROOT_target-sdcard = "root=PARTUUID=${DEVICE_PARTUUID_ROOTFS_SDCA UBOOT_EXTLINUX_ROOT_target-emmc = "root=PARTUUID=${DEVICE_PARTUUID_ROOTFS_EMMC}" # Define INITRD overrides for nand target UBOOT_EXTLINUX_INITRD_target-nand = "" + +# ----------------------------------------------------------------------------- +# Configure default labels +# ----------------------------------------------------------------------------- +# Define MENU_DESCRIPTION for rootfs label to default one to force selection +UBOOT_EXTLINUX_MENU_DESCRIPTION_rootfs = "OpenSTLinux" + # ----------------------------------------------------------------------------- # Append specific examples configs # ----------------------------------------------------------------------------- @@ -55,40 +62,30 @@ UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG_target-emmc += "${STM32MP_DT_FILES_EV}" UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG_target-nand += "${STM32MP_DT_FILES_ED}" UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG_target-nand += "${STM32MP_DT_FILES_EV}" # Define extra label configuration -UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG[stm32mp157c-dk2] += "stm32mp157c-dk2-a7" -UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG[stm32mp157c-dk2] += "stm32mp157c-dk2-m4" -UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG[stm32mp157c-ev1] += "stm32mp157c-ev1-a7" -UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG[stm32mp157c-ev1] += "stm32mp157c-ev1-m4" +UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG[stm32mp157c-dk2] += "stm32mp157c-dk2-a7-examples" +UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG[stm32mp157f-dk2] += "stm32mp157f-dk2-a7-examples" +UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG[stm32mp157c-ev1] += "stm32mp157c-ev1-a7-examples" +UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG[stm32mp157f-ev1] += "stm32mp157f-ev1-a7-examples" -UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG[stm32mp157f-dk2] += "stm32mp157f-dk2-a7" -UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG[stm32mp157f-dk2] += "stm32mp157f-dk2-m4" -UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG[stm32mp157f-ev1] += "stm32mp157f-ev1-a7" -UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG[stm32mp157f-ev1] += "stm32mp157f-ev1-m4" +UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG[stm32mp157c-dk2] += "stm32mp157c-dk2-m4-examples" +UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG[stm32mp157c-ev1] += "stm32mp157c-ev1-m4-examples" +UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG[stm32mp157f-dk2] += "stm32mp157f-dk2-m4-examples" +UBOOT_EXTLINUX_TARGETS_EXTRA_CONFIG[stm32mp157f-ev1] += "stm32mp157f-ev1-m4-examples" # ----------------------------------------------------------------------------- # Configure A7 examples labels # ----------------------------------------------------------------------------- -# Define MENU DESCRIPTION overrides for new A7 labels -UBOOT_EXTLINUX_MENU_DESCRIPTION_stm32mp157c-dk2-a7 = "stm32mp157c-dk2-a7-examples" -UBOOT_EXTLINUX_MENU_DESCRIPTION_stm32mp157c-ev1-a7 = "stm32mp157c-ev1-a7-examples" -UBOOT_EXTLINUX_MENU_DESCRIPTION_stm32mp157f-dk2-a7 = "stm32mp157f-dk2-a7-examples" -UBOOT_EXTLINUX_MENU_DESCRIPTION_stm32mp157f-ev1-a7 = "stm32mp157f-ev1-a7-examples" # Define FDT overrides for new A7 labels -UBOOT_EXTLINUX_FDT_stm32mp157c-dk2-a7 = "/stm32mp157c-dk2-a7-examples.dtb" -UBOOT_EXTLINUX_FDT_stm32mp157c-ev1-a7 = "/stm32mp157c-ev1-a7-examples.dtb" -UBOOT_EXTLINUX_FDT_stm32mp157f-dk2-a7 = "/stm32mp157f-dk2-a7-examples.dtb" -UBOOT_EXTLINUX_FDT_stm32mp157f-ev1-a7 = "/stm32mp157f-ev1-a7-examples.dtb" +UBOOT_EXTLINUX_FDT_stm32mp157c-dk2-a7-examples = "/stm32mp157c-dk2-a7-examples.dtb" +UBOOT_EXTLINUX_FDT_stm32mp157c-ev1-a7-examples = "/stm32mp157c-ev1-a7-examples.dtb" +UBOOT_EXTLINUX_FDT_stm32mp157f-dk2-a7-examples = "/stm32mp157f-dk2-a7-examples.dtb" +UBOOT_EXTLINUX_FDT_stm32mp157f-ev1-a7-examples = "/stm32mp157f-ev1-a7-examples.dtb" # ----------------------------------------------------------------------------- # Configure M4 examples labels # ----------------------------------------------------------------------------- -# Define MENU DESCRIPTION overrides for new A7 labels -UBOOT_EXTLINUX_MENU_DESCRIPTION_stm32mp157c-dk2-m4 = "stm32mp157c-dk2-m4-examples" -UBOOT_EXTLINUX_MENU_DESCRIPTION_stm32mp157c-ev1-m4 = "stm32mp157c-ev1-m4-examples" -UBOOT_EXTLINUX_MENU_DESCRIPTION_stm32mp157f-dk2-m4 = "stm32mp157f-dk2-m4-examples" -UBOOT_EXTLINUX_MENU_DESCRIPTION_stm32mp157f-ev1-m4 = "stm32mp157f-ev1-m4-examples" # Define FDT overrides for new M4 labels -UBOOT_EXTLINUX_FDT_stm32mp157c-dk2-m4 = "/stm32mp157c-dk2-m4-examples.dtb" -UBOOT_EXTLINUX_FDT_stm32mp157c-ev1-m4 = "/stm32mp157c-ev1-m4-examples.dtb" -UBOOT_EXTLINUX_FDT_stm32mp157f-dk2-m4 = "/stm32mp157f-dk2-m4-examples.dtb" -UBOOT_EXTLINUX_FDT_stm32mp157f-ev1-m4 = "/stm32mp157f-ev1-m4-examples.dtb" +UBOOT_EXTLINUX_FDT_stm32mp157c-dk2-m4-examples = "/stm32mp157c-dk2-m4-examples.dtb" +UBOOT_EXTLINUX_FDT_stm32mp157c-ev1-m4-examples = "/stm32mp157c-ev1-m4-examples.dtb" +UBOOT_EXTLINUX_FDT_stm32mp157f-dk2-m4-examples = "/stm32mp157f-dk2-m4-examples.dtb" +UBOOT_EXTLINUX_FDT_stm32mp157f-ev1-m4-examples = "/stm32mp157f-ev1-m4-examples.dtb" diff --git a/conf/machine/stm32mp1-eval.conf b/conf/machine/stm32mp1-eval.conf index 152fa2d..3441c1c 100644 --- a/conf/machine/stm32mp1-eval.conf +++ b/conf/machine/stm32mp1-eval.conf @@ -49,6 +49,7 @@ MACHINE_FEATURES += "watchdog" #MACHINE_FEATURES += "wifi" MACHINE_FEATURES += "${@'gpu' if d.getVar('ACCEPT_EULA_'+d.getVar('MACHINE')) == '1' else ''}" MACHINE_FEATURES += "m4copro" +MACHINE_FEATURES += "fit" # Bluetooth #BLUETOOTH_LIST += "linux-firmware-bluetooth-bcm4343"