Преглед изворни кода

rootfs-cpio: add U-Boot image support

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>
Arnout Vandecappelle пре 11 година
родитељ
комит
3970ebf837
2 измењених фајлова са 33 додато и 1 уклоњено
  1. 12 1
      fs/cpio/Config.in
  2. 21 0
      fs/cpio/cpio.mk

+ 12 - 1
fs/cpio/Config.in

@@ -5,10 +5,11 @@ config BR2_TARGET_ROOTFS_CPIO
 	  used for an initial RAM filesystem that is passed to the kernel
 	  used for an initial RAM filesystem that is passed to the kernel
 	  by the bootloader.
 	  by the bootloader.
 
 
+if BR2_TARGET_ROOTFS_CPIO
+
 choice
 choice
 	prompt "Compression method"
 	prompt "Compression method"
 	default BR2_TARGET_ROOTFS_CPIO_NONE
 	default BR2_TARGET_ROOTFS_CPIO_NONE
-	depends on BR2_TARGET_ROOTFS_CPIO
 	help
 	help
 	  Select compressor for cpio filesystem of the root filesystem.
 	  Select compressor for cpio filesystem of the root filesystem.
 	  If you use the cpio archive as an initial RAM filesystem, make
 	  If you use the cpio archive as an initial RAM filesystem, make
@@ -47,3 +48,13 @@ config BR2_TARGET_ROOTFS_CPIO_XZ
 
 
 endchoice
 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

+ 21 - 0
fs/cpio/cpio.mk

@@ -31,4 +31,25 @@ define ROOTFS_CPIO_CMD
 	cd $(TARGET_DIR) && find . | cpio --quiet -o -H newc > $@
 	cd $(TARGET_DIR) && find . | cpio --quiet -o -H newc > $@
 endef
 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))
 $(eval $(call ROOTFS_TARGET,cpio))