UBIFS
Note: UBIFS is now the default rootfs filesystem used on APF27, APF28 & APF51 boards, so this page should only be considered as reference for these boards. Due to the FLASH memory size of the APF9328 board, there is no added value to use UBIFS on this board. |
This is a preliminary page dealing with the installation of UBIFS on the APF boards.
UBIFS will replace JFFS2 file system on NAND (and NOR as well) based boards because JFFS2 induces a big overhead when parsing, reading and writing large devices, see UBIFS scalability.
Contents
Introduction
Host Setup
- add uuid-dev packages (should be already installed as required to build the HEAD of Armadeus repository):
$ sudo apt-get install uuid-dev
APF build config
Buildroot
$ make menuconfig
APF51:
Target filesystem options ---> [*] ubifs root filesystem (0x1f800) UBI logical erase block size (0x800) UBI minimum I/O size (2047) Maximum LEB count ubifs runtime compression (lzo) ---> Compression method (no compression) ---> [*] UBI image (0x20000) UBI physical erase block size (512) UBI sub-page size
APF27:
Target filesystem options ---> [*] ubifs root filesystem (0x20000) UBI physical erase block size (0x1f800) UBI logical erase block size (0x800) UBI minimum I/O size (512) UBI sub-page size (2047) Maximum LEB count
$ make
Linux
$ make linux-menuconfig
File systems ---> [*] Miscellaneous filesystems ---> <*> UBIFS file system support and disable debugging !! Device Drivers ---> <*> Memory Technology Device (MTD) support ---> UBI - Unsorted block images ---> <*> Enable UBI (4096) UBI wear-leveling threshold and disable debugging !!
$ make linux
- reflash your kernel
U-Boot envt variables
BIOS> setenv bootcmd run ubifsboot BIOS> setenv download_rootfs tftpboot \${loadaddr} \${serverpath}\${board_name}-rootfs.arm.ubi
Additional informations
A new file 'ubinize.cfg' defining the ubi volumes is located in buildroot/target/ubifs/. This file contains the different UBI volumes of the UBI image:
[ubifs] mode=ubi vol_id=0 vol_type=dynamic vol_name=rootfs vol_alignment=1 vol_flags=autoresize
This file is processed by the ubinize utility after mkfs.ubifs.
U-Boot access to UBIFS partitions
U-Boot can read files from the rootfs / UBIFS partition using the commands: uni, ubifsmount, ubifsls, ubifsload. Here is an example applicable to the apf27, apf28 and apf51 boards:
BIOS> ubi part rootfs UBI: attaching mtd1 to ubi0 UBI: physical eraseblock size: 131072 bytes (128 KiB) UBI: logical eraseblock size: 129024 bytes UBI: smallest flash I/O unit: 2048 UBI: sub-page size: 512 UBI: VID header offset: 512 (aligned 512) UBI: data offset: 2048 UBI: attached mtd1 to ubi0 UBI: MTD device name: "mtd=7" UBI: MTD device size: 500 MiB UBI: number of good PEBs: 3988 UBI: number of bad PEBs: 12 UBI: max. allowed volumes: 128 UBI: wear-leveling threshold: 4096 UBI: number of internal volumes: 1 UBI: number of user volumes: 1 UBI: available PEBs: 0 UBI: total number of reserved PEBs: 3988 UBI: number of PEBs reserved for bad PEB handling: 39 UBI: max/mean erase counter: 2/0 BIOS> ubifsmount ubi0:rootfs UBIFS: mounted UBI device 0, volume 0, name "rootfs" UBIFS: mounted read-only UBIFS: file system size: 504483840 bytes (492660 KiB, 481 MiB, 3910 LEBs) UBIFS: journal size: 9033728 bytes (8822 KiB, 8 MiB, 71 LEBs) UBIFS: media format: w4/r0 (latest is w4/r0) UBIFS: default compressor: LZO UBIFS: reserved for root: 0 bytes (0 KiB) BIOS> ubifsls /boot 2604048 Thu Oct 03 08:38:56 2013 apf51-linux.bin BIOS> ubifsload 90000000 /boot/apf51-linux.bin Loading file '/boot/apf51-linux.bin' to addr 0x90000000 with size 2604048 (0x0027bc10)... Done
Acces to UBIFS files from U-Boot can be used for an update of your system after deployment on site, through some U-Boot scripts..