新闻中心

EEPW首页>嵌入式系统>设计应用> 嵌入式Linux系统中的快速启动技术研究

嵌入式Linux系统中的快速启动技术研究

作者: 时间:2008-06-13 来源:单片机与嵌入式系统应用 收藏

  预链接(Prelink)利用这一点,修改ELF共享库和二进制文件,将链接信息加入到可执行文件中以简化动态链接重定位,从而使程序启动加快。预链接首先搜集要预链接的ELF二进制文件及其所依赖的共享库,为每个库分配唯一的虚拟空间位置,并将共享库重新链接到这个基准位置(动态链接器要加载这个库时,只要虚拟空间地址未被占用,它就会将库映射到指定位置);然后预链接解析二进制或者库中的所有重定位,并将重定位信息存放到ELF对象,还要将所有依赖库的列表及校验和添加到二进制文件或库中。对于二进制文件,还需列出所有的冲突(在共享库的自然搜索范围内对符号的解析不相同)。在运行时,动态链接器先检查是否所有依赖的库都已经映射到指定的位置,而且库文件没有变化,只考虑冲突而不用处理每个库的重定位,这样大大提高了程序启动的速度。使用时要注意的是,若共享库发生了改变,则使用它的所有程序都要重新链接,否则程序仍要进行耗时的正常重定位。

本文引用地址://m.amcfsurvey.com/article/84199.htm

  3和文件系统优化

  3.1 代码执行方式

系统中代码的执行方式主要有3种:

  ① 完全映射(fully shadowed)。系统程序运行时,将所有的代码从非易失存储器(Flash、ROM等)复制到RAM中运行。

  ② 按需分页(demand paging)。只复制部分代码到RAM中。这种方法对RAM中的页进行导入/导出管理,如果访问位于虚存中但不在物理RAM中会产生页错误,这时才将代码和数据映射到RAM中。

  ③ eXecute In Place ()。在系统启动时,不将代码复制到RAM,而是直接在非易失性存储位置执行。RAM中只存放需要不断变化的数据部分,如图1所示。如果非易失性存储器的读取速度与RAM相近,则可以节省复制和解压的时间。NOR Flash和ROM的读取速度比较快(约100 ns),适合XIP;而NAND Flash的读操作是基于扇区的,速度相对很慢(μs级),因此不宜实现XIP。

  图1 完全映射和XIP的比较

  XIP可以分为以下2种:

  ① 内核XIP。直接在Flash/ROM中运行内核,可以节省复制和映像解压的时间。2.6.10内核已经包含了XIP支持。

  ② 应用程序XIP。直接从应用程序代码的存储位置执行,而不用将它加载到RAM中,这样应用程序的第一次执行速度会比较快。要使用应用程序XIP,应该基于支持它的文件系统。

  3.2 XIP文件系统

  目前XIP文件系统的实现主要有2种: Linear XIP CRAMFS和Advanced XIP File System(AXFS)。

  CRAMFS是一个压缩的只读文件系统,本来用于桌面系统的启动,但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,同时在内存使用、垃圾回收、访问速度等方面有所改进。

  结语

对于嵌入式系统是比较迫切的要求之一。本文通过分析嵌入式系统的引导过程和关键时延因素,提出了相应的解决办法,并对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).

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