ubifs烧写到nand flash中的几种方法

原文出处:http://blog.chinaunix.net/uid-20729605-id-2386476.html 作者:niutao.linux


折腾了好几天,突然柳暗花明,继而思之,发现原来是出门就走错了路,悲剧之余,写下此笔记,以省自己,警他人。

正题,关于UBIFS的介绍在此就不多说,详见:

http://www.linux-mtd.infradead.org/faq/ubifs.html

http://www.linux-mtd.infradead.org/faq/ubi.html

1. UBIFS文件系统镜像的制作过程

1.1  所需的工具

制作UBIFS镜像所需的工具有mkfs.ubifsubinize,可以通过以下方式获取到此两个工具:

1. 方法一:从官网通过git工具下载源码,编译可得之,下载命令:

  1. git clone git://git.infradead.org/mtd-utils.git

下载到源码后,编译需要的的软件包有:uuid-devlzouuib-dev可以通过apt-get直接安装,lzo需要手动下载编译,官方网站为:http://www.oberhumer.com/opensource/lzo/download/

2. 方法二:安装mtd-utils工具包,安装命令为:

  1. sudo apt-get install mtd-utils

不过此方法不保证安装的工具可以正常使用(可能版本过低)。

1.2  UBIFS镜像的制作

有了mkfs.ubifsubinize两个工具后,就可以制作UBIFS镜像了,具体步骤如下:

1. 使用mkfs.ubifs命令将某个文件夹制作为UBIFS镜像,具体命令为:

  1. mkfs.ubifs -/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文件系统镜像卷标):

  1. ubinize -o ubi.img -m 2048 -p 128KiB -s 512 -O 2048 ubinize.cfg

ubinize.cfg为一些配置参数:

  1. [ubifs]

  2. mode=ubi

  3. image=ubifs.img

  4. vol_id=0

  5. vol_size=100MiB

  6. vol_type=dynamic

  7. vol_alignment=1

  8. vol_name=rootfs

  9. vol_flags=autoresize

通过此命令生成的ubi.img可直接使用NAND FLASH的烧写命令烧写到FLASH上。

2.  UBIFS文件系统镜像的烧写

以下主要说以下将UBIFS镜像烧写到NAND FLASH中的三种方法。

2.1  u-boot下通过nand write命令烧写

使用ubinize命令制作的带有卷标的UBIFS文件系统镜像可以直接使用nand flash的烧写命令烧写到NAND FLASH上,具体命令为:

  1. tftp 0xc1180000 ubi.img

  2. nand erase 0x400000 0x7c00000

  3. nand write.e 0xc1180000 0x400000 0x3660000

关于tftpnand 等命令使用格式请参见u-boothelp

2.2  u-boot下通过ubi write命令烧写

使用mkfs.ubifs命令制作的UBIFS文件系统镜像可以使用命令ubi write烧写到NAND FLASH上,具体命令为:

1. 设置FLASH的分区,此处以128M NAND FLASH为例,分为5个区:

  1. setenv mtdids nand0=nand0
  2. setenv mtdparts mtdparts=nand0:0x20000(u-boot env),0x20000(UBL),0x1c0000(u-boot),0x200000(kernel),0x7c00000(filesystem)

设置完后,使用mtdparts命令可以看到分区信息:

  1. device nand0 <nand0>, # parts = 5

  2.  #: name size offset mask_flags

  3.  0: u-boot env 0x00020000 0x00000000 0

  4.  1: UBL 0x00020000 0x00020000 0

  5.  2: u-boot 0x001c0000 0x00040000 0

  6.  3: kernel 0x00200000 0x00200000 0

  7.  4: filesystem 0x07c00000 0x00400000 0


  8. active partition: nand0,- (u-boot env) 0x00020000 @ 0x00000000

2. 烧写文件系统:

  1. nand erase 0x400000 0x7c00000

  2. tftp 0xc1180000 ubifs.img

  3. ubi create rootfs

  4. ubi part nand filesystem

  5. ubi write 0xc1180000 rootfs 0x1d1000

通过以上命令,可以将文件系统烧写到第4个分区上,UBIFS文件系统卷标为rootfs

3. 设置内核启动参数:

  1. setenv bootargs 'console=ttyS2,115200n8 ubi.mtd=4,2048 root=ubi0:rootfs rootwait rootfstype=ubifs rw ip=off'

这样就可以将烧写的UBIFS文件系统用作根分区了。

