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 <javier.viguera@digi.com>
This commit is contained in:
Javier Viguera 2014-12-02 16:49:12 +01:00
parent dbd966543e
commit 09e72aa0f4
5 changed files with 36 additions and 124 deletions

View File

@ -1,69 +1,5 @@
inherit image_types_fsl 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_CMD_boot.vfat() {
# #
# Image generation code for image type 'boot.vfat' # Image generation code for image type 'boot.vfat'

View File

@ -12,19 +12,7 @@ KERNEL_DEVICETREE = "imx28-${MACHINE}.dtb"
# create a symlink to the correct device. # create a symlink to the correct device.
SERIAL_CONSOLES = "115200;ttyS0" SERIAL_CONSOLES = "115200;ttyS0"
################################################# # FLASH parameters
## Flash parameters for JFFS2 and UBIFS images ## MKUBIFS_ARGS ?= "-m 2048 -e 126976 -c 2047"
################################################# EXTRA_IMAGECMD_jffs2 ?= "-l -e 128 -n"
# partition size (KiB) JFFS2_SUM_EXTRA_ARGS ?= "${EXTRA_IMAGECMD_jffs2}"
# 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 = "-"

View File

@ -6,19 +6,11 @@ include conf/machine/include/ccimx51.inc
SERIAL_CONSOLES = "38400;ttymxc1" SERIAL_CONSOLES = "38400;ttymxc1"
################################################# # Per-variant FLASH parameters
## Flash parameters for JFFS2 and UBIFS images ## MKUBIFS_ARGS ?= "-m 2048 -e 129024 -c 4095"
################################################# MKUBIFS_ARGS_agv4k ?= "-m 4096 -e 520192 -c 1023"
# partition size (KiB) MKUBIFS_ARGS_eagv4k ?= "-m 4096 -e 520192 -c 1023"
# physical eraseblock size (KiB) EXTRA_IMAGECMD_jffs2 ?= "-l -e 128 -n"
# logical eraseblock size (bytes) EXTRA_IMAGECMD_jffs2_agv4k ?= "-l -e 512 -n"
# minimum input/output size (bytes) EXTRA_IMAGECMD_jffs2_eagv4k ?= "-l -e 512 -n"
# sub-page size (bytes) JFFS2_SUM_EXTRA_ARGS ?= "${EXTRA_IMAGECMD_jffs2}"
#
# 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"

View File

@ -7,19 +7,11 @@ include conf/machine/include/ccimx53.inc
SERIAL_CONSOLES = "115200;ttymxc0" SERIAL_CONSOLES = "115200;ttymxc0"
################################################# # Per-variant FLASH parameters
## Flash parameters for JFFS2 and UBIFS images ## MKUBIFS_ARGS ?= "-m 2048 -e 129024 -c 4095"
################################################# MKUBIFS_ARGS_4k ?= "-m 4096 -e 520192 -c 1023"
# partition size (KiB) MKUBIFS_ARGS_e4k ?= "-m 4096 -e 520192 -c 1023"
# physical eraseblock size (KiB) EXTRA_IMAGECMD_jffs2 ?= "-l -e 128 -n"
# logical eraseblock size (bytes) EXTRA_IMAGECMD_jffs2_4k ?= "-l -e 512 -n"
# minimum input/output size (bytes) EXTRA_IMAGECMD_jffs2_e4k ?= "-l -e 512 -n"
# sub-page size (bytes) JFFS2_SUM_EXTRA_ARGS ?= "${EXTRA_IMAGECMD_jffs2}"
#
# 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"

View File

@ -37,24 +37,28 @@ module_autoload_pmic_battery = "pmic_battery"
# To build any of these variants configure MACHINE_VARIANT on the project's # To build any of these variants configure MACHINE_VARIANT on the project's
# local.conf to the variant name. # local.conf to the variant name.
# #
# Name WiFi Eth2 RAM Accel GPU VPU # Name WiFi Eth2 RAM=128MB NAND=2GB Accel GPU VPU
# --------------------------------------------------------- # ---------------------------------------------------------------------------
# 128 N N 128 N N N # 128 N N Y N N N N
# 128a N N 128 Y N N # 128a N N Y N Y N N
# 128agv N N 128 Y Y Y # 128agv N N Y N Y Y Y
# agv N N 256 Y Y Y # agv N N N N Y Y Y
# eagv N Y 512 Y Y Y # agv4k N N N Y Y Y Y
# w Y N 512 N N N # eagv N Y N N Y Y Y
# w128a Y N 128 Y N N # eagv4k N Y N Y Y Y Y
# w128agv Y N 128 Y Y Y # w Y N N N N N N
# wagv Y N 256 Y Y Y # w128a Y N Y N Y N N
# weagv Y Y 512 Y Y Y # 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 # Per-variant machine features
MACHINE_FEATURES_append_128a = " accelerometer" MACHINE_FEATURES_append_128a = " accelerometer"
MACHINE_FEATURES_append_128agv = " accelerometer accel-video accel-graphics" MACHINE_FEATURES_append_128agv = " accelerometer accel-video accel-graphics"
MACHINE_FEATURES_append_agv = " 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_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_w = " wifi"
MACHINE_FEATURES_append_w128a = " wifi accelerometer" MACHINE_FEATURES_append_w128a = " wifi accelerometer"
MACHINE_FEATURES_append_w128agv = " wifi accelerometer accel-video accel-graphics" MACHINE_FEATURES_append_w128agv = " wifi accelerometer accel-video accel-graphics"