rootfs-cpio: add U-Boot image support
authorArnout Vandecappelle <arnout@mind.be>
Wed, 6 Nov 2013 23:12:34 +0000 (00:12 +0100)
committerPeter Korsgaard <peter@korsgaard.com>
Sun, 10 Nov 2013 23:34:31 +0000 (00:34 +0100)
Adds U-Boot image support for cpio root filesystems. This allows you to
use the bootm command in U-Boot to load the rootfs. It makes it possible to
verify the CRC of the initramfs before booting the kernel.

[Spenser: wrote first version of the patch.]
Signed-off-by: Spenser Gilliland <spenser@gillilanding.com>
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
fs/cpio/Config.in
fs/cpio/cpio.mk

index fd85d29debd93f9b89ef3e60c9c5f8fd1d46f4a4..206baca6771d23bdf634ba96071834feb4877619 100644 (file)
@@ -5,10 +5,11 @@ config BR2_TARGET_ROOTFS_CPIO
          used for an initial RAM filesystem that is passed to the kernel
          by the bootloader.
 
+if BR2_TARGET_ROOTFS_CPIO
+
 choice
        prompt "Compression method"
        default BR2_TARGET_ROOTFS_CPIO_NONE
-       depends on BR2_TARGET_ROOTFS_CPIO
        help
          Select compressor for cpio filesystem of the root filesystem.
          If you use the cpio archive as an initial RAM filesystem, make
@@ -47,3 +48,13 @@ config BR2_TARGET_ROOTFS_CPIO_XZ
 
 endchoice
 
+config BR2_TARGET_ROOTFS_CPIO_UIMAGE
+       bool "Create U-Boot image of the root filesystem"
+       select BR2_PACKAGE_HOST_UBOOT_TOOLS
+       help
+         Add a U-Boot header to the cpio root filesystem. This allows
+         the initramfs to be loaded with the bootm command in U-Boot.
+
+         The U-Boot image will be called rootfs.cpio.uboot
+
+endif # BR2_TARGET_ROOTFS_CPIO
index 0df23785bf8b8e3fbab471126bf23363dc6ff28e..e39e21555371f268e95c0aaa307591eeb9882b7d 100644 (file)
@@ -31,4 +31,25 @@ define ROOTFS_CPIO_CMD
        cd $(TARGET_DIR) && find . | cpio --quiet -o -H newc > $@
 endef
 
+# mkimage supports arm avr32 blackfin m68k microblaze mips mips64 nios2 powerpc ppc sh sparc sparc64 x86
+# KERNEL_ARCH can be arm64 arc arm avr32 blackfin m68k microblaze mips nios2 powerpc sh sparc i386 x86_64 xtensa
+# For arm64, arc, xtensa we'll just keep KERNEL_ARCH
+# For mips64, we'll just keep mips
+# For i386 and x86_64, we need to convert
+ifeq ($(KERNEL_ARCH),x86_64)
+UIMAGE_ARCH = x86
+else ifeq ($(KERNEL_ARCH),i386)
+UIMAGE_ARCH = x86
+else
+UIMAGE_ARCH = $(KERNEL_ARCH)
+endif
+
+$(BINARIES_DIR)/rootfs.cpio.uboot: $(BINARIES_DIR)/rootfs.cpio host-uboot-tools
+       $(HOST_DIR)/usr/bin/mkimage -A $(UIMAGE_ARCH) -T ramdisk \
+               -C none -d $<$(ROOTFS_CPIO_COMPRESS_EXT) $@
+
+ifeq ($(BR2_TARGET_ROOTFS_CPIO_UIMAGE),y)
+ROOTFS_CPIO_POST_TARGETS += $(BINARIES_DIR)/rootfs.cpio.uboot
+endif
+
 $(eval $(call ROOTFS_TARGET,cpio))