Browse Source

Implement UBIFS rootfs support

This implements UBIFS rootfs, enables it for mips targets and adds the
necessary settings for rb532.

Signed-off-by: Phil Sutter <phil@nwl.cc>
Phil Sutter 7 years ago
parent
commit
2d7388bc33
5 changed files with 59 additions and 1 deletions
  1. 19 0
      mk/image.mk
  2. 1 0
      mk/rootfs.mk
  3. 9 0
      target/config/Config.in.rootfs
  4. 22 1
      target/linux/config/Config.in.flash
  5. 8 0
      target/mips/Makefile

+ 19 - 0
mk/image.mk

@@ -122,6 +122,7 @@ TARGET_KERNEL=		${ADK_TARGET_SYSTEM}-${ADK_TARGET_FS}-kernel
 INITRAMFS=		${ADK_TARGET_SYSTEM}-${ADK_TARGET_LIBC}-${ADK_TARGET_FS}
 ROOTFSSQUASHFS=		${ADK_TARGET_SYSTEM}-${ADK_TARGET_LIBC}-${ADK_TARGET_FS}.img
 ROOTFSJFFS2=		${ADK_TARGET_SYSTEM}-${ADK_TARGET_LIBC}-jffs2.img
+ROOTFSUBIFS=		${ADK_TARGET_SYSTEM}-${ADK_TARGET_LIBC}-ubifs.img
 ROOTFSTARBALL=		${ADK_TARGET_SYSTEM}-${ADK_TARGET_LIBC}-${ADK_TARGET_FS}+kernel.tar.xz
 ROOTFSUSERTARBALL=	${ADK_TARGET_SYSTEM}-${ADK_TARGET_LIBC}-${ADK_TARGET_FS}.tar.xz
 ROOTFSISO=		${ADK_TARGET_SYSTEM}-${ADK_TARGET_LIBC}.iso
@@ -191,6 +192,24 @@ ${FW_DIR}/${ROOTFSJFFS2}: ${TARGET_DIR}
 	PATH='${HOST_PATH}' mkfs.jffs2 $(ADK_JFFS2_OPTS) -q -r ${TARGET_DIR} \
 		--pad=$(ADK_TARGET_MTD_SIZE) -o ${FW_DIR}/${ROOTFSJFFS2} $(MAKE_TRACE)
 
+${FW_DIR}/${ROOTFSUBIFS}: ${TARGET_DIR}
+	( \
+		PATH='${HOST_PATH}'; \
+		SP_SIZE='${ADK_TARGET_FLASH_SUBPAGE_SIZE}'; \
+		PG_SZIE='${ADK_TARGET_FLASH_PAGE_SIZE}'; \
+		LEB_SIZE=$$(((($$SP_SIZE + $$PG_SIZE) / $$PG_SIZE) * $$PG_SIZE)); \
+		mkfs.ubifs -r ${TARGET_DIR} \
+			-m $$PG_SIZE \
+			-e $$((${ADK_TARGET_FLASH_PEB_SIZE} - $$LEB_SIZE)) \
+			-c $$(((${ADK_TARGET_MTD_SIZE} / $$LEB_SIZE))) \
+			-o ${FW_DIR}/rootfs.ubifs; \
+		cd ${FW_DIR} && ubinize -o $@ \
+			-p ${ADK_TARGET_FLASH_PEB_SIZE} \
+			-m ${ADK_TARGET_FLASH_PAGE_SIZE} \
+			-s ${ADK_TARGET_FLASH_SUBPAGE_SIZE} \
+			"${ADK_TOPDIR}/target/${ADK_TARGET_ARCH}/${ADK_TARGET_SYSTEM}/ubinize.cfg"; \
+	) $(MAKE_TRACE)
+
 createinitramfs: ${STAGING_TARGET_DIR}/${INITRAMFS}_list
 	${SED} 's/.*CONFIG_\(RD_\|BLK_DEV_INITRD\|INITRAMFS_\).*//' \
 		${LINUX_DIR}/.config

+ 1 - 0
mk/rootfs.mk

