imx6: convert ventana images to squashfs+ubifs overlay

Replace the ventana ubi images from a single rootfs volume containing the
rootfs as well as kernel+dtbs in the boot/ subdir to a multi-volume ubi
containing kernel+dtbs+bootscript in 'root' ubifs volume, rootfs in 'rootfs'
squasfs volume, and rootfs_data an empty ubifs volume.

At the same time move ventana image creation over to using the new
TARGET_DEVICE syntax as a cleanup.

Additionally removed FIT image creation as it is recommended that this be
done manually to produce signed FIT images if needed.

Note that a bootscript is needed for Ventana to change its default mtdparts
to rename the 2nd partition from 'rootfs' to 'ubi'. This is because there
are patches in OpenWrt kernels that try to auto-attach and auto-mount and these
get in the way if the mtd partition is named 'rootfs'.

Signed-off-by: Tim Harvey <tharvey@gateworks.com>

SVN-Revision: 47508
This commit is contained in:
Luka Perkov 2015-11-18 21:35:24 +00:00
parent ca26bf8932
commit 03401fed5e
3 changed files with 287 additions and 113 deletions

View File

@ -7,126 +7,113 @@
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/image.mk
define Image/BuildKernel/Template
#################################################
# Images
#################################################
ifneq ($(1),)
$(CP) $(DTS_DIR)/$(1).dtb $(BIN_DIR)/$(IMG_PREFIX)-$(1).dtb
# build a ubi for a specific flash geometry/layout which can contain
# volumes with the following data from ubinize-$(DEVICE_NAME).cfg:
# - 'boot.ubifs' volume: kernel+dtbs+bootscript
# - 'root.squashfs' volume: rootfs
# $(1): name (used for suffix)
# $(2): PAGESIZE (-m param to mkfs.ubifs/ubinize)
# $(3): ERASESIZE (logical eraseblock size: -e param to mkfs.ubifs)
# $(4): BLOCKSIZE (-p param to ubinize)
# $(5): MAXSIZE (maximum file-system size in LEB's -c param to mkfs.ubifs)
#
define Build/ubi-boot-overlay
# ubi-boot-overlay $(DEVICE_NAME) $(word 1, $(1))
$(call Image/BuildKernel/MkFIT,$(1),$(KDIR)/zImage,$(BIN_DIR)/$(IMG_PREFIX)-$(1).dtb,none,0x10008000,0x10008000)
$(CP) $(KDIR)/fit-$(1).itb $(BIN_DIR)/$(IMG_PREFIX)-$(1)-fit-uImage.itb
ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
$(call Image/BuildKernel/MkFIT,$(1),$(KDIR)/zImage-initramfs,$(BIN_DIR)/$(IMG_PREFIX)-$(1).dtb,none,0x10008000,0x10008000,-initramfs)
$(CP) $(KDIR)/fit-$(1)-initramfs.itb $(BIN_DIR)/$(IMG_PREFIX)-$(1)-fit-uImage-initramfs.itb
endif
endif
$(CP) $(KDIR)/zImage $(BIN_DIR)/$(IMG_PREFIX)-zImage
$(call Image/BuildKernel/MkuImage, \
none, 0x10008000, 0x10008000, \
$(BIN_DIR)/$(IMG_PREFIX)-zImage, \
$(BIN_DIR)/$(IMG_PREFIX)-uImage \
# boot filesystem
rm -rf $(TARGET_ROOTFS_DIR)/boot-$(DEVICE_NAME)_$(word 1, $(1))
mkdir -p $(TARGET_ROOTFS_DIR)/boot-$(DEVICE_NAME)_$(word 1, $(1))
$(CP) $< $(TARGET_ROOTFS_DIR)/boot-$(DEVICE_NAME)_$(word 1, $(1))/$(IMG_PREFIX)-uImage
ln -sf $(IMG_PREFIX)-uImage \
$(TARGET_ROOTFS_DIR)/boot-$(DEVICE_NAME)_$(word 1, $(1))/uImage
$(foreach dts,$(shell echo $(DEVICE_DTS)), \
$(CP) $(LINUX_DIR)/arch/$(ARCH)/boot/dts/$(dts).dtb \
$(BIN_DIR)/$(IMG_PREFIX)-$(dts).dtb; \
$(CP) $(LINUX_DIR)/arch/$(ARCH)/boot/dts/$(dts).dtb \
$(TARGET_ROOTFS_DIR)/boot-$(DEVICE_NAME)_$(word 1, $(1))/$(IMG_PREFIX)-$(dts).dtb; \
ln -sf $(IMG_PREFIX)-$(dts).dtb \
$(TARGET_ROOTFS_DIR)/boot-$(DEVICE_NAME)_$(word 1, $(1))/$(dts).dtb; \
)
mkimage -A arm -O linux -T script -C none -a 0 -e 0 \
-n '$(DEVICE_ID) OpenWrt bootscript' \
-d ./bootscript-$(DEVICE_NAME) \
$(TARGET_ROOTFS_DIR)/boot-$(DEVICE_NAME)_$(word 1, $(1))/6x_bootscript-$(DEVICE_NAME)
$(STAGING_DIR_HOST)/bin/mkfs.ubifs \
--space-fixup --force-compr=zlib --squash-uids \
-m $(word 2, $(1)) -e $(word 3, $(1)) -c $(word 5, $(1)) \
-o $(KDIR)/boot-$(DEVICE_NAME)-bootfs_$(word 1, $(1)).ubifs \
-d $(TARGET_ROOTFS_DIR)/boot-$(DEVICE_NAME)_$(word 1, $(1))
$(CP) $(KDIR)/boot-$(DEVICE_NAME)-bootfs_$(word 1, $(1)).ubifs \
$(BIN_DIR)/$(IMG_PREFIX)-$(DEVICE_NAME)-bootfs_$(word 1, $(1)).ubifs
ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
$(CP) $(KDIR)/zImage-initramfs $(BIN_DIR)/$(IMG_PREFIX)-zImage-initramfs
$(call Image/BuildKernel/MkuImage, \
none, 0x10008000, 0x10008000, \
$(BIN_DIR)/$(IMG_PREFIX)-zImage-initramfs, \
$(BIN_DIR)/$(IMG_PREFIX)-uImage-initramfs \
)
endif
endef
define Image/InstallKernel/Template
ifneq ($(CONFIG_TARGET_ROOTFS_INCLUDE_KERNEL)$(CONFIG_TARGET_imx6_VENTANA),)
$(INSTALL_DIR) $(TARGET_DIR)/boot
ifneq ($(CONFIG_TARGET_ROOTFS_INCLUDE_UIMAGE)$(CONFIG_TARGET_imx6_VENTANA),)
$(CP) $(BIN_DIR)/$(IMG_PREFIX)-uImage $(TARGET_DIR)/boot/
ln -sf $(IMG_PREFIX)-uImage $(TARGET_DIR)/boot/uImage
endif
ifneq ($(CONFIG_TARGET_ROOTFS_INCLUDE_ZIMAGE),)
$(CP) $(BIN_DIR)/$(IMG_PREFIX)-zImage $(TARGET_DIR)/boot/
ln -sf $(IMG_PREFIX)-zImage $(TARGET_DIR)/boot/zImage
endif
ifneq ($(CONFIG_TARGET_ROOTFS_INCLUDE_FIT),)
$(foreach dts,$(shell echo $(1)), \
$(CP) $(BIN_DIR)/$(IMG_PREFIX)-$(dts)-fit-uImage.itb $(TARGET_DIR)/boot/
)
endif
endif
ifneq ($(CONFIG_TARGET_ROOTFS_INCLUDE_DTB)$(CONFIG_TARGET_imx6_VENTANA),)
$(INSTALL_DIR) $(TARGET_DIR)/boot
$(foreach dts,$(shell echo $(1)), \
$(CP) $(BIN_DIR)/$(IMG_PREFIX)-$(dts).dtb $(TARGET_DIR)/boot/ ; \
ln -sf $(IMG_PREFIX)-$(dts).dtb $(TARGET_DIR)/boot/$(dts).dtb ; \
)
endif
endef
define Image/Build/squashfs
$(call prepare_generic_squashfs,$(KDIR)/root.$(1))
dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/$(IMG_PREFIX)-$(1).bin bs=128k conv=sync
[ -f "$(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-fit-uImage.itb" ] && ( \
dd if=$(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-fit-uImage.itb bs=2048k conv=sync; \
dd if=$(KDIR)/root.$(1) bs=128k conv=sync; \
) > $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-fit-$(1).bin || true
endef
define ubifs_imx_gateworks_ventana
# Micron MT29F1G08ABAD/MT29F2G08ABAE/MT29F4G08ABAD/MT29F8G08ADAD NAND
$(eval VENTANA_UBIFS_OPTS:="-m 2048 -e 124KiB -c 8124")
$(eval VENTANA_UBI_OPTS:="-m 2048 -p 128KiB -s 2048")
$(call Image/mkfs/ubifs)
$(CP) $(KDIR)/root.ubifs $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-rootfs_normal.ubifs
$(CP) $(KDIR)/root.ubi $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-rootfs_normal.ubi
# Micron MT29F8G08ABAC/MT29F16G08ADAC 1GB/2GB NAND
$(eval VENTANA_UBIFS_OPTS:="-m 4096 -e 248KiB -c 8124")
$(eval VENTANA_UBI_OPTS:="-m 4096 -p 256KiB -s 4096")
$(call Image/mkfs/ubifs)
$(CP) $(KDIR)/root.ubifs $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-rootfs_large.ubifs
$(CP) $(KDIR)/root.ubi $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-rootfs_large.ubi
endef
define Image/Build/ubifs
true
endef
define Image/Build/ubi
true
endef
Image/BuildKernel/Template/Generic=$(call Image/BuildKernel/Template)
Image/InstallKernel/Template/Generic=$(call Image/InstallKernel/Template)
Image/BuildKernel/Template/IMX6DL_WANDBOARD=$(call Image/BuildKernel/Template,imx6dl-wandboard)
Image/InstallKernel/Template/IMX6DL_WANDBOARD=$(call Image/InstallKernel/Template,imx6dl-wandboard)
Image/BuildKernel/Template/VENTANA=$(foreach dts,$(shell echo $(VENTANA_DTS)),$(call Image/BuildKernel/Template,$(dts)))
Image/InstallKernel/Template/VENTANA=$(call Image/InstallKernel/Template,$(VENTANA_DTS))
Image/ubifs/VENTANA=$(call ubifs_imx_gateworks_ventana)
define Image/BuildKernel
$(call Image/BuildKernel/Template/$(PROFILE))
endef
define Image/InstallKernel
$(call Image/InstallKernel/Template/$(PROFILE))
$(if $(Image/ubifs/$(PROFILE)), \
$(call Image/ubifs/$(PROFILE))
# ubi
rm -rf p $(KDIR)/$(DEVICE_NAME)_$(word 1, $(1))
mkdir -p $(KDIR)/$(DEVICE_NAME)_$(word 1, $(1))
$(CP) $(word 2, $^) \
$(KDIR)/$(DEVICE_NAME)_$(word 1, $(1))/
$(CP) $(KDIR)/boot-$(DEVICE_NAME)-bootfs_$(word 1, $(1)).ubifs \
$(KDIR)/$(DEVICE_NAME)_$(word 1, $(1))/boot.ubifs
$(CP) ./ubinize-$(DEVICE_NAME).cfg \
$(KDIR)/$(DEVICE_NAME)_$(word 1, $(1))/ubinize.cfg
( cd $(KDIR)/$(DEVICE_NAME)_$(word 1, $(1)); \
$(STAGING_DIR_HOST)/bin/ubinize \
-m $(word 2, $(1)) -p $(word 4, $(1)) -s $(word 2, $(1)) \
-o $@ \
ubinize.cfg \
)
endef
define Image/Build
$(if $(Image/Build/$(1)), \
$(call Image/Build/$(1),$(1)), \
$(CP) $(KDIR)/root.$(1) $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-$(1).img \
)
#################################################
# Devices
#################################################
KERNEL_LOADADDR=0x10008000
define Device/Default
DEVICE_DTS :=
FILESYSTEMS := squashfs ext4
KERNEL_INSTALL := 1
KERNEL_SUFFIX := -uImage
KERNEL_NAME := zImage
KERNEL := kernel-bin | uImage none
IMAGE_NAME = $$(IMAGE_PREFIX)-$$(1).$$(2)
IMAGES :=
endef
DEVICE_VARS += DEVICE_DTS
define Device/ventana
PROFILES = Generic VENTANA
DEVICE_DTS:= \
imx6dl-gw51xx \
imx6dl-gw52xx \
imx6dl-gw53xx \
imx6dl-gw54xx \
imx6dl-gw551x \
imx6dl-gw552x \
imx6q-gw51xx \
imx6q-gw52xx \
imx6q-gw53xx \
imx6q-gw54xx \
imx6q-gw5400-a \
imx6q-gw551x \
imx6q-gw552x
IMAGES := nand-factory_normal.ubi nand-factory_large.ubi
IMAGE/nand-factory_normal.ubi := ubi-boot-overlay normal 2048 124KiB 128KiB 8124
IMAGE/nand-factory_large.ubi := ubi-boot-overlay large 4096 248KiB 256KiB 8124
endef
define Device/wandboard
PROFILES = Generic IMX6DL_WANDBOARD
DEVICE_DTS := imx6dl-wandboard
endef
TARGET_DEVICES += \
ventana \
wandboard
$(eval $(call BuildImage))

View File

@ -0,0 +1,150 @@
echo "Gateworks Ventana OpenWrt Boot script v1.00"
# set some defaults
# set some defaults
test -n "$fs" || fs=ext2
test -n "$disk" || disk=0
setenv nextcon 0
setenv bootargs console=${console},${baudrate}
setenv loadaddr 10800000
setenv fdt_addr 18000000
# detect displays in the following priority: HDMI, LVDS
# setenv display to override detection for a single display
# or setenv video if you want multiple displays
if test -n "$video" ; then
echo "using video config from env: $video"
setenv bootargs "${bootargs}" "${video}"
else
if test -n "$display" ; then
echo "using display from env: $display"
elif test -n "$panel" ; then
echo "using display from env: $panel"
setenv display "$panel"
else
echo "Detecting displays..."
i2c dev 2
if hdmidet ; then
echo " HDMI detected"
setenv display "HDMI"
elif i2c probe 0x04 ; then
echo " Freescale MXC-LVDS1 detected"
setenv display "LVDS"
elif i2c probe 0x14 ; then
echo " DLC800FIGT3 detected"
setenv display "LVDS"
elif i2c probe 0x38 ; then
echo " DLC700JMGT4 detected"
setenv display "LVDS"
fi
fi
# configure displays
echo "Configuring kernel bootargs for display(s): $display"
for p in ${display}; do
if itest.s "x${p}" == "xHannstar-XGA" ; then
setenv ptype "LVDS"
elif itest.s "x${p}" == "xDLC700JMGT4" ; then
setenv ptype "LVDS"
elif itest.s "x${p}" == "xDLC800FIGT3" ; then
setenv ptype "LVDS"
elif itest.s "x${p}" == "xLVDS" ; then
setenv ptype "LVDS"
elif itest.s "x${p}" == "xHDMI" ; then
setenv ptype "HDMI"
test -n "$hdmi" || hdmi=1080p
if itest.s "x${hdmi}" == "x1080p" ; then
setenv hdmi "1920x1080M@60"
elif itest.s "x${hdmi}" == "x720p" ; then
setenv hdmi "1280x720M@60"
elif itest.s "x${hdmi}" == "x480p" ; then
setenv hdmi "720x480M@60"
fi
else
echo "${p} not supported"
fi
if itest.s "x${ptype}" == "xLVDS" ; then
echo " mxcfb${nextcon}: LVDS ($p)"
setenv bootargs "${bootargs}" video=mxcfb${nextcon}:dev=ldb,bpp=32,if=RGB666
setexpr nextcon $nextcon + 1
elif itest.s "x${ptype}" == "xHDMI" ; then
echo " mxcfb${nextcon}: HDMI ($hdmi)"
setenv bootargs "${bootargs}" video=mxcfb${nextcon}:dev=hdmi,bpp=32,${hdmi},if=RGB24
setexpr nextcon $nextcon + 1
fi
done
# disable remaining mxcfb devices
while test "4" -ne $nextcon ; do
setenv bootargs "${bootargs}" video=mxcfb${nextcon}:off
setexpr nextcon $nextcon + 1
done
fi
# detect dtype and bootdev by looking for kernel on media the bootloader
# has mounted (in order of preference: usb/mmc/sata)
#
# This assumes the bootloader has already started the respective subsystem
# or mounted the filesystem if appropriate to get to this bootscript
#
# To Speed up boot set dtype manually
if test -n "$dtype" ; then
echo "Using dtype from env: $dtype"
else
echo "Detecting boot device (dtype)..."
if ${fs}load usb ${disk}:1 ${loadaddr} ${bootdir}/uImage ; then
dtype=usb
elif ${fs}load mmc ${disk}:1 ${loadaddr} ${bootdir}/uImage ; then
dtype=mmc
elif ${fs}load sata ${disk}:1 ${loadaddr} ${bootdir}/uImage ; then
dtype=sata
elif ubifsload ${loadaddr} ${bootdir}/uImage ; then
dtype=nand
fi
echo "detected dtype:$dtype"
fi
if test -n "$bootdev" ; then
echo "Using bootdev from env: $bootdev"
else
if itest.s "x${dtype}" == "xmmc" ; then
bootdev=mmcblk0
else
bootdev=sda
fi
fi
if itest.s "x${dtype}" == "xnand" ; then
echo "Booting from NAND..."
# fix partition name
# OpenWrt kernel bug prevents partition name of 'rootfs' from booting
# instead name the partition ubi which is what is looked for by
# procd sysupgrade
mtdparts del rootfs && mtdparts add nand0 - ubi
echo "mtdparts:${mtdparts}"
setenv fsload ubifsload
setenv root "ubi0:ubi ubi.mtd=2 rootfstype=squashfs,ubifs"
else
echo "Booting from block device ${bootdev}..."
setenv fsload "${fs}load ${dtype} ${disk}:1"
setenv root "root=/dev/${bootdev}"
fi
setenv bootargs "${bootargs}" "${root}" "${extra}"
if ${fsload} ${loadaddr} ${bootdir}/uImage; then
if ${fsload} ${fdt_addr} ${bootdir}/${fdt_file}; then
echo Loaded DTB from ${bootdir}/${fdt_file}
bootm ${loadaddr} - ${fdt_addr}
elif ${fsload} ${fdt_addr} ${bootdir}/${fdt_file1}; then
echo Loaded DTB from ${bootdir}/${fdt_file1}
bootm ${loadaddr} - ${fdt_addr}
elif ${fsload} ${fdt_addr} ${bootdir}/${fdt_file2}; then
echo Loaded DTB from ${bootdir}/${fdt_file2}
bootm ${loadaddr} - ${fdt_addr}
else
echo "Error loading device-tree"
fi
else
echo "Error loading kernel image"
fi

View File

@ -0,0 +1,37 @@
[boot]
# Volume mode (other option is static)
mode=ubi
# Source image
image=boot.ubifs
# Volume ID in UBI image
vol_id=0
# Allow for dynamic resize
vol_type=dynamic
# Volume name
vol_name=boot
vol_size=15MiB
[rootfs]
# Volume mode (other option is static)
mode=ubi
# Source image
image=root.squashfs
# Volume ID in UBI image
vol_id=1
# Allow for dynamic resize
vol_type=dynamic
# Volume name
vol_name=rootfs
[rootfs_data]
# Volume mode (other option is static)
mode=ubi
# Volume ID in UBI image
vol_id=2
# Allow for dynamic resize
vol_type=dynamic
# Volume name
vol_name=rootfs_data
# Autoresize volume at first mount
vol_flags=autoresize
vol_size=1MiB