在pc上制作镜像需要mkfs.ubifs工具。安装如下
在ubuntu下面编译mtd-utils的两种方法(相信也可以用于其它发行版下):
方法一:
从git repository获取源代码,此编译为最近更新
1. get the source code of mtd-utils
git clone git://git.infradead.org/mtd-utils.git
2. cd mtd-utils
3. make
4. sudo make install (需要root权限来操作)
方法二:
从ftp网站拿打好的源代码包
1. wget ftp://ftp.infradead.org/pub/mtd-utils/mtd-utils-1.4.5.tar.bz2
2. tar -jxvf mtd-utils-1.4.5.tar.bz2
3. cd mtd-utils-1.4.5
4. make
5. sudo make install (需要root权限来操作)
注意: 在编译的过程中,你或许会遇到下面的问题:(In compile process, you will meet the following problem.)
1. sys/acl.h: No such file or directory --> sudo apt-get install libacl1-dev
2. compr_lzo.c:29:23: error: lzo/lzo1x.h: No such file or directory --> sudo apt-get install liblzo2-dev
3. uuid/uuid.h: No such file or directory --> sudo apt-get install uuid-dev
有了mkfs.ubifs和ubinize两个工具后,就可以制作UBIFS镜像了,具体步骤如下:
1. 使用mkfs.ubifs命令将某个文件夹制作为UBIFS镜像,具体命令为:
mkfs.ubifs -r /tmp/rootfs -m 2048 -e 126976-c 992 -o ubifs.img
以上命令的含义为将/tmp/rootfs文件夹制作为UBIFS文件系统镜像,输出的镜像名为ubifs.img,-m参数指定了最小的I/O操作的大小,也就是NAND FLASH一个page的大小,-e参数指定了逻辑擦除快的大小,-c指定了最大的逻辑块号。
通过此命令制作的出的UBIFS文件系统镜像可在u-boot下使用ubi write命令烧写到NAND FLASH上。
2. 使用ubinize命令可将使用mkfs.ubifs命令制作的UBIFS文件系统镜像转换成可直接在FLASH上烧写的格式(带有UBI文件系统镜像卷标):
ubinize -o ubi.img-m 2048 -p 128KiB-s 512 -O 2048 ubinize.cfg
ubinize.cfg为一些配置参数:
[ubifs]
mode=ubi
image=ubifs.img
vol_id=0
vol_size=100MiB
vol_type=dynamic
vol_alignment=1
vol_name=rootfs(最好和uboot创建的卷标一致:有些人用ubifs)
vol_flags=autoresize
其中制作出的ubifs.img 是用于uboot烧写的,
而ubi.img是用于直接使用NAND FLASH的烧写命令烧写到FLASH上烧写的ubiformat /dev/mtd4 -s 512 -f ubi.img
命令参数
-r:制定文件内容的位置
-m:页面大小
-e:逻辑擦除块大小
-p:物理擦除块大小
-c:最大的逻辑擦除块数量
-s:最小的硬件输入输出页面大小,如:k9f1208为256(上下半页访问)
重要提示,要根据flash加载ubifs输出的信息来用下面的命令制作镜像,否则不能启动系统
/注释ICETEK-OMAPL138-KB//
Creating 5 MTD partitions on "davinci_nand.1":
0x0000 0000 0000-0x0000 0004 0000 : "u-boot env"
0x0000 0004 0000-0x0000 0008 0000 : "UBL"
0x0000 0008 0000-0x0000 0010 0000 : "u-boot"
0x0000 0020 0000-0x0000 0060 0000 : "kernel"
0x0000 0060 0000-0x0000 40000 000 : "filesystem"
davinci_nand davinci_nand.1: controller rev. 2.5
UBI: attaching mtd4 to ubi0
UBI: physical eraseblock size: 131072 bytes (128 KiB)
UBI: logical eraseblock size: 126976 bytes
UBI: smallest flash I/O unit: 2048
UBI: VID header offset: 2048 (aligned 2048)
UBI: data offset: 4096
/注释/
mkfs.ubifs -r rootfs -m 2048 -e 126976 -c 8138 -o ubifs.img
ubinize -o ubi.img -m 2048 -p 128KiB -s 512 ubinize.cfg
/注释///
参考文献:
1.利用mkfs.ubifs和ubinize两个工具制作UBI镜像
2.UBI镜像制作