@@ -58,6 +58,7 @@ $(eval $(call rootfs_template,initramfspiggyback,INITRAMFSPIGGYBACK,rootfstype=t
 $(eval $(call rootfs_template,initramfsarchive,INITRAMFSARCHIVE,rootfstype=tmpfs))
 $(eval $(call rootfs_template,squashfs,SQUASHFS,$(MTDDEV) rootfstype=squashfs))
 $(eval $(call rootfs_template,yaffs,YAFFS,$(MTDDEV)))
+$(eval $(call rootfs_template,ubifs,UBIFS,ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs))
 $(eval $(call rootfs_template,jffs2,JFFS2,$(MTDDEV) rootfstype=jffs2))
 $(eval $(call rootfs_template,nfsroot,NFSROOT,root=/dev/nfs ip=dhcp))
 $(eval $(call rootfs_template,encrypted,ENCRYPTED))

+ 9 - 0
target/config/Config.in.rootfs

@@ -87,6 +87,15 @@ config ADK_TARGET_ROOTFS_YAFFS
 	help
 	  Root filesystem on NAND flash with YAFFS2.
 
+config ADK_TARGET_ROOTFS_UBIFS
+	bool "UBIFS root filesystem (NAND)"
+	select ADK_KERNEL_UBIFS_FS
+	select ADK_HOST_NEED_MTD_UTILS
+	select ADK_HOST_NEED_KERNEL2MINOR
+	depends on ADK_TARGET_WITH_NAND
+	help
+	  Root filesystem on NAND flash with UBI.
+
 config ADK_TARGET_ROOTFS_NFSROOT
 	bool "NFS root"
 	select ADK_KERNEL_NETWORK_FILESYSTEMS

+ 22 - 1
target/linux/config/Config.in.flash

@@ -163,9 +163,30 @@ config ADK_TARGET_MTD_SIZE
 	int
 	depends on ADK_TARGET_SYSTEM_QEMU_MICROBLAZE_S3ADSP1800 \
 		|| ADK_TARGET_SYSTEM_QEMU_MICROBLAZE_ML605 \
-		|| ADK_TARGET_SYSTEM_QEMU_ARM_VEXPRESS_A9
+		|| ADK_TARGET_SYSTEM_QEMU_ARM_VEXPRESS_A9 \
+		|| ADK_TARGET_SYSTEM_MIKROTIK_RB532
 	default "16777216" if ADK_TARGET_SYSTEM_QEMU_MICROBLAZE_S3ADSP1800
 	default "33554432" if ADK_TARGET_SYSTEM_QEMU_MICROBLAZE_ML605
+	default "134217728" if ADK_TARGET_SYSTEM_MIKROTIK_RB532
 	default "0"
 
+config ADK_TARGET_FLASH_PEB_SIZE
+	int
+	default 131072 if ADK_TARGET_SYSTEM_MIKROTIK_RB532
+	help
+	  Physical Erase Block size.
+
+config ADK_TARGET_FLASH_PAGE_SIZE
+	int
+	default 2048 if ADK_TARGET_SYSTEM_MIKROTIK_RB532
+	help
+	  Minimum input/output size.
+
+config ADK_TARGET_FLASH_SUBPAGE_SIZE
+	int
+	default 512 if ADK_TARGET_SYSTEM_MIKROTIK_RB532
+	default ADK_TARGET_FLASH_PAGE_SIZE
+	help
+	  Size of NAND sub-pages (if supported).
+
 endmenu

+ 8 - 0
target/mips/Makefile

@@ -87,6 +87,11 @@ else
 	@echo 'sudo dd if=$(FW_DIR)/disk.img of=/dev/sdX bs=2048k'
 endif
 endif
+ifeq ($(ADK_TARGET_FS),ubifs)
+targethelp:
+	@echo 'The kernel file is: $(FW_DIR)/${TARGET_KERNEL}'
+	@echo 'The UBI image is: ${FW_DIR}/${ROOTFSUBIFS}'
+endif
 
 # image creation and kernel install
 kernel-strip:
@@ -121,3 +126,6 @@ endif
 ifeq ($(ADK_TARGET_FS),yaffs)
 imageinstall: $(FW_DIR)/$(ROOTFSTARBALL) targethelp
 endif
+ifeq ($(ADK_TARGET_FS),ubifs)
+imageinstall: $(FW_DIR)/$(ROOTFSUBIFS) targethelp
+endif