hi3516 tool makeyaffs2image


原文链接: hi3516 tool makeyaffs2image

参考

4.3.2 jffs2 压缩文件可读写文件系统(适用体积较小的SPI FLASH)

jffs2 是 RedHat 的 David Woodhouse 在 jffs 基础上改进的文件系统,是用于微型嵌入式 设备的原始闪存芯片的实际文件系统。jffs2 文件系统是日志结构化的可读写的文件系 统。
jffs2 的优缺点如下:
优点 使用了压缩的文件格式。最重要的特性是可读写操作。
缺点
jffs2 文件系统挂载时需要扫描整个 jffs2 文件系统,因此当 jffs2 文件系统分区增大 时,挂载时间也会相应的变长。使用 jffs2 格式可能带来少量的 Flash 空间的浪 费。这主要是由于日志文件的过度开销和用于回收系统的无用存储单元,浪费的 空间大小大致是若干个数据段。jffs2 的另一缺点是当文件系统已满或接近满时, jffs2 运行速度会迅速降低。这是因为垃圾收集的问题。

加载 jffs2 文件系统时的步骤如下: 扫描整个芯片,对日志节点进行校验,并且将日志节点全部装入内存缓存。 对所有日志节点进行整理,抽取有效的节点并整理出文件目录信息。 找出文件系统中无效节点并且将它们删除。 最后整理内存中的信息,将加载到缓存中的无效节点释放。

由此可以看出虽然这样能有效地提高系统的可靠性,但是在一定程度上降低了系统的速度。尤其对于较大的闪存芯片,加载过程会更慢。
为了使内核支持 jffs2 文件系统,必须在编译内核时把 jffs2 的选项加入(我们发布的内核默认已经加入了支持)。

在 make menuconfig 后,

进入“File systems”,
    选择 “Miscellaneous filesystems”,
    最后选中其中的“Journalling Flash File System v2 (JFFS2)

support”选项(SDK 里面提供的内核默认已经选择了该文件系统的支持)。

jffs2 的制作方法为:
其中,mkfs.jffs2 工具可以从互联网中下载,也可以在 SDK 包中找到。rootbox 为之前 已经制作好的根文件系统。参数说明如表 4-2 所示。

./mkfs.jffs2 –d ./rootbox -l –e 0x20000 -o jffs2-root.img

参数说明:
-d 指定根文件系统目录
-l little-endian 小端模式
-e Flash 的块大小  0x10000 == 65535 == 64k
-o 输出映像文件
export OSDRV_DIR=$(shell pwd)
export OSDRV_CROSS=arm-himix200-linux
export CHIP?=hi3516dv300
export ARCH=arm
export CROSS_COMPILE=$(OSDRV_CROSS)-
export OSDRV_CROSS_CFLAGS
MP_TYPE=smp
BOOT_MEDIA?=spi                // emmc 

LIB_TYPE:=glibc
PUB_ROOTFS:=rootfs_$(LIB_TYPE)

JFFS2_IMAGE_BIN_64K:=rootfs_$(CHIP)_64k.jffs2
JFFS2_IMAGE_BIN_128K:=rootfs_$(CHIP)_128k.jffs2
JFFS2_IMAGE_BIN_256K:=rootfs_$(CHIP)_256k.jffs2

export PUB_IMAGE:=$(CHIP)_$(BOOT_MEDIA)_$(MP_TYPE)_image_$(LIB_TYPE)
$(OSDRV_DIR)/pub/bin/pc;./mkfs.jffs2 -d $(OSDRV_DIR)/pub/$(PUB_ROOTFS) -l -e 0x10000 -o $(OSDRV_DIR)/pub/$(PUB_IMAGE)/$(JFFS2_IMAGE_BIN_64K)
$(OSDRV_DIR)/pub/bin/pc;./mkfs.jffs2 -d $(OSDRV_DIR)/pub/$(PUB_ROOTFS) -l -e 0x20000 -o $(OSDRV_DIR)/pub/$(PUB_IMAGE)/$(JFFS2_IMAGE_BIN_128K);
$(OSDRV_DIR)/pub/bin/pc;./mkfs.jffs2 -d $(OSDRV_DIR)/pub/$(PUB_ROOTFS) -l -e 0x40000 -o $(OSDRV_DIR)/pub/$(PUB_IMAGE)/$(JFFS2_IMAGE_BIN_256K);

4.3.3 yaffs2 (适用于体积大的NAND Flash)

优点
− 专门针对 NAND Flash,软件结构得到优化,速度快。
− 使用硬件的 spare area 区域存储文件组织信息,启动时只需扫描组织信息,启 动比较快。
− 采用多策略垃圾回收算法,能够提高垃圾回收的效率和公平性,达到损耗平衡 的目的。
缺点
没有采用压缩的文件格式。当包含的内容相同时,yaffs2 镜像文件要比 jffs2 镜像文件大。
yaffs2 文件系统在 SDK 中作为一个模块提供。只需在 yaffs2 代码中的 Makefile 中加入所依赖的内核代码路径,进行编译,即可生成 yaffs2 文件系统模块。
yaffs2 镜像文件的制作和 cramfs 相同,即通过工具制作,只需简单的几个参数,具体
如下:
对于 SPI Nand Flash:
./mkyaffs2image100 ./rootbox yaffs2-root.img [pagesize] [ecctype]

对于 Parallel NAND Flash:
./mkyaffs2image610 ./rootbox yaffs2-root.img [pagesize] [ecctype]

其中,rootbox 是之前已经制作好的根文件系统,yaffs2-root.img 是生成的 yaffs2 文件 系统镜像文件,pagesize 是单板上焊接 NAND Flash 器件的页大小,ecctype 是单板上 焊接 NAND Flash 器件的 ecc 类型

mkyaffs2image使用:

mkyaffs2image100: image building tool for YAFFS2, last update Mar 8 2017 18:19:39.
Version: Linux-2.6.35 Flash Memory Controller V100
Usage:
mkyaffs2image100 {dir} {image} {pagesize} {ecctype} [-b blocksize] [-v].
dir the directory tree to be converted
image the output file to hold the image

pagesize the page size to be converted
0 | 512 512 Bytes pagesize
1 | 2k 2K Bytes pagesize
2 | 4K 4K Bytes pagesize
3 | 8K 8K Bytes pagesize
4 | 16K 16K Bytes pagesize

ecctype ECC type
0 | none no ecc
1 | 1bit used 1bit/512 ecc
2 | 4bit used 4bit/512 ecc
3 | 8bit used 8bit/512 ecc
4 | 24bit used 24bit/1k ecc
5 | 40bit used 40bit/1k ecc
6 | 64bit used 64bit/1k ecc

-b blocksize explicitly align blocksize

-v verbosely list files processed
Example:

mkyaffs2image100 ./rootfs rootfs_4k4bit.yaffs 4k 4bit

(后面参数为flash的 pagesize 和 ecc类型,根据你使用的芯片来选择)
————————————————
版权声明:本文为CSDN博主「Ternence_Hsu」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ternence_hsu/article/details/60878471

`