summaryrefslogtreecommitdiffstats
path: root/classes
diff options
context:
space:
mode:
authorOtavio Salvador <otavio@ossystems.com.br>2012-05-19 15:38:47 -0300
committerOtavio Salvador <otavio@ossystems.com.br>2012-05-21 10:26:52 -0300
commit4b107d67bf66adf592c086fab4ae72c6e34374a6 (patch)
treee2fb324272e3d938828109e9dd4c34dc28301e16 /classes
parentb3722007dd279c43dbe8b127e3fceb9e07d2ee85 (diff)
downloadmeta-fsl-arm-4b107d67bf66adf592c086fab4ae72c6e34374a6.tar.gz
image_types_fsl.bbclass: add imx-bootlets support for i.MXS
i.MXS SoC family has support to boot with imx-bootlets (the default when using LTIB) and the only current supported way of booting i.MX23 machines. The imx-bootlets has some quite specific requirements regaring the partition layout and includes the kernel binary appended to the boot stream so we drop the third partition reducing the wasted space of SD card. Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
Diffstat (limited to 'classes')
-rw-r--r--classes/image_types_fsl.bbclass68
1 files changed, 48 insertions, 20 deletions
diff --git a/classes/image_types_fsl.bbclass b/classes/image_types_fsl.bbclass
index 6877243..8b184f2 100644
--- a/classes/image_types_fsl.bbclass
+++ b/classes/image_types_fsl.bbclass
@@ -11,6 +11,12 @@ UBOOT_SUFFIX_SDCARD ?= "${UBOOT_SUFFIX}"
11# Handles i.MX mxs bootstream generation 11# Handles i.MX mxs bootstream generation
12# 12#
13 13
14# IMX Bootlets Linux bootstream
15IMAGE_DEPENDS_linux.sb = "elftosb-native imx-bootlets virtual/kernel"
16IMAGE_CMD_linux.sb = "(cd ${DEPLOY_DIR_IMAGE} ; elftosb -z -c imx-bootlets-linux_prebuilt.db-${MACHINE} \
17 -o ${IMAGE_NAME}.linux.sb)"
18
19# U-Boot mxsboot generation to SD-Card
14UBOOT_SUFFIX_SDCARD_mxs ?= "mxsboot-sdcard" 20UBOOT_SUFFIX_SDCARD_mxs ?= "mxsboot-sdcard"
15IMAGE_DEPENDS_uboot.mxsboot-sdcard = "u-boot-mxsboot-native u-boot" 21IMAGE_DEPENDS_uboot.mxsboot-sdcard = "u-boot-mxsboot-native u-boot"
16IMAGE_CMD_uboot.mxsboot-sdcard = "mxsboot sd ${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX} \ 22IMAGE_CMD_uboot.mxsboot-sdcard = "mxsboot sd ${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX} \
@@ -57,6 +63,10 @@ generate_imx_sdcard () {
57 parted ${SDCARD} print 63 parted ${SDCARD} print
58 64
59 case "${IMAGE_BOOTLOADER}" in 65 case "${IMAGE_BOOTLOADER}" in
66 imx-bootlets)
67 bberror "The imx-bootlets is not supported for i.MX based machines"
68 exit 1
69 ;;
60 u-boot) 70 u-boot)
61 dd if=${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX_SDCARD} of=${SDCARD} conv=notrunc seek=2 skip=${UBOOT_PADDING} bs=512 71 dd if=${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX_SDCARD} of=${SDCARD} conv=notrunc seek=2 skip=${UBOOT_PADDING} bs=512
62 ;; 72 ;;
@@ -85,29 +95,47 @@ generate_imx_sdcard () {
85# 95#
86# External variables needed: 96# External variables needed:
87# ${SDCARD_ROOTFS} - the rootfs image to incorporate 97# ${SDCARD_ROOTFS} - the rootfs image to incorporate
88# ${IMAGE_BOOTLOADER} - bootloader to use {u-boot, barebox} 98# ${IMAGE_BOOTLOADER} - bootloader to use {imx-bootlets, u-boot}
89#
90# The disk layout used is:
91#
92# 1M - 2M - reserved to bootloader and other data
93# 2M - BOOT_SPACE - kernel
94# BOOT_SPACE - SDCARD_SIZE - rootfs
95# 99#
96generate_mxs_sdcard () { 100generate_mxs_sdcard () {
97 # Create partition table 101 # Create partition table
98 parted -s ${SDCARD} mklabel msdos 102 parted -s ${SDCARD} mklabel msdos
99 parted -s ${SDCARD} mkpart primary 1MiB 2MiB
100 parted -s ${SDCARD} mkpart primary 2MiB ${BOOT_SPACE}
101 parted -s ${SDCARD} mkpart primary ${BOOT_SPACE} 100%
102 parted ${SDCARD} print
103
104 # Change partition type for mxs processor family
105 bbnote "Setting partition type to 0x53 as required for mxs' SoC family."
106 echo -n S | dd of=${SDCARD} bs=1 count=1 seek=450 conv=notrunc
107 103
108 case "${IMAGE_BOOTLOADER}" in 104 case "${IMAGE_BOOTLOADER}" in
105 imx-bootlets)
106 # The disk layout used is:
107 #
108 # 1M - BOOT_SPACE - kernel
109 # BOOT_SPACE - SDCARD_SIZE - rootfs
110 #
111 parted -s ${SDCARD} mkpart primary 1MiB ${BOOT_SPACE}
112 parted -s ${SDCARD} mkpart primary ${BOOT_SPACE} 100%
113
114 # Empty 4 bytes from boot partition
115 dd if=/dev/zero of=${SDCARD} conv=notrunc seek=2048 count=4
116
117 # Write the bootstream in (2048 + 4) bytes
118 dd if=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.linux.sb of=${SDCARD} conv=notrunc seek=1 seek=2052
119 ;;
109 u-boot) 120 u-boot)
121 # The disk layout used is:
122 #
123 # 1M - 2M - reserved to bootloader and other data
124 # 2M - BOOT_SPACE - kernel
125 # BOOT_SPACE - SDCARD_SIZE - rootfs
126 #
127 parted -s ${SDCARD} mkpart primary 1MiB 2MiB
128 parted -s ${SDCARD} mkpart primary 2MiB ${BOOT_SPACE}
129 parted -s ${SDCARD} mkpart primary ${BOOT_SPACE} 100%
130
110 dd if=${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX_SDCARD} of=${SDCARD} conv=notrunc seek=1 skip=${UBOOT_PADDING} bs=1MiB 131 dd if=${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX_SDCARD} of=${SDCARD} conv=notrunc seek=1 skip=${UBOOT_PADDING} bs=1MiB
132 BOOT_BLOCKS=$(LC_ALL=C parted -s ${SDCARD} unit b print \
133 | awk '/ 2 / { print substr($4, 1, length($4 -1)) / 1024 }')
134
135 mkfs.vfat -n "${BOOTDD_VOLUME_ID}" -S 512 -C ${WORKDIR}/boot.img $BOOT_BLOCKS
136 mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/uImage-${MACHINE}.bin ::/uImage
137
138 dd if=${WORKDIR}/boot.img of=${SDCARD} conv=notrunc seek=2 bs=1MiB
111 ;; 139 ;;
112 *) 140 *)
113 bberror "Unkown IMAGE_BOOTLOADER value" 141 bberror "Unkown IMAGE_BOOTLOADER value"
@@ -115,12 +143,12 @@ generate_mxs_sdcard () {
115 ;; 143 ;;
116 esac 144 esac
117 145
118 BOOT_BLOCKS=$(LC_ALL=C parted -s ${SDCARD} unit b print \ 146 # Change partition type for mxs processor family
119 | awk '/ 2 / { print substr($4, 1, length($4 -1)) / 1024 }') 147 bbnote "Setting partition type to 0x53 as required for mxs' SoC family."
120 mkfs.vfat -n "${BOOTDD_VOLUME_ID}" -S 512 -C ${WORKDIR}/boot.img $BOOT_BLOCKS 148 echo -n S | dd of=${SDCARD} bs=1 count=1 seek=450 conv=notrunc
121 mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/uImage-${MACHINE}.bin ::/uImage 149
150 parted ${SDCARD} print
122 151
123 dd if=${WORKDIR}/boot.img of=${SDCARD} conv=notrunc seek=2 bs=1MiB
124 dd if=${SDCARD_ROOTFS} of=${SDCARD} conv=notrunc seek=1 bs=${BOOT_SPACE} 152 dd if=${SDCARD_ROOTFS} of=${SDCARD} conv=notrunc seek=1 bs=${BOOT_SPACE}
125} 153}
126 154