利用mkfs.ubifs和ubinize两个工具制作UBI镜像

本文介绍了在Ubuntu环境下编译mtd-utils的方法,并详细说明如何使用mkfs.ubifs和ubinize工具制作适用于NAND Flash的UBIFS镜像文件。包括解决编译过程中可能遇到的问题、设置必要的配置参数等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载地址:http://blog.youkuaiyun.com/muzi_csd/article/details/20076539

在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输出的信息来用下面的命令制作镜像,否则不能启动系统

 

[objc] view plain copy

  1. /////////////////////////////////////////////////注释ICETEK-OMAPL138-KB//////////////////////////////////////////////////////////////  
  2. Creating 5 MTD partitions on "davinci_nand.1":  
  3. 0x0000 0000 0000-0x0000 0004 0000 : "u-boot env"  
  4. 0x0000 0004 0000-0x0000 0008 0000 : "UBL"  
  5. 0x0000 0008 0000-0x0000 0010 0000 : "u-boot"  
  6. 0x0000 0020 0000-0x0000 0060 0000 : "kernel"  
  7. 0x0000 0060 0000-0x0000 40000 000 : "filesystem"  
  8. davinci_nand davinci_nand.1: controller rev. 2.5  
  9. UBI: attaching mtd4 to ubi0  
  10. UBI: physical eraseblock size:   131072 bytes (128 KiB)  
  11. UBI: logical eraseblock size:    126976 bytes  
  12. UBI: smallest flash I/O unit:    2048  
  13. UBI: VID header offset:          2048 (aligned 2048)  
  14. UBI: data offset:                4096  
  15. /////////////////////////////////////////////////注释/////////////////////////////////////////////////////////////  
  16. mkfs.ubifs -r rootfs -m 2048 -e 126976 -c 8138 -o ubifs.img  
  17.   
  18. ubinize -o ubi.img -m 2048 -p 128KiB -s 512 ubinize.cfg  
  19. /////////////////////////////////////////////////注释///////////////////////////////////////////////////////////////  

 

参考文献:

 

1.利用mkfs.ubifs和ubinize两个工具制作UBI镜像

2.UBI镜像制作

 

