有被问到在uboot中访问ubi文件系统,之前大概了解,但是没有实际操作,这次还是操作一遍看看。
硬件平台
- 君正 x1000 halley2
uboot编译配置
至少配置以下几项,其他的驱动是必备的
#define CONFIG_MTD_DEVICE
#define CONFIG_CMD_UBI
#define CONFIG_CMD_UBIFS
#define CONFIG_CMD_MTDPARTS
#define CONFIG_MTD_PARTITIONS
uboot启动
help之后的打印会看到:
mtdparts- define flash/nand partitions
ubi - ubi commands
ubifsload- load file from an UBIFS filesystem
ubifsls - list files in a directory
ubifsmount- mount UBIFS volume
ubifsumount- unmount UBIFS volume
uboot下使用ubi命令
首先使用mtdparts命令生成所有的mtd默认分区,
halley2-sfcnand# mtdparts default
halley2-sfcnand# mtdparts
device nand0 <nand>, # parts = 4
#: name size offset mask_flags
0: boot 0x00100000 0x00000000 0
1: kernel 0x00800000 0x00100000 0
2: rootfs 0x02800000 0x00900000 0
3: data 0x0cf00000 0x03100000 0
active partition: nand0,0 - (boot) 0x00100000 @ 0x00000000
defaults:
mtdids : nand0=nand
mtdparts: mtdparts=nand:1M(boot),8M(kernel),40M(rootfs),-(data)
使用ubi part命令连接mtd分区, 例如链接rootfs分区, 激活当前分区会将已经激活的分区取消链接
halley2-sfcnand# ubi part nand
halley2-sfcnand# ubi part
Device 0: nand0, partition rootfs
使用ubi info 查看当前分区信息, 注意其中的PEB代表可擦除的物理页个数
每个物理页大小128K
halley2-sfcnand# ubi info
UBI: MTD device name: "mtd=2"
UBI: MTD device size: 40 MiB
UBI: physical eraseblock size: 131072 bytes (128 KiB)
UBI: logical eraseblock size: 126976 bytes
UBI: number of good PEBs: 320
UBI: number of bad PE