PG电子游戏官网 - pg电子娱乐官方网站

嵌入式Linux快速启动技术探究

时间:2021-12-19 21:58
本文摘要:嵌入式Linux系统主要特点在于用于Bootloader替代了桌面系统的BIOS,同时对系统展开了规模上的剪裁,但硬件上的劣势往往造成系统启动速度较快,而嵌入式产品使用者又对系统的开机速度较为脆弱,样就产生了对于提升嵌入式Linux系统启动速度的市场需求。本文对系统启动时继续执行哪些阶段的操作者,以及延长这些操作者时间的方法展开了探究。 1嵌入式Linux系统启动时序 目前,嵌入式系统的硬件平台和应用于方向区别相当大,但总体启动流程完全一致的。

pg电子娱乐官方网站

嵌入式Linux系统主要特点在于用于Bootloader替代了桌面系统的BIOS,同时对系统展开了规模上的剪裁,但硬件上的劣势往往造成系统启动速度较快,而嵌入式产品使用者又对系统的开机速度较为脆弱,样就产生了对于提升嵌入式Linux系统启动速度的市场需求。本文对系统启动时继续执行哪些阶段的操作者,以及延长这些操作者时间的方法展开了探究。

  1嵌入式Linux系统启动时序  目前,嵌入式系统的硬件平台和应用于方向区别相当大,但总体启动流程完全一致的。这里的系统启动是所指从用户继续执行上电/废黜操作者,到系统开始获取用户可接管的服务水平所必须的过程。典型的上电/废黜时序如表格1所列。表格1嵌入式Linux系统启动时序  2Linux较慢启动方法  目前,一些Linux的发售版本早已对启动速度展开了优化。

如果利用标准Linux展开研发,则启动速度的提升主要是通过内核配备和各种补丁包来构建的。下面分析较慢启动的一些关键技术。  2.1Firmware和Bootloader阶段  目标板一旦确认,Firmware运营的时间就无法转变了,Flash和RAM的读取速度也就随之确认了。

但  如果废黜时需要跨过Firmware和Bootloader,即容许运营中的内核读取以及运营另一个内核,可以延长启动的时间。典型的构建有Kexec,它有2个组件,即用户空间组件kexectools和内核补丁。另外一种办法是在内核命令行中重新加入reboot=soft数,某种程度可以跳过Firmware,但是缺点在于无法从用户空间调用。  对于长时间启动,可以自由选择速度较为慢的Bootloader,并对内核展开小型化处置;还可以用于高速的光碟复制技术(如DMA2RAM),从而延长拷贝的时间。

为了延长可执行文件消耗的时间,可谋求较为高效的压缩算法。但一般情况下,压缩比越高,算法就越简单,可执行文件速度就越慢,从而导致拷贝时间(与压缩比成反比)和可执行文件时间(一般与压缩比成正比)之间的对立。  2.2内核阶段  内核初始化时要对RealTimeClock(RTC)展开实时。此过程要闲置1s的时间,可去除以节约时间,但这样CPU不会与准确的时间有1s的偏差,如果关机时CPU时钟又要留存在RTC中,偏差就不会大大积累。

但对于用于外部时钟源展开实时的系统,则可安全性地跳过这个阶段。  PresetLPJ可以用来延长每次启动时调用calibrate_delay()来校准loops_per_jiffy消耗的时间。这个时间支出与CPU频率牵涉到,在典型的嵌入式硬件环境持续性消耗300ms左右。LPJ值对于相同硬件平台应当是完全一致的,可以只计算出来一次,在先前的启动中就可以在启动参数中强迫登录LPJ值,而跳过实际的计算出来过程。

具体方法是:在长时间启动后记录下内核启动信息中的CalibratingDelay数值,在启动参数中以lpj=xxxxxx的形式强迫登录。  启动过程配置文件关上控制器输入启动消息,但是控制器特别是在是基于帧缓冲器的控制器不会减缓启动速度。因此在嵌入式Linux产品中,将启动过程中的控制器另设为静默状态,方法是在内核启动参数中重新加入quiet。

  设备搜寻和驱动加装是较为耗时的操作者,因此要在编译器内核时确认必须加装哪些驱动模块,以免系统搜寻那些显然不不存在的设备,特别是在是多余的IDE设备。对于启动时继续不必加装的设备,尽可能将驱动编译成模块,在以后空闲时或者用于设备时读取,而不是全部放到启动阶段。

  2.3用户空间阶段  传统Linux的初始化脚本是由bash继续执行的,在内核引领后启动init进程(/sbin/init)。它用于一个ASCII文件(/etc/inittab)来转变运营级别,这个文件中又不会调用RCSript,由RCSript查询/etc/rc.d/rc5.d/并启动适当链接指向的系统服务。

  消费电子类Linux系统必须落成图形界面等适当的服务,予以优化的系统在这个过程中不会配置文件启动很多显然用将近或者当前用将近的系统服务,这一部分会花去较小的时间支出。最简单的优化办法就是根据实际必须,通过重写服务配置文件自定义系统服务。

