Ver Fonte

zynq: add sdcard image support

Implement the generation of sdcard images with ext4 or
squashfs + f2fs overlay, but only enable the latter
automatically

Additionally, add mkf2fs and e2fsprogs to default packages
to manipulate ext4 and f2fs filesystems

Finally, disable the automatic generation of initramfs
and rootfs.tar.gz images, as they are no longer required
(they can still be selected in menuconfig)

Signed-off-by: Luis Araneda <[email protected]>
Luis Araneda há 7 anos atrás
pai
commit
412763c812

+ 2 - 2
target/linux/zynq/Makefile

@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 ARCH:=arm
 BOARD:=zynq
 BOARDNAME:=Xilinx Zynq 7000 SoCs
-FEATURES:=fpu gpio rtc usb usbgadget ramdisk targz
+FEATURES:=fpu gpio rtc usb usbgadget boot-part rootfs-part squashfs
 CPU_TYPE:=cortex-a9
 CPU_SUBTYPE:=neon
 MAINTAINER:=Jason Wu <[email protected]>
@@ -26,6 +26,6 @@ include $(INCLUDE_DIR)/target.mk
 
 KERNELNAME:=Image dtbs
 
-DEFAULT_PACKAGES += uboot-envtools
+DEFAULT_PACKAGES += uboot-envtools mkf2fs e2fsprogs
 
 $(eval $(call BuildTarget))

+ 20 - 0
target/linux/zynq/image/Makefile

@@ -7,6 +7,24 @@
 include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/image.mk
 
+FAT32_BLOCK_SIZE=1024
+FAT32_BLOCKS=$(shell echo $$(($(CONFIG_TARGET_KERNEL_PARTSIZE)*1024*1024/$(FAT32_BLOCK_SIZE))))
+
+define Build/zynq-sdcard
+	rm -f [email protected]
+	mkfs.fat [email protected] -C $(FAT32_BLOCKS)
+	mcopy -i [email protected] $(STAGING_DIR_IMAGE)/$(DEVICE_NAME)-boot.bin ::boot.bin
+	mcopy -i [email protected] $(STAGING_DIR_IMAGE)/$(DEVICE_NAME)-u-boot.img ::u-boot.img
+	mcopy -i [email protected] $(STAGING_DIR_IMAGE)/$(DEVICE_NAME)-uEnv.txt ::uEnv.txt
+	mcopy -i [email protected] $(IMAGE_KERNEL) ::fit.itb
+	./gen_zynq_sdcard_img.sh $@ \
+		[email protected] \
+		$(IMAGE_ROOTFS) \
+		$(CONFIG_TARGET_KERNEL_PARTSIZE) \
+		$(CONFIG_TARGET_ROOTFS_PARTSIZE)
+	rm -f [email protected]
+endef
+
 #################################################
 # Default and templates
 #################################################
@@ -17,6 +35,8 @@ define Device/Default
 	KERNEL_INITRAMFS_PREFIX := $$(IMG_PREFIX)-$(1)-initramfs
 	KERNEL_PREFIX := $$(IMAGE_PREFIX)
 	KERNEL_LOADADDR := 0x8000
+	IMAGES := sdcard.img.gz
+	IMAGE/sdcard.img.gz := zynq-sdcard | gzip
 endef
 
 define Device/FitImageGzip

+ 26 - 0
target/linux/zynq/image/gen_zynq_sdcard_img.sh

@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+
+set -ex
+[ $# -eq 5 ] || {
+    echo "SYNTAX: $0 <file> <bootfs image> <rootfs image> <bootfs size> <rootfs size>"
+    exit 1
+}
+
+OUTPUT="$1"
+BOOTFS="$2"
+ROOTFS="$3"
+BOOTFSSIZE="$4"
+ROOTFSSIZE="$5"
+
+head=4
+sect=63
+
+set $(ptgen -o $OUTPUT -h $head -s $sect -l 1024 -t c -p ${BOOTFSSIZE}M -t 83 -p ${ROOTFSSIZE}M)
+
+BOOTOFFSET="$(($1 / 512))"
+BOOTSIZE="$(($2 / 512))"
+ROOTFSOFFSET="$(($3 / 512))"
+ROOTFSSIZE="$(($4 / 512))"
+
+dd bs=512 if="$BOOTFS" of="$OUTPUT" seek="$BOOTOFFSET" conv=notrunc
+dd bs=512 if="$ROOTFS" of="$OUTPUT" seek="$ROOTFSOFFSET" conv=notrunc