加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 07:00:37 所属栏目:百科 来源:网络整理
导读:折腾了好几天,突然柳暗花明,继而思之,发现原来是出门就走错了路,悲剧之余,写下此笔记,以省自己,警他人。 正题,关于 UBIFS 的介绍在此就不多说,详见: http://www.linux-mtd.infradead.org/faq/ubifs.html http://www.linux-mtd.infradead.org/faq/u

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

正题,关于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工具包,安装命令为:

sudo apt-get install mtd-utils

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

1.2? UBIFS镜像的制作 有了mkfs.ubifsubinize两个工具后,就可以制作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 ubiimg?-p?128KiB?s?512?-O 2048 ubinize.cfg

ubinize.cfg为一些配置参数:

[ubifs]


  • mode=ubi

  • image=ubifsimg

  • vol_id=0

  • vol_size=100MiB

  • vol_type=dynamic

  • vol_alignment=1

  • vol_name=rootfs

  • 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上,具体命令为:

    tftp 0xc1180000 ubiimg


  • nand erase 0x400000 0x7c00000

  • 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个区:

    setenv mtdids nand0=nand0

  • setenv mtdparts mtdparts=nand0:0x20000(u-boot env),0x20000(UBL-boot(kernel(filesystem)
  • 设置完后,使用mtdparts命令可以看到分区信息:

    device nand0?<nand0>=?5

  • ?#:?name?size?offset mask_flags

  • ?0:?-boot env 0x00020000 0x00000000 0

  • ?1:?UBL 0x00020000 0x00020000 0

  • ?2-boot 0x001c0000 0x00040000 0

  • ?3:?kernel 0x00200000 0x00200000 0

  • ?4:?filesystem 0x07c00000 0x00400000 0


  • active partition:?nand0-?)?0x00020000 @ 0x00000000
  • 2.?烧写文件系统:

    nand erase 0x400000 0x7c00000


  • tftp 0xc1180000 ubifsimg

  • ubi create rootfs

  • ubi part nand filesystem

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

    3.?设置内核启动参数:

    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的当前分区:

    # cat?/proc/mtd


  • devsize?erasesize?name

  • mtd0:?00020000 00020000?"u-boot env"

  • mtd1"UBL"

  • mtd2:?00080000 00020000?"u-boot"

  • mtd3:?00200000 00020000?"kernel"

  • mtd4:?07c00000 00020000?"filesystem"
  • 2.?擦除要烧写的分区:

    flash_eraseall?/dev/mtd4

    3.?烧写UBIFS文件系统:

    ?ubiformat?/mtd4?-f?/ubiimg

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

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

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

  • ubiattach?-O 2048

  • ubimkvol?/ubi0?-N rootfs?s?100MiB

  • mount?/
  • 原文转载:http://blog.163.com/shaohj_1999@126/blog/static/63406851201212305156639/

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读