<think>首先,理解用户的问题:用户想了解UBIFSUBI镜像的关系,并验证两种挂载UBIFS的方法是否正确。参考了提供的引用内容。 关键点:- UBIFS(Unsorted BlockImage FileSystem)是一种用于闪存的文件系统。- UBI(UnsortedBlock Images)是UBIFS的基础层,处理坏块管理磨损均衡。 -UBI镜像包含UBIFS文件系统。从引用中提取信息:-引用[1]:描述了使用mkfs.ubifsubinize制作UBI镜像的步骤。 -引用[2]:提到ubiattach命令用于链接MTD设备到UBI设备。 -引用[3]:展示了ubinize配置文件的示例。 UBIFSUBI镜像的关系:- UBIFS是文件系统层。- UBI是中间层,处理闪存管理。 -UBI镜像是一个包含UBIFS文件系统数据的镜像文件,用于烧写到闪存上。两种挂载UBIFS的方法:1.使用ubiformatubiattach:ubiformat用于格式化MTD分区为UBIubiattach用于连接到UBI设备。2.使用mkfs.ubifsubinizemkfs.ubifs创建UBIFS镜像ubinize将其转换为UBI格式镜像。验证步骤是否正确:-方法1:ubiformat-> ubiattach-> mountUBIFS。-方法2:mkfs.ubifs-> ubinize->烧写镜像 ->ubiattach-> mount。用户提到的两种方法:1.ubiformat/ubiattach:这是直接操作MTD设备的方法。 2. mkfs.ubifs/ubinize:这是创建镜像文件的方法。回答结构:-先解释UBIFSUBI的关系。-然后分别描述两种方法的步骤。 -验证每种方法的正确性。 -最后,生成相关问题。确保使用中文回答。 数学表达式:如果涉及,用$...$或$$...$$,但这里可能不涉及数学表达式,所以可以忽略。引用:在末尾添加引用标识,如[^1]。完整回答:1.介绍UBIFSUBI的关系。 2.描述方法1:ubiformat/ubiattach的步骤验证。 3.描述方法2:mkfs.ubifs/ubinize的步骤验证。 4.生成相关问题。 引用来源:用户提供的引用[1],[2],[3],在回答中引用。最终回答:-开头:解释关系。 -主体:分步描述两种方法。 -结尾:验证正确性。-相关问题。</think>### UBIFSUBI镜像的关系 UBIFS(Unsorted Block Image File System)是一种专为闪存设备设计的文件系统,直接构建在UBI(Unsorted Block Images)层之上。UBI是Linux内核提供的中间层,负责处理闪存的坏块管理、磨损均衡逻辑到物理地址的映射。UBIFS文件系统需要依赖UBI层才能正常工作,因为它直接操作UBI卷(volume),而不直接接触底层MTD(Memory Technology Device)硬件。简单来说: - **UBI镜像**:是一个包含UBI卷配置数据的二进制文件,通常通过`ubinize`工具生成。它存储了UBIFS文件系统的内容以及UBI元数据(如卷大小、类型等)。 - **UBIFS**:是文件系统本身,需要挂载到UBI卷上才能被访问。 关系总结:UBIFS是文件系统实现,UBI是管理闪存的抽象层;UBI镜像UBIFS数据的载体,用于烧写到闪存设备中[^1][^3]。 ### 挂载UBIFS的两种方法验证 以下是两种常用方法的详细步骤及正确性验证。两种方法均正确,但适用场景不同: - **方法1:直接操作MTD设备(使用`ubiformat``ubiattach`)** 适用于直接在目标设备上格式化并挂载UBIFS,无需预先制作镜像文件。 **步骤**: 1. 格式化MTD分区为UBI:`ubiformat /dev/mtdX`(其中`X`是MTD分区号)。 2. 附加UBI设备:`ubiattach -m X -d Y`(将MTD设备`/dev/mtdX`链接到UBI设备`/dev/ubiY`)。 3. 创建UBI卷(可选):如果未自动创建卷,使用`ubimkvol /dev/ubiY -N <卷名> -s <大小>`。 4. 挂载UBIFS:`mount -t ubifs ubiY:卷名 /挂载点`。 **验证**:此方法正确,因为它直接利用UBI层管理闪存,并通过`ubiattach`创建UBI设备节点(如`/dev/ubiY_0`),符合UBI的工作机制[^2]。 - **方法2:通过镜像文件制作并挂载(使用`mkfs.ubifs``ubinize`)** 适用于预先在主机上生成UBI镜像,再烧写到闪存设备。 **步骤**: 1. 创建UBIFS镜像:`mkfs.ubifs -r <源目录> -m <最小I/O大小> -e <逻辑擦除块大小> -c <最大逻辑块数> -o ubifs.img`(例如`-m 2048 -e 126976 -c 1580`)。 2. 生成UBI镜像:创建配置文件(如`ubinize.cfg`),指定卷参数(见示例),然后运行`ubinize -o ubi.img -m <最小I/O大小> -p <物理擦除块大小> -s <子页大小> ubinize.cfg`。 示例配置文件内容: ``` [ubifs] mode=ubi image=ubifs.img vol_id=0 vol_size=100MiB vol_type=dynamic vol_name=rootfs vol_flags=autoresize ``` 3. 烧写UBI镜像到MTD设备:`nandwrite /dev/mtdX ubi.img`。 4. 附加UBI设备:`ubiattach -m X -d Y`。 5. 挂载UBIFS:`mount -t ubifs ubiY:卷名 /挂载点`。 **验证**:此方法正确,因为`mkfs.ubifs`生成纯UBIFS文件系统镜像,而`ubinize`将其封装为UBI格式(包含卷头信息),确保镜像UBI层兼容[^1][^3]。 ### 验证总结 - **正确性**:两种方法均有效,但需注意参数匹配(如擦除块大小必须与硬件一致)。 - **选择依据**: - 方法1适合现场调试或快速挂载。 - 方法2适合量产或需预先测试镜像的场景。 - **常见错误**: - 未正确设置`-m`、`-e`等参数导致挂载失败(需匹配闪存规格)。 - 未运行`ubiattach`直接挂载UBIFSUBIFS必须通过UBI卷访问)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值