在MTD选项中进入UBI配置选项
在file system中配置ubifs,如下
配置完成后重新编译内核生成uImage,上电加载启动内核,可以看到/proc/filesystem已经有了ubifs的选项
2、 修改arch/arm/mach-davinci/board-da850-evm.c文件中nandflash分区
点击(此处)折叠或打开
- struct mtd_partition da850_evm_nandflash_partition[] = {
- {
- .name = "u-boot env",
- .offset = 0,
- .size = SZ_128K,
- .mask_flags = MTD_WRITEABLE,
- },
- {
- .name = "UBL",
- .offset = MTDPART_OFS_APPEND,
- .size = SZ_128K,
- .mask_flags = MTD_WRITEABLE,
- },
- {
- .name = "u-boot",
- .offset = MTDPART_OFS_APPEND,
- .size = 4 * SZ_128K,
- .mask_flags = MTD_WRITEABLE,
- },
- {
- .name = "kernel",
- .offset = 0x300000, //txl
- .size = SZ_2M,
- .mask_flags = 0,
- },
- {
- .name = "filesystem",
- .offset = 0x500000,
- .size = SZ_32M,
- .mask_flags = 0,
- },
- {
- .name = "ubifs",
- .offset = MTDPART_OFS_APPEND,
- .size = 1.5 * SZ_32M,
- .mask_flags = 0,
- },
- {
- .name = "user",
- .offset = MTDPART_OFS_APPEND,
- .size = MTDPART_SIZ_FULL,
- .mask_flags = 0,
- },
3、 在u-boot中添加ubifs支持,编辑include/configs/da850evm.h文件
在
点击(此处)折叠或打开
- #define CONFIG_CMD_MTDPARTS
- #define CONFIG_MTD_DEVICE
- #define CONFIG_MTD_PARTITIONS
- #define CONFIG_LZO
- #define CONFIG_RBTREE
- #define CONFIG_CMD_UBI
- #define CONFIG_CMD_UBIFS
- 添加为
- #define CONFIG_CMD_MTDPARTS
- #define CONFIG_MTD_DEVICE
- #define CONFIG_MTD_PARTITIONS
- #define CONFIG_LZO
- #define CONFIG_RBTREE
- #define CONFIG_CMD_UBI
- #define CONFIG_CMD_UBIFS
- #define MTDIDS_DEFAULT "nand0=nandflash0"
- #define MTDPARTS_DEFAULT "mtdparts=nandflash0:128k@0(ubi0),"\
- "128k(ubl),"\
- "2816k(uboots),"\
- "2m(kernel),"\
- "32m(root),"\
- "32m(ubifs)"
这里u-boot分区尽量与内核划分的分区一致。
4、 使用工具测试ubi
把生成的arm版mtd工具复制到nfs文件夹
通过ubiattch把mtd5作为ubi0
注意这些信息,接下来创建ubifs镜像时要一一对应
通过ubimkvol创建ubi卷ubi0_0,名称为rootfs
./ubimkvol /dev/ubi0 -N rootfs -s 48MiB
通过卷名mount:
mount –t ubifs ubi0:rootfs /tmp
或者通过卷序号mount:
mount –t ubifs ubi0_0 /tmp
mount 成功后系统的信息:
6、生成ubifs镜像
mk.ubifs -r /root/targetfs -m 2048 -e 126976 -c 230 -o /tftpboot/ubifs.img
-r 参数指定输入的源文件夹名称
-m 参数指定页大小(min-io-size)
这个可以通过./ ubiattch输出信息看出
-e 参数指定逻辑擦除块大小(leb-size)
./ ubiattch输出信息 UBI:logical eraseblock size: 126976bytes
-c 参数指定逻辑擦除块数量(max-leb-cnt)
UBI:total number of reserved 257.一共有257块,选取230个,这个参数比较随意,不要太小,也不要超过总块数
从u-boot启动
擦除建立ubifs分区并下载镜像
nand erase.part ubifs
ubi part ubifs 2048
ubi create rootfs
tftp 0xc1180000 ubifs.img
ubi write 0xc1180000 rootfs 0x1000000
setenv bootargs console=ttyS0,115200n8 ubi.mtd=5 root=ubi0:rootfs rootfstype=ubifs init=/linuxrc rw
启动系统成功界面
备注:
ubi分区一定不能有坏块,因为ubi write命令不坏检测坏块并跳过,有坏块的话经常会导致ubi无法启动。内核的ubifs为48M,u-boot的为32M,这样是能成功的,尝试过内核对应u-boot的32M,出错ubi分区过小,呃。。。。。再看