hi3516 tool makeyaffs2image
参考 jffs2 是 RedHat 的 David Woodhouse 在 jffs 基础上改进的文件系统,是用于微型嵌入式 设备的原始闪存芯片的实际文件系统。jffs2 文件系统是日志结构化的可读写的文件系 统。 加载 jffs2 文件系统时的步骤如下: 扫描整个芯片,对日志节点进行校验,并且将日志节点全部装入内存缓存。 对所有日志节点进行整理,抽取有效的节点并整理出文件目录信息。 找出文件系统中无效节点并且将它们删除。 最后整理内存中的信息,将加载到缓存中的无效节点释放。 由此可以看出虽然这样能有效地提高系统的可靠性,但是在一定程度上降低了系统的速度。尤其对于较大的闪存芯片,加载过程会更慢。 在 make menuconfig 后, support”选项(SDK 里面提供的内核默认已经选择了该文件系统的支持)。 jffs2 的制作方法为: 优点 对于 Parallel NAND Flash: 其中,rootbox 是之前已经制作好的根文件系统,yaffs2-root.img 是生成的 yaffs2 文件 系统镜像文件,pagesize 是单板上焊接 NAND Flash 器件的页大小,ecctype 是单板上 焊接 NAND Flash 器件的 ecc 类型 mkyaffs2image100: image building tool for YAFFS2, last update Mar 8 2017 18:19:39. pagesize the page size to be converted ecctype ECC type -b blocksize explicitly align blocksize -v verbosely list files processed (后面参数为flash的 pagesize 和 ecc类型,根据你使用的芯片来选择)4.3.2 jffs2 压缩文件可读写文件系统(适用体积较小的SPI FLASH)
jffs2 的优缺点如下:
优点 使用了压缩的文件格式。最重要的特性是可读写操作。
缺点
jffs2 文件系统挂载时需要扫描整个 jffs2 文件系统,因此当 jffs2 文件系统分区增大 时,挂载时间也会相应的变长。使用 jffs2 格式可能带来少量的 Flash 空间的浪 费。这主要是由于日志文件的过度开销和用于回收系统的无用存储单元,浪费的 空间大小大致是若干个数据段。jffs2 的另一缺点是当文件系统已满或接近满时, jffs2 运行速度会迅速降低。这是因为垃圾收集的问题。
为了使内核支持 jffs2 文件系统,必须在编译内核时把 jffs2 的选项加入(我们发布的内核默认已经加入了支持)。进入“File systems”,
选择 “Miscellaneous filesystems”,
最后选中其中的“Journalling Flash File System v2 (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]
./mkyaffs2image610 ./rootbox yaffs2-root.img [pagesize] [ecctype]
mkyaffs2image使用:
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
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
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
Example:mkyaffs2image100 ./rootfs rootfs_4k4bit.yaffs 4k 4bit
————————————————
版权声明:本文为CSDN博主「Ternence_Hsu」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ternence_hsu/article/details/60878471