summaryrefslogtreecommitdiff
path: root/classes/image_type_tezi.bbclass
diff options
context:
space:
mode:
authorStefan Agner <stefan.agner@toradex.com>2018-10-11 14:54:40 +0200
committerMax Krummenacher <max.krummenacher@toradex.com>2019-03-04 17:09:51 +0100
commit57c77b3739322fb91959976ac49061433626a4dd (patch)
treef385c105bf548f7aaa660a3ce2e3bf9b21cbe11c /classes/image_type_tezi.bbclass
parenta14f5068290140667e9880154ca44a2bf36e68cd (diff)
image_type_tezi: implement teziimg for distro boot
Implement a separate teziimg class which support distro boot. This image format uses a layout which allows distro boot on block devices as well as raw NAND devices. It also support multi flash type images by creating two image.json files for each flash type. It requires machine specific meta data e.g.: TORADEX_PRODUCT_IDS = "0032 0033 0039 0041" TORADEX_PRODUCT_IDS[0032] = "imx7s-colibri-eval-v3.dtb,rawnand" TORADEX_PRODUCT_IDS[0033] = "imx7d-colibri-eval-v3.dtb,rawnand" TORADEX_PRODUCT_IDS[0039] = "imx7d-colibri-emmc-eval-v3.dtb,emmc" TORADEX_PRODUCT_IDS[0041] = "imx7d-colibri-eval-v3.dtb,rawnand" TORADEX_FLASH_TYPE = "rawnand emmc" UBOOT_BINARY_TEZI_EMMC = "u-boot.imx-sd" UBOOT_BINARY_TEZI_RAWNAND = "u-boot.imx-nd" UBOOT_ENV_TEZI_EMMC = "uEnv-sd.txt" UBOOT_ENV_TEZI_RAWNAND = "uEnv-nd.txt" Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
Diffstat (limited to 'classes/image_type_tezi.bbclass')
-rw-r--r--classes/image_type_tezi.bbclass136
1 files changed, 135 insertions, 1 deletions
diff --git a/classes/image_type_tezi.bbclass b/classes/image_type_tezi.bbclass
index 26a8ff2..48c55fb 100644
--- a/classes/image_type_tezi.bbclass
+++ b/classes/image_type_tezi.bbclass
@@ -1,6 +1,17 @@
inherit image_types
+# This class implements Toradex Easy Installer image type
+# It allows to use OpenEmbedded to build images which can be consumed
+# by the Toradex Easy Installer.
+# Since it also generates the image.json description file it is rather
+# interwind with the boot flow which is U-Boot target specific.
+#
+# Currently there are two image types implemented:
+# teziimg: Default Toradex boot flow
+# teziimg-distro: Distro boot boot flow
+
do_image_teziimg[depends] += "tezi-metadata:do_deploy virtual/bootloader:do_deploy"
+do_image_teziimg_distro[depends] += "tezi-metadata:do_deploy virtual/bootloader:do_deploy"
TEZI_ROOT_FSTYPE ??= "ext4"
TEZI_ROOT_LABEL ??= "RFS"
@@ -204,7 +215,17 @@ def rootfs_tezi_json(d, flash_type, flash_data, json_file, uenv_file):
if product_ids is None:
bb.fatal("Supported Toradex product ids missing, assign TORADEX_PRODUCT_IDS with a list of product ids.")
- data["supported_product_ids"] = d.getVar('TORADEX_PRODUCT_IDS', True).split()
+ dtmapping = d.getVarFlags('TORADEX_PRODUCT_IDS')
+ data["supported_product_ids"] = []
+
+ # If no varflags are set, we assume all product ids supported with single image/U-Boot
+ if dtmapping is not None:
+ for f, v in dtmapping.items():
+ dtbflashtypearr = v.split(',')
+ if len(dtbflashtypearr) < 2 or dtbflashtypearr[1] == flash_type:
+ data["supported_product_ids"].append(f)
+ else:
+ data["supported_product_ids"].extend(product_ids.split())
if flash_type == "rawnand":
data["mtddevs"] = flash_data
@@ -281,3 +302,116 @@ IMAGE_CMD_teziimg () {
}
IMAGE_TYPEDEP_teziimg += "${TEZI_ROOT_SUFFIX}"
+
+def rootfs_tezi_distro_rawnand(d):
+ from collections import OrderedDict
+ imagename = d.getVar('IMAGE_NAME', True)
+ imagename_suffix = d.getVar('IMAGE_NAME_SUFFIX', True)
+ imagetype_suffix = d.getVar('TEZI_ROOT_SUFFIX', True)
+
+ return [
+ OrderedDict({
+ "name": "u-boot1",
+ "content": {
+ "rawfile": {
+ "filename": d.getVar('UBOOT_BINARY_TEZI_RAWNAND', True),
+ "size": 1
+ }
+ },
+ }),
+ OrderedDict({
+ "name": "u-boot2",
+ "content": {
+ "rawfile": {
+ "filename": d.getVar('UBOOT_BINARY_TEZI_RAWNAND', True),
+ "size": 1
+ }
+ }
+ }),
+ OrderedDict({
+ "name": "ubi",
+ "ubivolumes": [
+ {
+ "name": "boot",
+ "size_kib": 16384,
+ "content": {
+ "filesystem_type": "ubifs",
+ "filename": imagename + ".bootfs.tar.xz",
+ "uncompressed_size": bootfs_get_size(d) / 1024
+ }
+ },
+ {
+ "name": "rootfs",
+ "content": {
+ "filesystem_type": "ubifs",
+ "filename": imagename + imagename_suffix + "." + imagetype_suffix,
+ "uncompressed_size": rootfs_get_size(d) / 1024
+ }
+ }
+ ]
+ })]
+
+python rootfs_tezi_run_distro_json() {
+ flash_types = d.getVar('TORADEX_FLASH_TYPE', True)
+ if flash_types is None:
+ bb.fatal("Toradex flash type not specified")
+
+ flash_types_list = flash_types.split()
+ for flash_type in flash_types_list:
+ if flash_type == "rawnand":
+ flash_data = rootfs_tezi_distro_rawnand(d)
+ uenv_file = d.getVar('UBOOT_ENV_TEZI_RAWNAND', True)
+ uboot_file = d.getVar('UBOOT_BINARY_TEZI_RAWNAND', True)
+ elif flash_type == "emmc":
+ flash_data = rootfs_tezi_emmc(d)
+ uenv_file = d.getVar('UBOOT_ENV_TEZI_EMMC', True)
+ uboot_file = d.getVar('UBOOT_BINARY_TEZI_EMMC', True)
+ # TODO: Multi image/raw NAND with SPL currently not supported
+ if d.getVar('SPL_BINARY', True):
+ uboot_file += " " + d.getVar('SPL_BINARY', True)
+ else:
+ bb.fatal("Toradex flash type unknown")
+
+ if len(flash_types_list) > 1:
+ json_file = "image-{0}.json".format(flash_type)
+ else:
+ json_file = "image.json"
+
+ rootfs_tezi_json(d, flash_type, flash_data, json_file, uenv_file)
+ d.appendVar("TEZI_IMAGE_JSON_FILES", json_file + " ")
+ d.appendVar("TEZI_IMAGE_UBOOT_FILES", uenv_file + " " + uboot_file + " ")
+}
+
+do_image_teziimg_distro[prefuncs] += "rootfs_tezi_run_distro_json"
+
+IMAGE_CMD_teziimg-distro () {
+ bbnote "Create Toradex Easy Installer tarball"
+
+ # Fixup release_date in image.json, convert ${DATE} to isoformat
+ # This works around the non fatal ERRORS: "the basehash value changed" when DATE is referenced
+ # in a python prefunction to do_image
+ ISODATE=$(echo ${DATE} | sed 's/\(....\)\(..\)\(..\)/\1-\2-\3/')
+ for TEZI_IMAGE_JSON in ${TEZI_IMAGE_JSON_FILES}; do
+ sed -i "s/%release_date%/$ISODATE/" ${DEPLOY_DIR_IMAGE}/${TEZI_IMAGE_JSON}
+ done
+
+ cd ${DEPLOY_DIR_IMAGE}
+
+ # Create bootfs...
+ ${IMAGE_CMD_TAR} \
+ -chf ${IMGDEPLOYDIR}/${IMAGE_NAME}.bootfs.tar -C ${DEPLOY_DIR_IMAGE} \
+ ${KERNEL_IMAGETYPE} ${KERNEL_DEVICETREE} boot.scr
+ xz -f -k -c ${XZ_COMPRESSION_LEVEL} ${XZ_THREADS} --check=${XZ_INTEGRITY_CHECK} ${IMGDEPLOYDIR}/${IMAGE_NAME}.bootfs.tar > ${IMGDEPLOYDIR}/${IMAGE_NAME}.bootfs.tar.xz
+
+ # The first transform strips all folders from the files to tar, the
+ # second transform "moves" them in a subfolder ${IMAGE_NAME}-Tezi_${PV}.
+ ${IMAGE_CMD_TAR} \
+ --transform='s/.*\///' \
+ --transform 's,^,${IMAGE_NAME}-Tezi_${PV}/,' \
+ -chf ${IMGDEPLOYDIR}/${IMAGE_NAME}-Tezi_${PV}${TDX_VERDATE}.tar \
+ ${TEZI_IMAGE_JSON_FILES} toradexlinux.png marketing.tar prepare.sh wrapup.sh \
+ ${TEZI_IMAGE_UBOOT_FILES} ${IMGDEPLOYDIR}/${IMAGE_NAME}.bootfs.tar.xz \
+ ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${TEZI_ROOT_SUFFIX}
+}
+
+IMAGE_TYPEDEP_teziimg-distro += "${TEZI_ROOT_SUFFIX}"