用户中心

资讯 > 嵌入式系统

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

2008.06.13阅读 4370

  嵌入式Linux系统主要特点在于使用Bootloader替代了桌面系统的BIOS控制工程网版权所有,同时对系统进行了规模上的裁剪,但硬件上的劣势往往导致系统启动速度较慢www.cechina.cn,而嵌入式产品使用者又对系统的开机速度比较敏感,样就产生了对于提高嵌入式Linux系统启动速度的需求。本文对系统启动时执行哪些阶段的操作,以及缩短这些操作时间的方法进行了探讨。

  1 嵌入式Linux系统启动时序

  目前,嵌入式系统的硬件平台和应用方向区别很大,但总体启动流程一致的。这里的系统启动是指从用户执行上电/复位操作,到系统开始提供用户可接收的服务水平所需要的过程。典型的上电/复位时序如表1所列。

  表1 嵌入式Linux系统启动时序

  2 Linux快速启动方法

  目前,一些Linux的发行版本已经对启动速度进行了优化。如果利用标准Linux进行开发,则启动速度的提高主要是通过内核配置和各种补丁包来实现的。下面分析快速启动的一些关键技术。

  2.1 Firmware和Bootloader阶段

  目标板一旦确定,Firmware运行的时间就无法改变了www.cechina.cn,Flash和RAM的读写速度也就随之确定了。但

如果复位时能够绕过Firmware和Bootloader,即允许运行中的内核加载以及运行另一个内核,可以缩短启动的时间。典型的实现有Kexec,它有2个组件,即用户空间组件kexectools和内核补丁。另外一种办法是在内核命令行中加入reboot=soft数,同样可以跳过Firmware,但是缺点在于无法从用户空间调用。

  对于正常启动,可以选择速度比较快的Bootloader,并对内核进行小型化处理;还可以使用高速的映像复制技术(如DMA2RAM),从而缩短复制的时间。为了缩短解压消耗的时间CONTROL ENGINEERING China版权所有,可寻求比较高效的压缩算法。但一般情况下,压缩比越高,算法越复杂,解压速度就越慢,从而造成复制时间(与压缩比成反比)和解压时间(一般与压缩比成正比)之间的矛盾。

  2.2 内核阶段

  内核初始化时要对RealTime Clock (RTC)进行同步。此过程要占用1s的时间,可去掉以节约时间,但这样CPU会与正确的时间有1s的偏差,如果关机时CPU时钟又要保存在RTC中,偏差就会不断累积。但对于使用外部时钟源进行同步的系统,则可安全地跳过这个阶段。

  Preset LPJ可以用来缩短每次启动时调用calibrate_delay()来校准loops_per_jiffy消耗的时间。这个时间开销与CPU频率无关,在典型的嵌入式硬件环境下会消耗300ms左右。LPJ值对于固定硬件平台应该是一致的,可以只计算一次,在后续的启动中就可以在启动参数中强制指定LPJ值,而跳过实际的计算过程。具体方法是:在正常启动后记录下内核启动信息中的"Calibrating Delay"数值,在启动参数中以"lpj=xxxxxx"的形式强制指定。

  启动过程默认打开控制台输出启动消息,但是控制台尤其是基于帧缓冲的控制台会减慢启动速度。因此在嵌入式Linux产品中,将启动过程中的控制台设为静默状态,方法是在内核启动参数中加入"quiet"。

  设备搜索和驱动安装是比较耗时的操作,因此要在编译内核时确定需要安装哪些驱动模块,以免系统搜索那些根本不存在的设备,尤其是多余的IDE设备。对于启动时暂时不用安装的设备,尽量将驱动编译成模块,在以后空闲时或者使用设备时加载,而不是全部放在启动阶段。

  2.3 用户空间阶段

  传统Linux的初始化脚本是由bash执行的,在内核引导后启动init进程(/sbin/init)。它使用一个ASCII文件(/etc/inittab)来改变运行级别,这个文件中又会调用RCSript,由RCSript查找/etc/rc.d/rc5.d/并启动相应链接指向的系统服务。

  消费电子类Linux系统需要启用图形界面等必要的服务,未经优化的系统在这个过程中会默认启动很多根本用不到或者当前用不到的系统服务CONTROL ENGINEERING China版权所有,这一部分会花去较大的时间开销。最简单的优化办法就是根据实际需要,通过改写服务配置文件定制系统服务。另外,init脚本的执行是串行的,在脚本量大时会导致引导过程非常,因此可以考虑并行运行各种服务以加快启动的速度。现在已经出现了一些初始化程序来替代init进程,下面介绍initng和upstart。

  initng(init nextgerneration)能够并行启动服务从而快速完成初始化工作。initng认为满足了依赖关系的服务就可以启动。在从外存加载一个脚本或等待硬件设备启动的同时,可以运行另一个脚本来启动别的服务,使系统在CPU 和 I/O 之间实现较好的平衡。作为一个基于依赖关系的解决方案,initng使用自己的初始化脚本集,它

标签:嵌入式,
版权声明:版权归控制工程网所有,转载请注明出处!

频道推荐

关于我们

控制工程网 & CONTROL ENGINEERING China 全球工业控制、自动化和仪器仪表领域的先锋媒体

CE全球

联系我们

商务及广告合作
任小姐(北京)                 夏小姐(上海)
电话:010-82053688      电话:18616877918
rendongxue@cechina.cn      xiashuxian@cechina.cn
新闻投稿:王小姐

关注我们的微信

关于我们 | 网站地图 | 联系我们
© 2003-2020    经营许可编号:京ICP证120335号
公安机关备案号:110102002318  服务热线:010-82053688