From 09e72aa0f4b7a113cd5a1c97ef4c286d97ff28e1 Mon Sep 17 00:00:00 2001 From: Javier Viguera Date: Tue, 2 Dec 2014 16:49:12 +0100 Subject: [PATCH] meta-digi-arm: simplify flash images generation We inherited from DEL the requirement to build more than one flash image for the same rootfs contents depending on the EBS of the flash chip. Yocto does not have support to generate more than one flash image so we had to create functions in the image_types_digi bbclass to provide this feature. This commit removes that functionality and uses the standard yocto support to generate ubifs and jffs2 flash images. The way to customize the flash parameters is via EXTRA_IMAGECMD_jffs2 and MKUBIFS_ARGS variables. In our case those variables are already set depending on the different hardware variants. https://jira.digi.com/browse/DEL-232 Signed-off-by: Javier Viguera --- .../classes/image_types_digi.bbclass | 64 ------------------- meta-digi-arm/conf/machine/ccardimx28js.conf | 20 ++---- meta-digi-arm/conf/machine/ccimx51js.conf | 24 +++---- meta-digi-arm/conf/machine/ccimx53js.conf | 24 +++---- .../conf/machine/include/ccimx51.inc | 28 ++++---- 5 files changed, 36 insertions(+), 124 deletions(-) diff --git a/meta-digi-arm/classes/image_types_digi.bbclass b/meta-digi-arm/classes/image_types_digi.bbclass index bdc4f8382..48b3c2590 100644 --- a/meta-digi-arm/classes/image_types_digi.bbclass +++ b/meta-digi-arm/classes/image_types_digi.bbclass @@ -1,69 +1,5 @@ inherit image_types_fsl -# Dynamically calculate max LEB count for UBIFS images -FLASH_MLC = "${@max_leb_count(d)}" -def max_leb_count(d): - _mlc = [] - _flash_peb = d.getVar('FLASH_PEB', True) - _flash_psz = d.getVar('FLASH_PSZ', True) - for i in _flash_peb.split(','): - _mlc.append(str(next_power_of_2(int(_flash_psz)/int(i)) - 1)) - return ','.join(_mlc) - -# Return next power_of_2 bigger than passed argument -def next_power_of_2(n): - i = 1 - while (n > i): - i <<= 1 - return i - -# Return TRUE if jffs2 is not in IMAGE_FSTYPES -JFFS2_NOT_IN_FSTYPES = "${@jffs2_not_in_fstypes(d)}" -def jffs2_not_in_fstypes(d): - return str('jffs2' not in d.getVar('IMAGE_FSTYPES', True).split()).lower() - -IMAGE_CMD_jffs2() { - nimg="$(echo ${FLASH_PEB} | awk -F, '{print NF}')" - for i in $(seq 1 ${nimg}); do - peb_it="$(echo ${FLASH_PEB} | cut -d',' -f${i})" - # Do not use '-p (padding)' option. It breaks 'ccardimx28js' flash images [JIRA:DEL-218] - mkfs.jffs2 -n -e ${peb_it} -d ${IMAGE_ROOTFS} -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.${peb_it}.rootfs.jffs2 - ln -sf ${IMAGE_NAME}.${peb_it}.rootfs.jffs2 ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.${peb_it}.jffs2 - done -} - -# The CWD for this set of commads is DEPLOY_DIR_IMAGE so the paths are relative to it. -COMPRESS_CMD_sum() { - # 'nimg' is set in IMAGE_CMD_jffs2 (which is executed just before) - for i in $(seq 1 ${nimg}); do - peb_it="$(echo ${FLASH_PEB} | cut -d',' -f${i})" - sumtool -e ${peb_it} -i ${IMAGE_NAME}.${peb_it}.rootfs.jffs2 -o ${IMAGE_NAME}.${peb_it}.rootfs.jffs2.sum - ln -sf ${IMAGE_NAME}.${peb_it}.rootfs.jffs2.sum ${IMAGE_LINK_NAME}.${peb_it}.jffs2.sum - - # If 'jffs2' is not in IMAGE_FSTYPES remove the images and symlinks - if ${JFFS2_NOT_IN_FSTYPES}; then - rm -f ${IMAGE_NAME}.${peb_it}.rootfs.jffs2 ${IMAGE_LINK_NAME}.${peb_it}.jffs2 - fi - done - - # Create dummy file so the final script can remove it and not fail - if ${JFFS2_NOT_IN_FSTYPES}; then - touch ${IMAGE_NAME}.rootfs.jffs2 - fi -} - -IMAGE_CMD_ubifs() { - nimg="$(echo ${FLASH_PEB} | awk -F, '{print NF}')" - for i in $(seq 1 ${nimg}); do - mlc_it="$(echo ${FLASH_MLC} | cut -d',' -f${i})" - peb_it="$(echo ${FLASH_PEB} | cut -d',' -f${i})" - leb_it="$(echo ${FLASH_LEB} | cut -d',' -f${i})" - mio_it="$(echo ${FLASH_MIO} | cut -d',' -f${i})" - mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.${peb_it}.rootfs.ubifs -m ${mio_it} -e ${leb_it} -c ${mlc_it} ${MKUBIFS_ARGS} - ln -sf ${IMAGE_NAME}.${peb_it}.rootfs.ubifs ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.${peb_it}.ubifs - done -} - IMAGE_CMD_boot.vfat() { # # Image generation code for image type 'boot.vfat' diff --git a/meta-digi-arm/conf/machine/ccardimx28js.conf b/meta-digi-arm/conf/machine/ccardimx28js.conf index bcba80745..5b2a4a4e3 100644 --- a/meta-digi-arm/conf/machine/ccardimx28js.conf +++ b/meta-digi-arm/conf/machine/ccardimx28js.conf @@ -12,19 +12,7 @@ KERNEL_DEVICETREE = "imx28-${MACHINE}.dtb" # create a symlink to the correct device. SERIAL_CONSOLES = "115200;ttyS0" -################################################# -## Flash parameters for JFFS2 and UBIFS images ## -################################################# -# partition size (KiB) -# physical eraseblock size (KiB) -# logical eraseblock size (bytes) -# minimum input/output size (bytes) -# sub-page size (bytes) -# -# PEB, LEB, MIO and SUB might be a list of comma-separated values -# -FLASH_PSZ = "262144" -FLASH_PEB = "128" -FLASH_LEB = "126976" -FLASH_MIO = "2048" -FLASH_SUB = "-" +# FLASH parameters +MKUBIFS_ARGS ?= "-m 2048 -e 126976 -c 2047" +EXTRA_IMAGECMD_jffs2 ?= "-l -e 128 -n" +JFFS2_SUM_EXTRA_ARGS ?= "${EXTRA_IMAGECMD_jffs2}" diff --git a/meta-digi-arm/conf/machine/ccimx51js.conf b/meta-digi-arm/conf/machine/ccimx51js.conf index a750ea455..dd823fa28 100644 --- a/meta-digi-arm/conf/machine/ccimx51js.conf +++ b/meta-digi-arm/conf/machine/ccimx51js.conf @@ -6,19 +6,11 @@ include conf/machine/include/ccimx51.inc SERIAL_CONSOLES = "38400;ttymxc1" -################################################# -## Flash parameters for JFFS2 and UBIFS images ## -################################################# -# partition size (KiB) -# physical eraseblock size (KiB) -# logical eraseblock size (bytes) -# minimum input/output size (bytes) -# sub-page size (bytes) -# -# PEB, LEB, MIO and SUB might be a list of comma-separated values -# -FLASH_PSZ = "524288" -FLASH_PEB = "128,512" -FLASH_LEB = "129024,520192" -FLASH_MIO = "2048,4096" -FLASH_SUB = "512,1024" +# Per-variant FLASH parameters +MKUBIFS_ARGS ?= "-m 2048 -e 129024 -c 4095" +MKUBIFS_ARGS_agv4k ?= "-m 4096 -e 520192 -c 1023" +MKUBIFS_ARGS_eagv4k ?= "-m 4096 -e 520192 -c 1023" +EXTRA_IMAGECMD_jffs2 ?= "-l -e 128 -n" +EXTRA_IMAGECMD_jffs2_agv4k ?= "-l -e 512 -n" +EXTRA_IMAGECMD_jffs2_eagv4k ?= "-l -e 512 -n" +JFFS2_SUM_EXTRA_ARGS ?= "${EXTRA_IMAGECMD_jffs2}" diff --git a/meta-digi-arm/conf/machine/ccimx53js.conf b/meta-digi-arm/conf/machine/ccimx53js.conf index 11f2ceee8..e5cd575b6 100644 --- a/meta-digi-arm/conf/machine/ccimx53js.conf +++ b/meta-digi-arm/conf/machine/ccimx53js.conf @@ -7,19 +7,11 @@ include conf/machine/include/ccimx53.inc SERIAL_CONSOLES = "115200;ttymxc0" -################################################# -## Flash parameters for JFFS2 and UBIFS images ## -################################################# -# partition size (KiB) -# physical eraseblock size (KiB) -# logical eraseblock size (bytes) -# minimum input/output size (bytes) -# sub-page size (bytes) -# -# PEB, LEB, MIO and SUB might be a list of comma-separated values -# -FLASH_PSZ = "524288" -FLASH_PEB = "128,512" -FLASH_LEB = "129024,520192" -FLASH_MIO = "2048,4096" -FLASH_SUB = "512,1024" +# Per-variant FLASH parameters +MKUBIFS_ARGS ?= "-m 2048 -e 129024 -c 4095" +MKUBIFS_ARGS_4k ?= "-m 4096 -e 520192 -c 1023" +MKUBIFS_ARGS_e4k ?= "-m 4096 -e 520192 -c 1023" +EXTRA_IMAGECMD_jffs2 ?= "-l -e 128 -n" +EXTRA_IMAGECMD_jffs2_4k ?= "-l -e 512 -n" +EXTRA_IMAGECMD_jffs2_e4k ?= "-l -e 512 -n" +JFFS2_SUM_EXTRA_ARGS ?= "${EXTRA_IMAGECMD_jffs2}" diff --git a/meta-digi-arm/conf/machine/include/ccimx51.inc b/meta-digi-arm/conf/machine/include/ccimx51.inc index cf3d143fe..468bf8c08 100644 --- a/meta-digi-arm/conf/machine/include/ccimx51.inc +++ b/meta-digi-arm/conf/machine/include/ccimx51.inc @@ -37,24 +37,28 @@ module_autoload_pmic_battery = "pmic_battery" # To build any of these variants configure MACHINE_VARIANT on the project's # local.conf to the variant name. # -# Name WiFi Eth2 RAM Accel GPU VPU -# --------------------------------------------------------- -# 128 N N 128 N N N -# 128a N N 128 Y N N -# 128agv N N 128 Y Y Y -# agv N N 256 Y Y Y -# eagv N Y 512 Y Y Y -# w Y N 512 N N N -# w128a Y N 128 Y N N -# w128agv Y N 128 Y Y Y -# wagv Y N 256 Y Y Y -# weagv Y Y 512 Y Y Y +# Name WiFi Eth2 RAM=128MB NAND=2GB Accel GPU VPU +# --------------------------------------------------------------------------- +# 128 N N Y N N N N +# 128a N N Y N Y N N +# 128agv N N Y N Y Y Y +# agv N N N N Y Y Y +# agv4k N N N Y Y Y Y +# eagv N Y N N Y Y Y +# eagv4k N Y N Y Y Y Y +# w Y N N N N N N +# w128a Y N Y N Y N N +# w128agv Y N Y N Y Y Y +# wagv Y N N N Y Y Y +# weagv Y Y N N Y Y Y # Per-variant machine features MACHINE_FEATURES_append_128a = " accelerometer" MACHINE_FEATURES_append_128agv = " accelerometer accel-video accel-graphics" MACHINE_FEATURES_append_agv = " accelerometer accel-video accel-graphics" +MACHINE_FEATURES_append_agv4k = " accelerometer accel-video accel-graphics" MACHINE_FEATURES_append_eagv = " ext-eth accelerometer accel-video accel-graphics" +MACHINE_FEATURES_append_eagv4k = " ext-eth accelerometer accel-video accel-graphics" MACHINE_FEATURES_append_w = " wifi" MACHINE_FEATURES_append_w128a = " wifi accelerometer" MACHINE_FEATURES_append_w128agv = " wifi accelerometer accel-video accel-graphics"