如题
离线
/opt/f1c100s/buildroot/output/host/sbin/mkfs.ubifs -d /opt/f1c100s/buildroot/output/build/buildroot-fs/ubifs/target -e 0x1f800 -c 2048 -m 0x800 -x lzo -o /opt/f1c100s/buildroot_/output/images/rootfs.ubifs
/opt/f1c100s/buildroot/output/host/sbin/ubinize -o /opt/f1c100s/buildroot/output/images/rootfs.ubi -m 0x800 -p 0x20000 -s 512 /opt/f1c100s/buildroot/output/build/ubinize.cfg
好奇去看了一下buildroot log
离线
3.制作 ubifs
Ubifs 的制作需要以下两个命令
mkfs.ubifs: 制作 UBIFS image
ubinize:根据 UBIFS image 制作 ubi.img,这个 ubi.img 是通过 u-boot 直接烧写在 nand flash 分区上的。
AM335x Linux SDK 里面带有制作好的文件系统,是.tar.gz 的压缩文件,可以解压在
一个目录下做为 UBI 文件系统内容,如/home/usr/fs。
GPEVM 板上的 NAND 型号为 MT29F2G08,page size 为 2048B,block size 为
64x2048B=131072B,block count 为 2048。如果制作针对 GPEVM 板的 ubifs,执行
如下两条命令:
1. $ mkfs.ubifs –F -q -r /home/usr/fs -m 2048 -e 126976 -c 2047 -o ubifs.img
参数简介:
-F:使能"white-space-fixup",如果是通过 u-boot 烧写需要使能此功能。
-r:待制作的文件系统目录
-m:NAND FLASH 的最小读写单元,一般为 page size
-e:LEB size,对于 AM335x 的 NAND driver,为 block size-2x(page size)
-c:文件系统所占用的最大 block 数,一般小于等于 block count -1
-o:输出的 ubifs.img 文件
2. $ ubinize -o ubi.img -m 2048 -p 128KiB ubinize.cfg
参数简介:
-p:block size。
-m:NAND FLASH 的最小读写单元,一般为 page size
-o:输出的 ubi.img 文件
ubinize.cfg 为 ubinize 所需要的配置文件,内容如下:
[ubifs]
mode=ubi
image=ubifs.img
vol_id=0
vol_size=200MiB
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
4.烧写 ubifs
可通过 u-boot 命令将生成的 ubi.img(25M)烧写到 NAND FLASH 分区上,如下示
例是将 ubi.img 先存储到 SD 卡上,然后通过 u-boot 的 fatload 命令将其拷贝至内存
中。
u-boot# mw.b 0x82000000 0xFF
u-boot# mmc rescan
u-boot# fatload mmc 0 0x82000000 ubi.img
u-boot# nand erase 0x00780000 0xF880000
u-boot# nand write 0x82000000 0x00780000 0x1E00000
5.Linux 启动设置
在 U-boot 下设置启动信息如下:
#setenv bootargs 'console=ttyO0,115200n8 noinitrd ip=off mem=256M
rootwait=1 rw ubi.mtd=7,2048 rootfstype=ubifs root=ubi0:rootfs
init=/init'
以上是转载
离线
感谢楼上两位大佬,我大概明白了,
ubifs是用mkfs.ubifs生成的,不能直接烧录到flash,
而ubi文件是ubinize文件生成的,可以直接烧录到nand flash,
ubi文件包含上面生成的ubifs文件,并且在cfg配置文件给该img文件起一个卷名(volume name)
离线
https://www.digi.com/support/knowledge-base/difference-between-ubifs-and-ubi-file-systems-on-c
The UBIFS image is a file system image.It works on top of a UBI volume.You cannot flash it on the raw flash device */dev/mtd*. You need to create UBI volume first and then update the volume with UBIFS image.
The UBI image is a UBI volume image. It uses the UBIFS image and some other metadata to create a volume on top of a raw flash device */dev/mtd*. In other words you can flash directly a UBI image with standard *nandwrite* command using the '/dev/mtdx' char device.
On CCWi-i.MX51 or CCWi-i.MX53 platforms , u-boot requires UBIFS image, because the internals of u-boot will create the UBI volume and then updates it with UBIFS image.
The UBI image is meant to be used directly by the operating system (Linux/Android), but at the moment Digi use it only on Linux.
离线
Question
What is the difference between UBI and UBIFS?
Answer
The UBI subsystem works on top of MTD devices and provides a notion of UBI volumes. UBIFS filesystem works on top of UBI volumes.
The UBIFS is done with the mkfs.ubifs command and the UBI is done with ubinize command.
SAM-BA and the U-Boot nand write.trimffs command expect a UBI file.
https://microchipsupport.force.com/s/article/What-is-the-difference-between-UBI-and-UBIFS
离线