4. 要在u-boot使用ubi,mtd等命令,需要配置一下u-boot,具体可参见:http://blog.csdn.net/longfeey/article/details/5881433

2.3  linux系统下烧写

linux系统下,可以使用ubiformat工具烧写使用ubinize工具制作的UBIFS文件系统映像,此处以烧写到NAND FLASH5个分区上为例,具体命令为:

1. 查看FLASH的当前分区:

  1. # cat /proc/mtd

  2. dev: size erasesize name

  3. mtd0: 00020000 00020000 "u-boot env"

  4. mtd1: 00020000 00020000 "UBL"

  5. mtd2: 00080000 00020000 "u-boot"

  6. mtd3: 00200000 00020000 "kernel"

  7. mtd4: 07c00000 00020000 "filesystem"

2. 擦除要烧写的分区:

  1. flash_eraseall /dev/mtd/mtd4

3. 烧写UBIFS文件系统:

  1.  ubiformat /dev/mtd/mtd4 -/ubi.img

4. 挂载烧写好的文件系统:

  1. ubiattach /dev/ubi_ctrl -m 4 -O 2048

  2. mount -t ubifs ubi0:rootfs /mnt/
3. linux下创建UBIFS分区   
  1. flash_eraseall /dev/mtd/mtd4

  2. ubiattach /dev/ubi_ctrl -m 4 -O 2048

  3. ubimkvol /dev/ubi0 -N rootfs -s 100MiB

  4. mount -t ubifs ubi0:rootfs /mnt/
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: UBIFS文件系统是一种专门为嵌入式系统设计的文件系统,它的主要特点是支持压缩和闪存友好。 对于SLC NAND闪存,由于其读写速度和寿命较高,因此UBIFS文件系统很适合用于SLC NAND闪存上。它采用的压缩技术可以将存储的数据压缩至更小的空间,同时还可以加速数据的读取和存储,从而减少闪存空间的使用,并提高闪存使用寿命。 除了支持压缩和提高存储效率之外,UBIFS文件系统还可以自动检测并修复闪存上的错误,这对于保证系统稳定性和数据完整性是非常有帮助的。此外,它还支持快速随机读取和写入操作,因此可以在需要快速存储和读取数据的应用场景下得到广泛应用。 总之,UBIFS文件系统非常适合用于SLC NAND闪存上,它可以提高嵌入式系统的存储效率和稳定性,同时还可以延长闪存的使用寿命。 ### 回答2: UBIFS是一个专为闪存设备设计的文件系统,支持SLC NAND闪存,并且可以提供良好的性能和可靠性。 SLC NAND(Single-Level Cell NAND)是一种基于NAND闪存技术的存储介质,在闪存性能最优,可靠性最高,但比MLC NAND成本更高。 UBIFS文件系统能够充分利用SLC NAND的性能优势,通过采用快速读写方式,提供快速访问和高效的存储容量管理。 UBIFS在SLC NAND的可靠性方面也有很好的表现。由于SLC NAND闪存使用更耐久的存储单元,UBIFS的可靠性和耐久性都比使用MLC NAND的文件系统要高得多。 总之,UBIFS文件系统的优势在于其专门为闪存设备而设计,支持SLC NAND闪存,提供高效的访问和可靠的存储容量管理。通过在SLC NAND运行,UBIFS的性能和可靠性得到保证,并且可以帮助优化移动设备的性能和功能。 ### 回答3: UBIFS是一种专为闪存设备设计的文件系统,提供了高效的存储管理和数据保护功能。SLC NAND是一种高速、可靠的闪存芯片类型,因其可靠性和较高的写入耐久性而广泛应用于消费电子产品UBIFS文件系统与SLC NAND芯片的配合非常紧密,可以实现最佳的读写性能和数据稳定性。 相比于传统的文件系统,例如ext3和NTFS,UBIFS在存储管理加入了一些先进的算法,如基于UBI层的块管理、扇区撤销等。同时,UBIFS也支持透明的压缩和加密功能,可以进一步提高数据存储的效率和安全性。 对于SLC NAND存储,它的写入耐久性比较高,因此可以不必过分关注闪存的使用寿命。同时,由于SLC NAND的读写速度非常快,UBIFS文件系统也可以针对SLC NAND进行一些优化,进一步提高文件系统的运行效率。 总的来说,UBIFS文件系统和SLC NAND芯片的结合可以实现高效、可靠的数据存储和管理,同时也可以最大限度地发挥SLC NAND芯片的读写速度和写入耐久性,从而提升系统的整体性能和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值