diff options
Diffstat (limited to 'classes')
| -rw-r--r-- | classes/fsl-dynamic-packagearch.bbclass | 47 | ||||
| -rw-r--r-- | classes/fsl-eula-unpack.bbclass | 63 | ||||
| -rw-r--r-- | classes/image_types_fsl.bbclass | 312 | ||||
| -rw-r--r-- | classes/mfgtool-initramfs-image.bbclass | 40 |
4 files changed, 462 insertions, 0 deletions
diff --git a/classes/fsl-dynamic-packagearch.bbclass b/classes/fsl-dynamic-packagearch.bbclass new file mode 100644 index 0000000..40eae6c --- /dev/null +++ b/classes/fsl-dynamic-packagearch.bbclass | |||
| @@ -0,0 +1,47 @@ | |||
| 1 | # Automatically set PACKAGE_ARCH for MACHINE_SOCARCH | ||
| 2 | # | ||
| 3 | # This allow to easy reuse of binary packages among similar SoCs. The | ||
| 4 | # usual use for this is to share SoC specific packages among different | ||
| 5 | # boards. | ||
| 6 | # | ||
| 7 | # MACHINE_SOCARCH_FILTER list all packages associated with | ||
| 8 | # MACHINE_SOCARCH and, when match, will set PACKAGE_ARCH as MACHINE_SOCARCH | ||
| 9 | # | ||
| 10 | # MACHINE_ARCH_FILTER list all packages associated with | ||
| 11 | # MACHINE_ARCH and, when match, will set PACKAGE_ARCH as MACHINE_ARCH | ||
| 12 | # | ||
| 13 | # For example, in meta-fsl-arm, this is used to share GPU packages for | ||
| 14 | # i.MX53 boards (as all them share the AMD GPU) and i.MX6 based boards | ||
| 15 | # (as all them share Vivante GPU). | ||
| 16 | # | ||
| 17 | # To use the class, specify, for example: | ||
| 18 | # | ||
| 19 | # MACHINE_SOCARCH_soc = "${TUNE_PKGARCH}-soc" | ||
| 20 | # | ||
| 21 | # and the need filters, as: | ||
| 22 | # | ||
| 23 | # MACHINE_ARCH_FILTER = "virtual/kernel" | ||
| 24 | # MACHINE_SOCARCH_FILTER_soc = "virtual/libgles1 ... virtual/libgl" | ||
| 25 | # | ||
| 26 | # Copyright 2013 (C) O.S. Systems Software LTDA. | ||
| 27 | |||
| 28 | python __anonymous () { | ||
| 29 | machine_arch_filter = set((d.getVar("MACHINE_ARCH_FILTER", True) or "").split()) | ||
| 30 | machine_socarch_filter = set((d.getVar("MACHINE_SOCARCH_FILTER", True) or "").split()) | ||
| 31 | if machine_socarch_filter or machine_arch_filter: | ||
| 32 | provides = set((d.getVar("PROVIDES", True) or "").split()) | ||
| 33 | depends = set((d.getVar("DEPENDS", True) or "").split()) | ||
| 34 | PN = d.getVar("PN", True) | ||
| 35 | |||
| 36 | package_arch = None | ||
| 37 | if list(machine_arch_filter & (provides | depends)): | ||
| 38 | package_arch = d.getVar("MACHINE_ARCH", True) | ||
| 39 | elif list(machine_socarch_filter & (provides | depends)): | ||
| 40 | package_arch = d.getVar("MACHINE_SOCARCH", True) | ||
| 41 | if not package_arch: | ||
| 42 | bb.parse.SkipPackage("You must set MACHINE_SOCARCH as MACHINE_SOCARCH_FILTER is set for this SoC.") | ||
| 43 | |||
| 44 | if package_arch: | ||
| 45 | bb.debug(1, "Use '%s' as package archictecture for '%s'" % (package_arch, PN)) | ||
| 46 | d.setVar("PACKAGE_ARCH", package_arch) | ||
| 47 | } | ||
diff --git a/classes/fsl-eula-unpack.bbclass b/classes/fsl-eula-unpack.bbclass new file mode 100644 index 0000000..0da17c3 --- /dev/null +++ b/classes/fsl-eula-unpack.bbclass | |||
| @@ -0,0 +1,63 @@ | |||
| 1 | # fsl-eula-unpack.bbclass provides the mechanism used for unpacking | ||
| 2 | # the .bin file downloaded by HTTP and handle the EULA acceptance. | ||
| 3 | # | ||
| 4 | # To use it, the 'fsl-eula' parameter needs to be added to the | ||
| 5 | # SRC_URI entry, e.g: | ||
| 6 | # | ||
| 7 | # SRC_URI = "${FSL_MIRROR}/firmware-imx-${PV};fsl-eula=true" | ||
| 8 | |||
| 9 | python fsl_bin_do_unpack() { | ||
| 10 | src_uri = (d.getVar('SRC_URI', True) or "").split() | ||
| 11 | if len(src_uri) == 0: | ||
| 12 | return | ||
| 13 | |||
| 14 | localdata = bb.data.createCopy(d) | ||
| 15 | bb.data.update_data(localdata) | ||
| 16 | |||
| 17 | rootdir = localdata.getVar('WORKDIR', True) | ||
| 18 | fetcher = bb.fetch2.Fetch(src_uri, localdata) | ||
| 19 | |||
| 20 | for url in fetcher.ud.values(): | ||
| 21 | save_cwd = os.getcwd() | ||
| 22 | # Check for supported fetchers | ||
| 23 | if url.type in ['http', 'https', 'ftp', 'file']: | ||
| 24 | if url.parm.get('fsl-eula', False): | ||
| 25 | # If download has failed, do nothing | ||
| 26 | if not os.path.exists(url.localpath): | ||
| 27 | bb.debug(1, "Exiting as '%s' cannot be found" % url.basename) | ||
| 28 | return | ||
| 29 | |||
| 30 | # Change to the working directory | ||
| 31 | bb.note("Handling file '%s' as a Freescale's EULA binary." % url.basename) | ||
| 32 | save_cwd = os.getcwd() | ||
| 33 | os.chdir(rootdir) | ||
| 34 | |||
| 35 | cmd = "sh %s --auto-accept --force" % (url.localpath) | ||
| 36 | bb.fetch2.runfetchcmd(cmd, d, quiet=True) | ||
| 37 | |||
| 38 | # Return to the previous directory | ||
| 39 | os.chdir(save_cwd) | ||
| 40 | } | ||
| 41 | |||
| 42 | python do_unpack() { | ||
| 43 | eula = d.getVar('ACCEPT_FSL_EULA', True) | ||
| 44 | eula_file = d.getVar('FSL_EULA_FILE', True) | ||
| 45 | pkg = d.getVar('PN', True) | ||
| 46 | if eula == None: | ||
| 47 | bb.fatal("To use '%s' you need to accept the Freescale EULA at '%s'. " | ||
| 48 | "Please read it and in case you accept it, write: " | ||
| 49 | "ACCEPT_FSL_EULA = \"1\" in your local.conf." % (pkg, eula_file)) | ||
| 50 | elif eula == '0': | ||
| 51 | bb.fatal("To use '%s' you need to accept the Freescale EULA." % pkg) | ||
| 52 | else: | ||
| 53 | bb.note("Freescale EULA has been accepted for '%s'" % pkg) | ||
| 54 | |||
| 55 | try: | ||
| 56 | bb.build.exec_func('base_do_unpack', d) | ||
| 57 | except: | ||
| 58 | raise | ||
| 59 | |||
| 60 | bb.build.exec_func('fsl_bin_do_unpack', d) | ||
| 61 | } | ||
| 62 | |||
| 63 | do_unpack[vardepsexclude] += "FSL_EULA_FILE" | ||
diff --git a/classes/image_types_fsl.bbclass b/classes/image_types_fsl.bbclass new file mode 100644 index 0000000..dfa55e4 --- /dev/null +++ b/classes/image_types_fsl.bbclass | |||
| @@ -0,0 +1,312 @@ | |||
| 1 | inherit image_types | ||
| 2 | |||
| 3 | IMAGE_BOOTLOADER ?= "u-boot" | ||
| 4 | |||
| 5 | # Handle u-boot suffixes | ||
| 6 | UBOOT_SUFFIX ?= "bin" | ||
| 7 | UBOOT_PADDING ?= "0" | ||
| 8 | UBOOT_SUFFIX_SDCARD ?= "${UBOOT_SUFFIX}" | ||
| 9 | |||
| 10 | # | ||
| 11 | # Handles i.MX mxs bootstream generation | ||
| 12 | # | ||
| 13 | |||
| 14 | # IMX Bootlets Linux bootstream | ||
| 15 | IMAGE_DEPENDS_linux.sb = "elftosb-native:do_populate_sysroot \ | ||
| 16 | imx-bootlets:do_deploy \ | ||
| 17 | virtual/kernel:do_deploy" | ||
| 18 | IMAGE_LINK_NAME_linux.sb = "" | ||
| 19 | IMAGE_CMD_linux.sb () { | ||
| 20 | kernel_bin="`readlink ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin`" | ||
| 21 | kernel_dtb="`readlink ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.dtb || true`" | ||
| 22 | linux_bd_file=imx-bootlets-linux.bd-${MACHINE} | ||
| 23 | if [ `basename $kernel_bin .bin` = `basename $kernel_dtb .dtb` ]; then | ||
| 24 | # When using device tree we build a zImage with the dtb | ||
| 25 | # appended on the end of the image | ||
| 26 | linux_bd_file=imx-bootlets-linux.bd-dtb-${MACHINE} | ||
| 27 | cat $kernel_bin $kernel_dtb \ | ||
| 28 | > $kernel_bin-dtb | ||
| 29 | rm -f ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin-dtb | ||
| 30 | ln -s $kernel_bin-dtb ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin-dtb | ||
| 31 | fi | ||
| 32 | |||
| 33 | # Ensure the file is generated | ||
| 34 | rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.linux.sb | ||
| 35 | (cd ${DEPLOY_DIR_IMAGE}; elftosb -z -c $linux_bd_file -o ${IMAGE_NAME}.linux.sb) | ||
| 36 | |||
| 37 | # Remove the appended file as it is only used here | ||
| 38 | rm -f ${DEPLOY_DIR_IMAGE}/$kernel_bin-dtb | ||
| 39 | } | ||
| 40 | |||
| 41 | # IMX Bootlets barebox bootstream | ||
| 42 | IMAGE_DEPENDS_barebox.mxsboot-sdcard = "elftosb-native:do_populate_sysroot \ | ||
| 43 | u-boot-mxsboot-native:do_populate_sysroot \ | ||
| 44 | imx-bootlets:do_deploy \ | ||
| 45 | barebox:do_deploy" | ||
| 46 | IMAGE_CMD_barebox.mxsboot-sdcard () { | ||
| 47 | barebox_bd_file=imx-bootlets-barebox_ivt.bd-${MACHINE} | ||
| 48 | |||
| 49 | # Ensure the files are generated | ||
| 50 | (cd ${DEPLOY_DIR_IMAGE}; rm -f ${IMAGE_NAME}.barebox.sb ${IMAGE_NAME}.barebox.mxsboot-sdcard; \ | ||
| 51 | elftosb -f mx28 -z -c $barebox_bd_file -o ${IMAGE_NAME}.barebox.sb; \ | ||
| 52 | mxsboot sd ${IMAGE_NAME}.barebox.sb ${IMAGE_NAME}.barebox.mxsboot-sdcard) | ||
| 53 | } | ||
| 54 | |||
| 55 | # U-Boot mxsboot generation to SD-Card | ||
| 56 | UBOOT_SUFFIX_SDCARD_mxs ?= "mxsboot-sdcard" | ||
| 57 | IMAGE_DEPENDS_uboot.mxsboot-sdcard = "u-boot-mxsboot-native:do_populate_sysroot \ | ||
| 58 | u-boot:do_deploy" | ||
| 59 | IMAGE_CMD_uboot.mxsboot-sdcard = "mxsboot sd ${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX} \ | ||
| 60 | ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.uboot.mxsboot-sdcard" | ||
| 61 | |||
| 62 | # Boot partition volume id | ||
| 63 | BOOTDD_VOLUME_ID ?= "Boot ${MACHINE}" | ||
| 64 | |||
| 65 | # Boot partition size [in KiB] | ||
| 66 | BOOT_SPACE ?= "8192" | ||
| 67 | |||
| 68 | # Barebox environment size [in KiB] | ||
| 69 | BAREBOX_ENV_SPACE ?= "512" | ||
| 70 | |||
| 71 | # Set alignment to 4MB [in KiB] | ||
| 72 | IMAGE_ROOTFS_ALIGNMENT = "4096" | ||
| 73 | |||
| 74 | IMAGE_DEPENDS_sdcard = "parted-native:do_populate_sysroot \ | ||
| 75 | dosfstools-native:do_populate_sysroot \ | ||
| 76 | mtools-native:do_populate_sysroot \ | ||
| 77 | virtual/kernel:do_deploy \ | ||
| 78 | ${@d.getVar('IMAGE_BOOTLOADER', True) and d.getVar('IMAGE_BOOTLOADER', True) + ':do_deploy' or ''}" | ||
| 79 | |||
| 80 | SDCARD = "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.sdcard" | ||
| 81 | |||
| 82 | SDCARD_GENERATION_COMMAND_mxs = "generate_mxs_sdcard" | ||
| 83 | SDCARD_GENERATION_COMMAND_mx25 = "generate_imx_sdcard" | ||
| 84 | SDCARD_GENERATION_COMMAND_mx5 = "generate_imx_sdcard" | ||
| 85 | SDCARD_GENERATION_COMMAND_mx6 = "generate_imx_sdcard" | ||
| 86 | SDCARD_GENERATION_COMMAND_vf60 = "generate_imx_sdcard" | ||
| 87 | |||
| 88 | # | ||
| 89 | # Create an image that can by written onto a SD card using dd for use | ||
| 90 | # with i.MX SoC family | ||
| 91 | # | ||
| 92 | # External variables needed: | ||
| 93 | # ${SDCARD_ROOTFS} - the rootfs image to incorporate | ||
| 94 | # ${IMAGE_BOOTLOADER} - bootloader to use {u-boot, barebox} | ||
| 95 | # | ||
| 96 | # The disk layout used is: | ||
| 97 | # | ||
| 98 | # 0 -> IMAGE_ROOTFS_ALIGNMENT - reserved to bootloader (not partitioned) | ||
| 99 | # IMAGE_ROOTFS_ALIGNMENT -> BOOT_SPACE - kernel and other data | ||
| 100 | # BOOT_SPACE -> SDIMG_SIZE - rootfs | ||
| 101 | # | ||
| 102 | # Default Free space = 1.3x | ||
| 103 | # Use IMAGE_OVERHEAD_FACTOR to add more space | ||
| 104 | # <---------> | ||
| 105 | # 4MiB 8MiB SDIMG_ROOTFS 4MiB | ||
| 106 | # <-----------------------> <----------> <----------------------> <------------------------------> | ||
| 107 | # ------------------------ ------------ ------------------------ ------------------------------- | ||
| 108 | # | IMAGE_ROOTFS_ALIGNMENT | BOOT_SPACE | ROOTFS_SIZE | IMAGE_ROOTFS_ALIGNMENT | | ||
| 109 | # ------------------------ ------------ ------------------------ ------------------------------- | ||
| 110 | # ^ ^ ^ ^ ^ | ||
| 111 | # | | | | | | ||
| 112 | # 0 4096 4MiB + 8MiB 4MiB + 8Mib + SDIMG_ROOTFS 4MiB + 8MiB + SDIMG_ROOTFS + 4MiB | ||
| 113 | generate_imx_sdcard () { | ||
| 114 | # Create partition table | ||
| 115 | parted -s ${SDCARD} mklabel msdos | ||
| 116 | parted -s ${SDCARD} unit KiB mkpart primary fat32 ${IMAGE_ROOTFS_ALIGNMENT} $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED}) | ||
| 117 | parted -s ${SDCARD} unit KiB mkpart primary $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED}) $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED} \+ $ROOTFS_SIZE) | ||
| 118 | parted ${SDCARD} print | ||
| 119 | |||
| 120 | # Burn bootloader | ||
| 121 | case "${IMAGE_BOOTLOADER}" in | ||
| 122 | imx-bootlets) | ||
| 123 | bberror "The imx-bootlets is not supported for i.MX based machines" | ||
| 124 | exit 1 | ||
| 125 | ;; | ||
| 126 | u-boot) | ||
| 127 | if [ -n "${SPL_BINARY}" ]; then | ||
| 128 | dd if=${DEPLOY_DIR_IMAGE}/${SPL_BINARY} of=${SDCARD} conv=notrunc seek=2 bs=512 | ||
| 129 | dd if=${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX_SDCARD} of=${SDCARD} conv=notrunc seek=42 bs=1K | ||
| 130 | else | ||
| 131 | dd if=${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX_SDCARD} of=${SDCARD} conv=notrunc seek=2 skip=${UBOOT_PADDING} bs=512 | ||
| 132 | fi | ||
| 133 | ;; | ||
| 134 | barebox) | ||
| 135 | dd if=${DEPLOY_DIR_IMAGE}/barebox-${MACHINE}.bin of=${SDCARD} conv=notrunc seek=1 skip=1 bs=512 | ||
| 136 | dd if=${DEPLOY_DIR_IMAGE}/bareboxenv-${MACHINE}.bin of=${SDCARD} conv=notrunc seek=1 bs=512k | ||
| 137 | ;; | ||
| 138 | "") | ||
| 139 | ;; | ||
| 140 | *) | ||
| 141 | bberror "Unkown IMAGE_BOOTLOADER value" | ||
| 142 | exit 1 | ||
| 143 | ;; | ||
| 144 | esac | ||
| 145 | |||
| 146 | # Create boot partition image | ||
| 147 | BOOT_BLOCKS=$(LC_ALL=C parted -s ${SDCARD} unit b print \ | ||
| 148 | | awk '/ 1 / { print substr($4, 1, length($4 -1)) / 1024 }') | ||
| 149 | mkfs.vfat -n "${BOOTDD_VOLUME_ID}" -S 512 -C ${WORKDIR}/boot.img $BOOT_BLOCKS | ||
| 150 | mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin ::/${KERNEL_IMAGETYPE} | ||
| 151 | |||
| 152 | # Copy boot scripts | ||
| 153 | for item in ${BOOT_SCRIPTS}; do | ||
| 154 | src=`echo $item | awk -F':' '{ print $1 }'` | ||
| 155 | dst=`echo $item | awk -F':' '{ print $2 }'` | ||
| 156 | |||
| 157 | mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/$src ::/$dst | ||
| 158 | done | ||
| 159 | |||
| 160 | # Copy device tree file | ||
| 161 | if test -n "${KERNEL_DEVICETREE}"; then | ||
| 162 | for DTS_FILE in ${KERNEL_DEVICETREE}; do | ||
| 163 | DTS_BASE_NAME=`basename ${DTS_FILE} | awk -F "." '{print $1}'` | ||
| 164 | if [ -e "${KERNEL_IMAGETYPE}-${DTS_BASE_NAME}.dtb" ]; then | ||
| 165 | kernel_bin="`readlink ${KERNEL_IMAGETYPE}-${MACHINE}.bin`" | ||
| 166 | kernel_bin_for_dtb="`readlink ${KERNEL_IMAGETYPE}-${DTS_BASE_NAME}.dtb | sed "s,$DTS_BASE_NAME,${MACHINE},g;s,\.dtb$,.bin,g"`" | ||
| 167 | if [ $kernel_bin = $kernel_bin_for_dtb ]; then | ||
| 168 | mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${DTS_BASE_NAME}.dtb ::/${DTS_BASE_NAME}.dtb | ||
| 169 | fi | ||
| 170 | fi | ||
| 171 | done | ||
| 172 | fi | ||
| 173 | |||
| 174 | # Burn Partition | ||
| 175 | dd if=${WORKDIR}/boot.img of=${SDCARD} conv=notrunc seek=1 bs=$(expr ${IMAGE_ROOTFS_ALIGNMENT} \* 1024) && sync && sync | ||
| 176 | dd if=${SDCARD_ROOTFS} of=${SDCARD} conv=notrunc seek=1 bs=$(expr ${BOOT_SPACE_ALIGNED} \* 1024 + ${IMAGE_ROOTFS_ALIGNMENT} \* 1024) && sync && sync | ||
| 177 | } | ||
| 178 | |||
| 179 | # | ||
| 180 | # Create an image that can by written onto a SD card using dd for use | ||
| 181 | # with i.MXS SoC family | ||
| 182 | # | ||
| 183 | # External variables needed: | ||
| 184 | # ${SDCARD_ROOTFS} - the rootfs image to incorporate | ||
| 185 | # ${IMAGE_BOOTLOADER} - bootloader to use {imx-bootlets, u-boot} | ||
| 186 | # | ||
| 187 | generate_mxs_sdcard () { | ||
| 188 | # Create partition table | ||
| 189 | parted -s ${SDCARD} mklabel msdos | ||
| 190 | |||
| 191 | case "${IMAGE_BOOTLOADER}" in | ||
| 192 | imx-bootlets) | ||
| 193 | # The disk layout used is: | ||
| 194 | # | ||
| 195 | # 0 -> 1024 - Unused (not partitioned) | ||
| 196 | # 1024 -> BOOT_SPACE - kernel and other data (bootstream) | ||
| 197 | # BOOT_SPACE -> SDIMG_SIZE - rootfs | ||
| 198 | # | ||
| 199 | # Default Free space = 1.3x | ||
| 200 | # Use IMAGE_OVERHEAD_FACTOR to add more space | ||
| 201 | # <---------> | ||
| 202 | # 1024 8MiB SDIMG_ROOTFS 4MiB | ||
| 203 | # <-------> <----------> <----------------------> <------------------------------> | ||
| 204 | # --------------------- ------------------------ ------------------------------- | ||
| 205 | # | Unused | BOOT_SPACE | ROOTFS_SIZE | IMAGE_ROOTFS_ALIGNMENT | | ||
| 206 | # --------------------- ------------------------ ------------------------------- | ||
| 207 | # ^ ^ ^ ^ ^ | ||
| 208 | # | | | | | | ||
| 209 | # 0 1024 1024 + 8MiB 1024 + 8Mib + SDIMG_ROOTFS 1024 + 8MiB + SDIMG_ROOTFS + 4MiB | ||
| 210 | parted -s ${SDCARD} unit KiB mkpart primary 1024 $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED}) | ||
| 211 | parted -s ${SDCARD} unit KiB mkpart primary $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED}) $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED} \+ $ROOTFS_SIZE) | ||
| 212 | |||
| 213 | # Empty 4 bytes from boot partition | ||
| 214 | dd if=/dev/zero of=${SDCARD} conv=notrunc seek=2048 count=4 | ||
| 215 | |||
| 216 | # Write the bootstream in (2048 + 4) bytes | ||
| 217 | dd if=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.linux.sb of=${SDCARD} conv=notrunc seek=1 seek=2052 | ||
| 218 | ;; | ||
| 219 | u-boot) | ||
| 220 | # The disk layout used is: | ||
| 221 | # | ||
| 222 | # 1M - 2M - reserved to bootloader and other data | ||
| 223 | # 2M - BOOT_SPACE - kernel | ||
| 224 | # BOOT_SPACE - SDCARD_SIZE - rootfs | ||
| 225 | # | ||
| 226 | # The disk layout used is: | ||
| 227 | # | ||
| 228 | # 1M -> 2M - reserved to bootloader and other data | ||
| 229 | # 2M -> BOOT_SPACE - kernel and other data | ||
| 230 | # BOOT_SPACE -> SDIMG_SIZE - rootfs | ||
| 231 | # | ||
| 232 | # Default Free space = 1.3x | ||
| 233 | # Use IMAGE_OVERHEAD_FACTOR to add more space | ||
| 234 | # <---------> | ||
| 235 | # 4MiB 8MiB SDIMG_ROOTFS 4MiB | ||
| 236 | # <-----------------------> <-------------> <----------------------> <------------------------------> | ||
| 237 | # ---------------------------------------- ------------------------ ------------------------------- | ||
| 238 | # | | | |ROOTFS_SIZE | IMAGE_ROOTFS_ALIGNMENT | | ||
| 239 | # ---------------------------------------- ------------------------ ------------------------------- | ||
| 240 | # ^ ^ ^ ^ ^ ^ ^ | ||
| 241 | # | | | | | | | | ||
| 242 | # 0 1M 2M 4M 4MiB + BOOTSPACE 4MiB + BOOTSPACE + SDIMG_ROOTFS 4MiB + BOOTSPACE + SDIMG_ROOTFS + 4MiB | ||
| 243 | # | ||
| 244 | parted -s ${SDCARD} unit KiB mkpart primary 1024 2048 | ||
| 245 | parted -s ${SDCARD} unit KiB mkpart primary 2048 $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED}) | ||
| 246 | parted -s ${SDCARD} unit KiB mkpart primary $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED}) $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED} \+ $ROOTFS_SIZE) | ||
| 247 | |||
| 248 | dd if=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.uboot.mxsboot-sdcard of=${SDCARD} conv=notrunc seek=1 skip=${UBOOT_PADDING} bs=$(expr 1024 \* 1024) | ||
| 249 | BOOT_BLOCKS=$(LC_ALL=C parted -s ${SDCARD} unit b print \ | ||
| 250 | | awk '/ 2 / { print substr($4, 1, length($4 -1)) / 1024 }') | ||
| 251 | |||
| 252 | mkfs.vfat -n "${BOOTDD_VOLUME_ID}" -S 512 -C ${WORKDIR}/boot.img $BOOT_BLOCKS | ||
| 253 | mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin ::/${KERNEL_IMAGETYPE} | ||
| 254 | if test -n "${KERNEL_DEVICETREE}"; then | ||
| 255 | for DTS_FILE in ${KERNEL_DEVICETREE}; do | ||
| 256 | DTS_BASE_NAME=`basename ${DTS_FILE} | awk -F "." '{print $1}'` | ||
| 257 | if [ -e "${KERNEL_IMAGETYPE}-${DTS_BASE_NAME}.dtb" ]; then | ||
| 258 | kernel_bin="`readlink ${KERNEL_IMAGETYPE}-${MACHINE}.bin`" | ||
| 259 | kernel_bin_for_dtb="`readlink ${KERNEL_IMAGETYPE}-${DTS_BASE_NAME}.dtb | sed "s,$DTS_BASE_NAME,${MACHINE},g;s,\.dtb$,.bin,g"`" | ||
| 260 | if [ $kernel_bin = $kernel_bin_for_dtb ]; then | ||
| 261 | mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${DTS_BASE_NAME}.dtb ::/${DTS_BASE_NAME}.dtb | ||
| 262 | fi | ||
| 263 | fi | ||
| 264 | done | ||
| 265 | fi | ||
| 266 | |||
| 267 | dd if=${WORKDIR}/boot.img of=${SDCARD} conv=notrunc seek=2 bs=$(expr 1024 \* 1024) | ||
| 268 | ;; | ||
| 269 | barebox) | ||
| 270 | # BAREBOX_ENV_SPACE is taken on BOOT_SPACE_ALIGNED but it doesn't really matter as long as the rootfs is aligned | ||
| 271 | parted -s ${SDCARD} unit KiB mkpart primary 1024 $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED} - ${BAREBOX_ENV_SPACE}) | ||
| 272 | parted -s ${SDCARD} unit KiB mkpart primary $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED} - ${BAREBOX_ENV_SPACE}) $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED}) | ||
| 273 | parted -s ${SDCARD} unit KiB mkpart primary $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED}) $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED} \+ $ROOTFS_SIZE) | ||
| 274 | |||
| 275 | dd if=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.barebox.mxsboot-sdcard of=${SDCARD} conv=notrunc seek=1 bs=$(expr 1024 \* 1024) | ||
| 276 | dd if=${DEPLOY_DIR_IMAGE}/bareboxenv-${MACHINE}.bin of=${SDCARD} conv=notrunc seek=$(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED} - ${BAREBOX_ENV_SPACE}) bs=1024 | ||
| 277 | ;; | ||
| 278 | *) | ||
| 279 | bberror "Unkown IMAGE_BOOTLOADER value" | ||
| 280 | exit 1 | ||
| 281 | ;; | ||
| 282 | esac | ||
| 283 | |||
| 284 | # Change partition type for mxs processor family | ||
| 285 | bbnote "Setting partition type to 0x53 as required for mxs' SoC family." | ||
| 286 | echo -n S | dd of=${SDCARD} bs=1 count=1 seek=450 conv=notrunc | ||
| 287 | |||
| 288 | parted ${SDCARD} print | ||
| 289 | |||
| 290 | dd if=${SDCARD_ROOTFS} of=${SDCARD} conv=notrunc seek=1 bs=$(expr ${BOOT_SPACE_ALIGNED} \* 1024 + ${IMAGE_ROOTFS_ALIGNMENT} \* 1024) && sync && sync | ||
| 291 | } | ||
| 292 | |||
| 293 | IMAGE_CMD_sdcard () { | ||
| 294 | if [ -z "${SDCARD_ROOTFS}" ]; then | ||
| 295 | bberror "SDCARD_ROOTFS is undefined. To use sdcard image from Freescale's BSP it needs to be defined." | ||
| 296 | exit 1 | ||
| 297 | fi | ||
| 298 | |||
| 299 | # Align boot partition and calculate total SD card image size | ||
| 300 | BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE} + ${IMAGE_ROOTFS_ALIGNMENT} - 1) | ||
| 301 | BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE_ALIGNED} - ${BOOT_SPACE_ALIGNED} % ${IMAGE_ROOTFS_ALIGNMENT}) | ||
| 302 | SDCARD_SIZE=$(expr ${IMAGE_ROOTFS_ALIGNMENT} + ${BOOT_SPACE_ALIGNED} + $ROOTFS_SIZE + ${IMAGE_ROOTFS_ALIGNMENT}) | ||
| 303 | |||
| 304 | # Initialize a sparse file | ||
| 305 | dd if=/dev/zero of=${SDCARD} bs=1 count=0 seek=$(expr 1024 \* ${SDCARD_SIZE}) | ||
| 306 | |||
| 307 | ${SDCARD_GENERATION_COMMAND} | ||
| 308 | } | ||
| 309 | |||
| 310 | # The sdcard requires the rootfs filesystem to be built before using | ||
| 311 | # it so we must make this dependency explicit. | ||
| 312 | IMAGE_TYPEDEP_sdcard = "${@d.getVar('SDCARD_ROOTFS', 1).split('.')[-1]}" | ||
diff --git a/classes/mfgtool-initramfs-image.bbclass b/classes/mfgtool-initramfs-image.bbclass new file mode 100644 index 0000000..a9a2adf --- /dev/null +++ b/classes/mfgtool-initramfs-image.bbclass | |||
| @@ -0,0 +1,40 @@ | |||
| 1 | # Generates a Manufacturing Tool Initramfs image | ||
| 2 | # | ||
| 3 | # This generates the initramfs used for the installation process. The | ||
| 4 | # image provides the utilities which are used, in the target, during | ||
| 5 | # the process and receive the commands from the MfgTool application. | ||
| 6 | # | ||
| 7 | # Copyright 2014 (C) O.S. Systems Software LTDA. | ||
| 8 | |||
| 9 | DEPENDS += "u-boot-mfgtool linux-mfgtool" | ||
| 10 | |||
| 11 | FEATURE_PACKAGES_mtd = "packagegroup-fsl-mfgtool-mtd" | ||
| 12 | FEATURE_PACKAGES_extfs = "packagegroup-fsl-mfgtool-extfs" | ||
| 13 | |||
| 14 | IMAGE_FSTYPES = "cpio.gz.u-boot" | ||
| 15 | IMAGE_ROOTFS_SIZE ?= "8192" | ||
| 16 | IMAGE_CLASSES = "image_types_uboot" | ||
| 17 | |||
| 18 | # Filesystems enabled by default | ||
| 19 | DEFAULT_FS_SUPPORT = " \ | ||
| 20 | mtd \ | ||
| 21 | extfs \ | ||
| 22 | " | ||
| 23 | |||
| 24 | IMAGE_FEATURES = " \ | ||
| 25 | ${DEFAULT_FS_SUPPORT} \ | ||
| 26 | \ | ||
| 27 | read-only-rootfs \ | ||
| 28 | " | ||
| 29 | |||
| 30 | # Avoid installation of syslog | ||
| 31 | BAD_RECOMMENDATIONS += "busybox-syslog" | ||
| 32 | |||
| 33 | # Avoid static /dev | ||
| 34 | USE_DEVFS = "1" | ||
| 35 | |||
| 36 | inherit core-image | ||
| 37 | |||
| 38 | CORE_IMAGE_BASE_INSTALL = " \ | ||
| 39 | ${CORE_IMAGE_EXTRA_INSTALL} \ | ||
| 40 | " | ||
