打印

教你如何快速启动Linux 系统

[复制链接]
193|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一亚麻怡|  楼主 | 2018-10-3 20:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
教你如何快速启动Linux 系统



一、 简介

Linux 系统以其开源的特性得到了广泛的应用,在嵌入式系统编程中也占有越来越大的

份量。Linux 系统安全可靠、内核可定制、源代码开放等这些都其优点,但Linux 系统也不

足之处,比如实时不好,比如启动时间过长。本文主要就如何加快Linux 系统的启动速度进

行了总结和探讨。





二、 系统启动流程

一个基于Linux 系统的嵌入式软件的一般启动流程如下:

图1. Linux 系统启动流程

三、 加速启动的方法

以上流程中每一步都可以进行优化,每步的优化方法如下:

1. 为加快从Flash 读取内核的速度可以做以下工作:

1) 根据自己使用的Flash 的用户手册,修改其参数配置,使其读写速度尽可

能的达到最快。

2) 裁剪内核,减小内核体积。在编译内核时去掉不需要的硬件驱动、文件系

从Flash 读取内核

到内存

在内存解压并运

行内核

加载根文件系统

及应用程序镜像

到内存

运行根文件系统

启动脚本

运行主程序

启动完成

统、调试信息,使内核尽可能地达到最小。比如可以去掉内核对键盘、鼠

标等硬件的支持,去掉RomFs、RamDisk 等文件系统的支持。内核中的

文件系统占了相当大的部分,因此应尽量去掉那些根本不需要文件系统。

3) 把内核中一些模块直接编译成模块的方式,而不是与内核编译在一起,在

内核启动之后再装载那些模块,这样也能减小内核体积。比如网卡驱动,

USB 驱动,这些都不是内核启动所必需的模块,因此不必与内核编译一起,

而是编译成单独的模块,当内核启动之后再加载这些模块即可。

深圳/郑州专业嵌入式、单片机、FPGA、等技术实训交流QQ1187729241

2. 为加快在内存中运行内核的速度,可以完全屏蔽掉printk 函数的输出,去掉了在

运行内核时的所有的调试输出信息,这样也能缩短解压并运行内核的时间。printk

函数的输出对启动时间影响很大,在项目刚开始时系统启动时间居然需要4 分钟

左右,后来把printk 的输出屏蔽掉之后启动时间就骤降到40 秒左右,所以printk

对系统的启动时间影响很大。

3. 为加快装载根文件系统和主应用程序到内存中可以采取以下措施:

1) 根文件系统的格式采用cramfs 格式。嵌入式系统中的文件系统有许多,

比如romfs,ramfs,jffs2,cramfs,yaffs 等,通过对各种文件系统进行

比较,最后确定使用cramfs 文件系统,该文件系统在从Flash 加载到内

存中的速度比较理想。学习交流Q1187729241

刚开始时我们采用的是jffs2 文件格式,且应用程序和根文件系统放在两

个不同的分区,此时的系统的启动时间是30 秒左右,一直无法降下去。

后来技术支持建议用cramfs 文件系统,且把根文件系统和应用程序放在

一直做成一个镜像文件一起加载,结果启动时间就降了五六秒左右。

2) 用动态库代替静态库来缩小主应用程序的体积,这样也能加快加载主应用

程序到内存的速度。

4. 为加快启动脚本的运行,可以把该启动脚本中的任务最大限度的删减,把所有无关

的任务都去掉;另外还把一些能并行启动的任务都做成并行执行,这样就加快了加

载系统中各任务的速度。

5. 在运行主程序这一步中,可以优化应用程序中各任务的启动时机,把播放电视节目

的任务尽可能的提前,这样用户开机之后就能很快看到电视节目,在开始播放电视

节目之后,才在后台对其它任务进行初始化。

通过以上各种方法的组合应用,我们项目把启动时间控制在了22 秒左右。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

404

主题

404

帖子

0

粉丝