另外,init脚本的继续执行是串行的,在脚本量大时会造成引领过程十分,因此可以考虑到分段运营各种服务以减缓启动的速度。现在早已经常出现了一些初始化程序来替代init进程,下面讲解initng和upstart。

  initng(initnextgerneration)需要分段启动服务从而较慢已完成初始化工作。initng指出符合了倚赖关系的服务就可以启动。

在从外存读取一个脚本或等候硬件设备启动的同时,可以运营另一个脚本来启动别的服务,使系统在CPU和I/O之间构建较好的均衡。作为一个基于倚赖关系的解决方案,initng用于自己的初始化脚本集,它们对服务和城主进程的依赖性展开了编码。如果某个服务倚赖(用于need关键字定义)于其他服务,则要确保启动时它所倚赖的所有服务皆能用。

无倚赖关系的服务立刻分段启动,具备倚赖关系的服务则要等候以安全性启动。  upstart与initng的区别在于:upstart基于事件,任务/服务的启动/暂停都各不相同它所等候的事件否再次发生。upstart对事件的定义非常灵活,分成3类:edge(simple)events,level(value)events和temporalevents。

用于start/stop、事件名以及它所期望的值(可选)构成条目对启动时事件展开叙述。事件倚赖有两种办法:一种是任务自身造成事件再次发生,不管任务何时启动/完结都会有事件再次发生,对于启动时要继续执行的基本任务,这种办法较为有效地;而对于较简单的倚赖关系,则可用于任务的Shell脚本工具。  2.4实加载和实链接  实加载(Readahead)可以将文件(程序和库文件)在用于之前预先读取到RAM内存中,这样就不必在用于时为加载这个文件而采访I/O。

如果告诉下一步操作者要采访哪些文件,就可以提早将它们全部  /部分加载到缓冲区,从而减缓继续执行速度。嵌入式系统很多场合下对于下一步操作者都是可预测的,比如系统启动时总是以某种程度的顺序采访某种程度的可继续执行/数据文件,文件块的采访往往是顺序的,应用程序启动时总是采访某种程度的程序文件段、分享库、资源或者输出文件。

这样用于实加载有很强的针对性,从而提升程序执行速度。  ELF(ExcutableandLinkableFile)是目前Linux中的标准二进制格式,其启动必须以下步骤:将分享库同构到虚拟地址空间;解析符号提到;初始化每个ELF文件。

pg电子娱乐官方网站

由于分享库是方位牵涉到的,要在运营时已完成部分重定位处置和符号查询的工作,才能跳跃到程序的入口点,因此在带给灵活性的同时,也导致ELF文件的启动速度较慢,特别是在是解析符号提到要消耗大量的时间,对于用于多个分享库的大型程序更是如此。但在很多嵌入式系统中,可执行文件和分享库很少变化,而且每次程序运行时链接工作完全相同。  实链接(Prelink)利用这一点,改动ELF分享库和二进制文件,将链接信息重新加入到可执行文件中以修改动态链接重定位,从而使程序启动减缓。实链接首先收集要实链接的ELF二进制文件及其所倚赖的分享库,为每个库分配唯一的虚拟空间方位,并将分享库新的链接到这个基准方位(动态链接器要读取这个库时,只要虚拟空间地址并未被闲置,它就不会将库同构到登录方位);然后实链接解析二进制或者库中的所有重定位,并将重定位信息存放在到ELF对象,还要将所有倚赖库的列表及校验和加到到二进制文件或库中。

对于二进制文件,还须要所列所有的冲突(在分享库的大自然搜寻范围内对符号的解析不完全相同)。在运营时,动态链接器再行检查否所有倚赖的库都早已同构到登录的方位,而且库文件没变化,只考虑到冲突而不必处置每个库的重定位,这样大大提高了程序启动的速度。用于时要留意的是,若分享库再次发生了转变,则用于它的所有程序都要新的链接,否则程序仍要展开耗时的长时间重定位。


本文关键词:嵌入式,Linux,快速,启动,技术,探究,嵌入式,Linux,pg电子娱乐官方网站

本文来源:pg电子娱乐官方网站-www.zjfmdp.com