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

1 嵌入式Linux系统启动时序

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

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

2 Linux快速启动方法

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

2.1 Firmware和Bootloader阶段

目标板一旦确定,Firmware运行的时间就无法改变了,Flash和RAM的读写速度也就随之确定了。但如果复位时能够绕过Firmware和Bootloader,即允许运行中的内核加载以及运行另一个内核,可以缩短启动的时间。典型的实现有Kexec,它有2个组件,即用户空间组件kexectools和内核补丁。另外一种办法是在内核命令行中加入reboot=soft数www.cechina.cn,同样可以跳过Firmware,但是缺点在于无法从用户空间调用。

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

2.2 内核阶段

内核初始化时要对RealTime Clock (RTC)进行同步。此过程要占用1s的时间www.cechina.cn,可去掉以节约时间,但这样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系统需要启用图形界面等必要的服务,未经优化的系统在这个过程中会默认启动很多根本用不到或者当前用不到的系统服务,这一部分会花去较大的时间开销。最简单的优化办法就是根据实际需要,通过改写服务配置文件定制系统服务。另外控制工程网版权所有,init脚本的执行是串行的,在脚本量大时会导致引导过程非常,因此可以考虑并行运行各种服务以加快启动的速度。现在已经出现了一些初始化程序来替代init进程,下面介绍initng和upstart。

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

嵌入式Linux初始化硬件RTC,嵌入式Linux系统中的快速启动技术研究相关推荐

  1. 工控设备 如何将数据发送到串口_嵌入式无风扇工控机在水质监测系统中的应用...

    行业背景: 随着城市人口的增加和工农业生产的发展,污水排放量也日益增加,水体污染相当严重,大量生活污水和生产废水对生态环境造成破坏,在未来很长一段时间内保护生态环境治理水污染仍是我国实现经济社会可持续 ...

  2. c语言控制安卓桌面,让你自己编写的Android的Launcher成为系统中第一个启动应用程序,也是唯一的Launcher...

    关注嵌入式安卓物联网行业及人才培养,每日更新,欢迎订阅及留言讨论~~~ 作者:倪键树,嵌入式安卓物联网讲师. 让你自己编写的Android的Launcher成为系统中第一个启动应用程序,也是唯一的La ...

  3. 人脸识别系统中的活体检测技术有哪些分类

    人脸识别系统在实际应用中会面对照片.视频.面具等道具攻击,为了这防止这些欺诈手段,在系统中应用到活体检测,检测识别的人员是否为活体,提高应用的安全性.由畅视智能与你分享应用到人脸识别系统中的活体检测技 ...

  4. 海洋洋流图绘制 html5,虚拟现实系统中海洋洋流可视化的研究与实现

    摘要: 对于虚拟现实技术的探索以及对海洋自然场景的仿真是现如今的热点问题,本论文虚拟现实系统中海洋洋流可视化的研究与实现,主要针对虚拟现实中海洋洋流的仿真中的三个方面:数据驱动水面.光照渲染以及漂浮物 ...

  5. 计算机快速启动栏在哪,win7系统怎么找到快速启动栏

    在WinXP的任务栏中,有一个"快速启动栏",用户可以将应用程序放到快速启动栏中,方便打开.那么win7系统怎么找到快速启动栏呢?下面学习啦小编就为大家带来了win7系统找到快速启 ...

  6. window自带的计算机应用程序,如何设置Window 10系统中默认的启动程序

    原标题:如何设置Window 10系统中默认的启动程序 大家好,我是波仔,非常高兴与大家一起来分享和探讨,来一起学习吧. 现在计算机的功能越来越大,应用软件的种类也越来越多,往往一个功能在计算机上会安 ...

  7. 中国已在税务系统中使用区块链技术

    23日TMF Group发布2019年度<全球商业复杂性指数:会计和税务报告>(以下简称"会计和税务报告").<全球商业复杂性指数>系TMF Group 2 ...

  8. 基于智慧防雷系统的大数据应用技术研究

    基于智慧防雷系统的大数据应用技术研究 一.  引言 最近几年随着大数据技术的快速发展和应用,智慧城市随即也被正式提出,而且我们也可以深刻感受到"智慧"正在慢慢改变我们的生活方式和城 ...

  9. linux初始化内存盘卡住,Linux系统内存磁盘初始化技术详细解析

    转自:http://m.zol.com.cn/article/1271270.html?via=index Linux内存初始化技术(initrd)用于支持两阶段的系统引导过程,是在系统启动过程中被挂 ...

最新文章

  1. React篇-报错信息:warning: Can't call setState (or forceUpdate) on an unmounted component.
  2. java自学小段 产生随机数
  3. newhope代码在vs2019的编译
  4. 引入JQuery提示:Uncaught ReferenceError: $ is not defined
  5. 如何使用PyTorch的量化功能?
  6. C++若不想使用编译器自动生成的函数,就该明确拒绝
  7. 牛客IOI周赛19-普及组 C.小y的旅行
  8. 使用SoapHeader对WebService进行身份验证
  9. 浅谈 Kubernetes 服务发现
  10. 更换mysql_用这47 张图带你 MySQL 进阶!!!
  11. 为什么使用3msip2协议_知识卡片 | 链路状态路由协议OSPF凭什么会取代RIP?
  12. PS教程:快速蒙版抠图
  13. 了解uni-app只需这一篇就足够了
  14. IT创业项目-赚钱项目-网赚项目:月入2W+的视频号创业项目
  15. 赛迪中国ECM市场报告解读一:市场需求在2023年将达到275亿元
  16. html%3c怎么表示,怎么打出英寸符号 英寸和英尺分别用什么符号表示?
  17. Windows CMD命令行一启动就闪退问题解决
  18. 机器学习 实验一 KNN
  19. 系统设计原则及技术指标
  20. 关显示器后计算机不休眠状态,win10系统自动关闭显示器而不进入睡眠状态设定的设置步骤...

热门文章

  1. Java实现多线程售票
  2. 原神服务器维护后抽奖池会更新吗,原神:更新维护一小时,补偿60原石,玩家祈求多维护几天!...
  3. bootstracp实现树形列表_Java实现一致性哈希算法,并搭建环境测试其负载均衡特性...
  4. mysql 账户管理_Mysql账户管理原理与实现方法详解
  5. wxpython多线程 假死_wxpython中利用线程防止假死的实现方法
  6. 容器中apscheduler不执行_APScheduler:定时任务框架
  7. java mongodb 插入数据_mongoDB 插入数据 用java实现
  8. python变量区变量保存与加载_python – Flask:使用全局变量将数据文件加载到内存中...
  9. LDAP命令介绍---dsreplication
  10. JDK源码解析之 Java.lang.String