3.2 XIP 文件系统
目前XIP文件系统的实现主要有2种: Linear XIP CRAMFS 和Advanced XIP File System(AXFS)。
CRAMFS是一个压缩的只读文件系统,本来用于桌面 Linux 系统的启动,但CRAMFS经过修改后可以支持嵌入式系统并支持XIP。Linear XIP CRAMFS用一个stICky bit对它管理的文件进行区分,标记为压缩(按需分页)或者未压缩(XIP)。如果文件标记为XIP,则所有页都不压缩,而且要在Flash中连续存储。在加载XIP文件时,直接对所有页地址进行映射;而按需分页的文件则在发生页错误时,将相应页解压到RAM中。
要创建Linear XIP CRAMFS文件系统映像,必须确定可执行文件和库文件的使用频率,频繁使用的文件适合于XIP,而其他文件应该进行压缩。现在有一些工具(如RAMUST和CFSST)可以帮助判断哪些文件需要XIP,而哪些不需要。下面就可以给XIP文件加上标记并制作根文件系统,以使用mkfs.cramfs工具为例:
chmod +t filenames
mkfs.cramfs–x rootfs rootfs.bin
另外,还要修改内核配置参数以支持XIP:在启动选项中向默认内核命令字符串中加入rootfstype=cramfs,选择内核XIP并设置XIP内核物理地址;在驱动程序中加入MTD对XIP的支持;在文件系统中加入对Linear XIP CRAMFS的支持。接下来就可以生成XIP映像了。
Linear XIP CRAMFS的一个缺陷在于它是基于文件的,即一个文件中的所有页要么全部采用XIP,要么全部采用压缩/按需分页,但事实上同一文件中不同页的使用频率区别也很大。AXFS是Intel公司开发的一个新的只读文件系统,它从Linear XIP CRAMFS中继承了许多方法,同时也进行了一些改进。AXFS的XIP粒度是基于页的,并且自带工具来判断哪些页需要XIP,哪些页需要压缩,从而更好地在速度和RAM/Flash的使用上取得平衡。
3.3 非XIP文件系统
XIP一般基于NOR Flash,成本相对较高。对于用户数据量大的应用,往往还要使用基于NAND Flash的,非XIP的文件系统常用的有JFFS2/YAFFS。
JFFS2是一种基于压缩的文件系统。在多媒体应用中,如果图片、音视频已经经过压缩,则使用JFFS2无疑会给CPU带来双重的压缩/解压负担,访问速度也会受到影响。因此,在这类应用比较密集的应用中,采用不压缩的文件系统(如YAFFS/YAFFS2)可以加快系统速度。
YAFFS/YAFFS2是专为嵌入式系统使用NAND Flash设计的日志文件系统。与JFFS2相比,减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。YAFFS/YAFFS2自带NAND芯片的驱动,用户可以不使用MTD和VFS,直接对文件系统操作。YAFFS与YAFFS2的主要区别在于:前者仅支持小页(512字节) NAND Flash;后者则可支持大页(2 KB) NAND Flash,同时在内存使用、垃圾回收、访问速度等方面有所改进。
结语
快速启动 对于嵌入式Linux系统是比较迫切的要求之一。本文通过分析嵌入式系统的引导过程和关键时延因素,提出了相应的解决办法,并对XIP文件系统进行了介绍。由于启动速度非常依赖于硬件平台,而且有的方法互相排斥,因此在具体应用时需要综合考虑和选择。
参考文献
[1] Tim Bird R. Methods to Improve Bootup Time in Linux [R]. Proceedings of the Linux Symposium, Ottawa,2004.
[2] Karim Yaghmour. 构建嵌入式Linux系统[M]. 北京:中国电力出版社, 2004: 49-66.
[3] 陈莉君. 深入分析Linux内核源代码[M]. 北京:人民邮电出版社, 2001: 477-499.
[4] 左大全,吴刚. 嵌入式Linux快速启动与XIP应用[J]. 计算机工程与科学,2006(12).
上一篇:游戏系统制造商采用精实操作系统