imx6: reorganize build system

Changes include:

 * switching to profiles
 * adding ubifs support
 * building image for GW54XX board

Signed-off-by: Luka Perkov <luka@openwrt.org>

SVN-Revision: 38441
This commit is contained in:
Luka Perkov 2013-10-18 00:02:45 +00:00
parent f22196e4e9
commit ee5b7c2859
6 changed files with 162 additions and 36 deletions

View file

@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
ARCH:=arm
BOARD:=imx6
BOARDNAME:=Freescale i.MX 6 Series
FEATURES:=audio display gpio pcie usb usbgadget squashfs targz
FEATURES:=audio display gpio pcie usb usbgadget squashfs targz ubifs
CPU_TYPE:=cortex-a9
CPU_SUBTYPE:=vfpv3
MAINTAINER:=Luka Perkov <luka@openwrt.org>

View file

@ -7,23 +7,20 @@
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/image.mk
BOARDS := \
imx6dl-wandboard \
imx6q-gw5400-a
define get_human_name
$(shell echo $(PROFILE) | tr '[:upper:]' '[:lower:]' | sed 's/_/-/g')
endef
# emit FIT images, DTB's and generic zImage
define Image/BuildKernel
$(foreach board,$(BOARDS),
cp $(LINUX_DIR)/arch/arm/boot/dts/$(board).dtb $(BIN_DIR)/$(IMG_PREFIX)-$(board).dtb
define Image/BuildKernel/Template
cp $(LINUX_DIR)/arch/arm/boot/dts/$(1).dtb $(BIN_DIR)/$(IMG_PREFIX)-$(1).dtb
$(call Image/BuildKernel/MkFIT,$(board),$(KDIR)/zImage,$(BIN_DIR)/$(IMG_PREFIX)-$(board).dtb,none,0x10008000,0x10008000)
cp $(KDIR)/fit-$(board).itb $(BIN_DIR)/$(IMG_PREFIX)-$(board)-uImage.itb
$(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,$(board),$(KDIR)/zImage-initramfs,$(BIN_DIR)/$(IMG_PREFIX)-$(board).dtb,none,0x10008000,0x10008000,-initramfs)
cp $(KDIR)/fit-$(board)-initramfs.itb $(BIN_DIR)/$(IMG_PREFIX)-$(board)-uImage-initramfs.itb
$(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
)
cp $(KDIR)/zImage $(BIN_DIR)/$(IMG_PREFIX)-zImage
@ -32,32 +29,76 @@ define Image/BuildKernel
endif
endef
# board-specific sysupgrade image
define BuildFirmware/Generic
dd if=$(BIN_DIR)/$(IMG_PREFIX)-$(1)-uImage.itb of=$(KDIR)/uImage.pad bs=64k conv=sync; \
dd if=$(KDIR)/root.$(2) of=$(KDIR)/root.$(2).pad bs=128k conv=sync; \
sh $(TOPDIR)/scripts/combined-image.sh \
$(KDIR)/uImage.pad \
$(KDIR)/root.$(2).pad \
$(BIN_DIR)/$(IMG_PREFIX)-$(patsubst jffs2-%,jffs2,$(patsubst squashfs-%,squashfs,$(1)))-sysupgrade.bin
define Image/InstallKernel/Template
ifneq ($(CONFIG_TARGET_ROOTFS_INCLUDE_KERNEL),)
$(INSTALL_DIR) $(TARGET_DIR)/boot
$(CP) $(BIN_DIR)/$(IMG_PREFIX)-zImage $(TARGET_DIR)/boot/
ln -sf $(IMG_PREFIX)-zImage $(TARGET_DIR)/boot/zImage
endif
ifneq ($(CONFIG_TARGET_ROOTFS_INCLUDE_DTB),)
$(INSTALL_DIR) $(TARGET_DIR)/boot
ifneq ($(1),)
$(CP) $(BIN_DIR)/$(IMG_PREFIX)-$(1).dtb $(TARGET_DIR)/boot/
endif
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
( \
dd if=$(BIN_DIR)/$(IMG_PREFIX)-$(call get_human_name)-fit-uImage.itb bs=2048k conv=sync; \
dd if=$(KDIR)/root.$(1) bs=128k conv=sync; \
) > $(BIN_DIR)/$(IMG_PREFIX)-$(call get_human_name)-fit-$(1).bin
endef
define Image/mkfs/targz
$(TAR) -czpf $(BIN_DIR)/$(IMG_PREFIX)-$(call get_human_name)-rootfs.tar.gz --numeric-owner --owner=0 --group=0 -C $(TARGET_DIR)/ .
endef
define Image/Build/ubifs
ifneq ($($(PROFILE)_UBIFS_OPTS),)
$(CP) $(KDIR)/root.ubifs $(BIN_DIR)/$(IMG_PREFIX)-$(call get_human_name)-ubifs.img
endif
endef
define Image/Build/ubi
ifneq ($($(PROFILE)_UBI_OPTS),)
$(CP) $(KDIR)/root.ubi $(BIN_DIR)/$(IMG_PREFIX)-$(call get_human_name)-ubi.img
endif
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/IMX6Q_GW5400_A=$(call Image/BuildKernel/Template,imx6q-gw5400-a)
Image/InstallKernel/Template/IMX6Q_GW5400_A=$(call Image/InstallKernel/Template,imx6q-gw5400-a)
Image/BuildKernel/Template/IMX6Q_GW54XX=$(call Image/BuildKernel/Template,imx6q-gw54xx)
Image/InstallKernel/Template/IMX6Q_GW54XX=$(call Image/InstallKernel/Template,imx6q-gw54xx)
define Image/BuildKernel
$(call Image/BuildKernel/Template/$(PROFILE))
endef
define Image/InstallKernel
$(call Image/InstallKernel/Template/$(PROFILE))
endef
define Image/Build
$(call Image/Build/$(1),$(1))
$(foreach board,$(BOARDS),
$(call BuildFirmware/Generic,$(board),$(1))
)
endef
# rootfs and board-specific combined kernel+rootfs for convenience
define Image/Build/squashfs
$(call prepare_generic_squashfs,$(KDIR)/root.$(1))
dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/$(IMG_PREFIX)-$(1).img bs=128k conv=sync; \
$(foreach board,$(BOARDS),
( \
dd if=$(BIN_DIR)/$(IMG_PREFIX)-$(board)-uImage.itb bs=2048k conv=sync; \
dd if=$(KDIR)/root.$(1) bs=64k conv=sync; \
) > $(BIN_DIR)/$(IMG_PREFIX)-$(board)-$(1).bin
$(if $(Image/Build/$(1)), \
$(call Image/Build/$(1),$(1)), \
$(CP) $(KDIR)/root.$(1) $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-$(1).img \
)
endef

View file

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

View file

@ -0,0 +1,15 @@
#
# Copyright (C) 2013 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
define Profile/IMX6DL_WANDBOARD
NAME:=Wandboard Dual
PACKAGES:= \
kmod-thermal-imx kmod-usb-chipidea kmod-usb-mxs-phy \
uboot-envtools
endef
$(eval $(call Profile,IMX6DL_WANDBOARD))

View file

@ -0,0 +1,57 @@
#
# Copyright (C) 2013 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
define Profile/IMX6Q_GW5400_A
NAME:=Gateworks Ventana GW5400-A
PACKAGES:= \
kmod-thermal-imx kmod-usb-chipidea kmod-usb-mxs-phy
endef
define Profile/IMX6Q_GW5400_A/Description
The Gateworks GW5400-A family of products is based on the Freescale i.MX6Q SoC
and offers a large variety of peripherals such as:
* DDR3
* SPI FLASH
* 6x PCIe (3x with USB)
* Optional expansion for additional USB/PCI based periperhals
* 1x USB EHCI
* 1x USB OTG
* HDMI Audio/Video in/out
* Analog Video in/out
* Analog Audio in/out
* Gateworks System Controller
endef
$(eval $(call Profile,IMX6Q_GW5400_A))
define Profile/IMX6Q_GW54XX
NAME:=Gateworks Ventana GW54XX
PACKAGES:= \
kmod-thermal-imx kmod-usb-chipidea kmod-usb-mxs-phy
endef
define Profile/IMX6Q_GW54XX/Description
The Gateworks GW54xx family of products is based on the Freescale i.MX6Q SoC
and offers a large variety of peripherals such as:
* DDR3
* NAND FLASH
* 6x PCIe (3x with USB)
* Optional expansion for additional USB/PCI based periperhals
* 1x USB EHCI
* 1x USB OTG
* HDMI Audio/Video in/out
* Analog Video in/out
* Analog Audio in/out
* Gateworks System Controller
endef
IMX6Q_GW54XX_UBIFS_OPTS:="-m 2048 -e 124KiB -c 1912"
IMX6Q_GW54XX_UBI_OPTS:="-m 2048 -p 128KiB -s 2048"
$(eval $(call Profile,IMX6Q_GW54XX))