=========================        基本常识       =========================

Linux系统基本启动流程:

1、 CPU从ROM(如果有的话)的0x0地址开始读取代码,执行loader;

2、 Loader初始化ram,从rom中拷贝uboot或kernel的镜像到ram的指定地址并执行;

3、 Uboot(如果有)拷贝kernel镜像和dtb文件到ram的指定地址,并运行kernel;

4、 设置bootargs会被覆盖,kernel启动;

5、 Kernel自解压;

6、 Kernel初始化;

7、 Kernel加载内置驱动程序,启动硬件设备;

8、 加载文件系统,读取并执行/etc/inittab.

=========================      快速启动原理     =========================

一、 基本原理

1、 硬件IO时间;

2、 流程精简;

3、 内核精简;

二、 启动流程分析

1、 0x0,一级loader,配置ram; à必须;

2、 拷贝uboot或kernel及dtb到ram; à必须,从ROM读值,IO时间;

3、 Uboot(如果有)拷贝kernel和dtb; à可去除,直接跳过;

4、 设置bootargs,kernel启动; à非必须,不占IO时间;

5、 Kernel自解压; à可精简,但会加长2的IO时间;

6、 Kernel初始化; à必须;

7、 Kernel加载内置驱动程序,启动硬件设备; à可精简,占大量IO时间;

8、 扫描ROM; à可去除;

9、 挂载文件系统; à必须,但为了8,可调整到2;

10、 读取并执行/etc/inittab. à必须;

三、 基本思路

1、 Loader

  1. Loader存在的目的就是为了引导系统;
  2. 除非必要,不需要loader来驱动硬件,否则linux就没有存在的必要;

2、 Kernel

  1. 必要的常识:Kernel的启动只与CPU及ram有关;
  2. Kernel内嵌驱动,是为了应对固件挂载前必须要做的硬件IO操作;

3、 文件系统

  1. Kernel启动时,文件系统不一定要从rom中读取,也可以在ram中读取;
  2. Rom在loader中已经能够使用,可以趁这个时候把需要的东西一次性读出,没有必要占用kernel启动的宝贵时间;
  3. 为了加速loader加载文件系统的速度,文件系统又可分为通用部分(<3mb)、固件部分,由kernel中的cramfs驱动加载启动文件系统,先完成启动任务,再从启动文件系统中加载rom设备的驱动,再加载固件文件系统;

四、 调整后的启动流程

1、 0x0,一级loader,配置ram;

2、 拷贝kernel(精简),dtb,文件系统镜像(精简)到ram;

3、 设置bootargs,kernel启动;

4、 Kernel自解压;

5、 Kernel初始化;

6、 Kernel加载必须的驱动程序备;

7、 挂载通用文件系统;

8、 读取并执行/etc/inittab;

9、 挂载固件,包括驱动程序、额外的应用软件及LIB;

=========================      快速启动配置     =========================

一、 精简loader

思路:

1、 Loader的目的是为内核准备启动的条件;

2、 Loader跳过准备运行环境的步骤,直接加载内核即可;

方法:

注:各大厂商的bootloader千差万别,只能介绍大概的办法

1、 如果官方工程有跳过uboot的方法,那么直接采用这种方法;

2、 若1不可取,则删改uboot代码,在进入uboot,硬件初始化结束后,不进行uboot用户环境的初始化,直接使用源代码加载和启动镜像;

效果:bootloader过程耗时减少;bootloader体积缩小;

二、 精简kernel

思路:只保留启动所必须的驱动程序即可,如cramfs的读写驱动,音频驱动(开机音乐),其余驱动做成ko文件,放到文件系统中;

方法:

1、 make ARCH=arm menuconfig,砍掉不会用到的驱动;

2、 启动时不需要的,但应用程序需要的驱动程序,设置为module,从内核剥离,;

3、 Busybox必须提供insmod功能;

效果:内核体积缩小,loadder加载kernel的时间缩短,kernel解压缩时间缩短,kernel启动到挂载文件系统的时间缩短;

三、 精简rootfs(即制作通用部分)

思路:

只保留:1、busybox;2、通用的/etc配置文件;3、加载固件所需的驱动程序(rom相关);4、启动任务所需要的文件(比如音频播放器);5、相关运行库;使用cramfs打包,体积约2.4mb;

效果:该文件系统可以直接在ram中运行,可以延迟加载rom驱动;

四、 制作固件

1、 剩余的所有文件全部封装到固件系统中(ext4格式或ubi格式);

2、 但需要注意的是固件的/etc中需要有一个rc.local文件,当rootfs中定制的任务完成后,调用该文件启动固件的任务;

3、 为了保持系统的正常运行,原/etc中的rcS文件在挂载固件后,要添加额外操作:

# 挂载固件

Mount /dev/*** /mnt

# 用固件的etc覆盖通用的etc,应用固件的配置及恢复写权限

Mount /mnt/etc /etc

# 用固件的var覆盖通用的var,恢复读写权限

Mount /mnt/var /var

# 扩展lib搜索范围到固件的/lib和/usr/lib,保证程序正常运行

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/lib:/mnt/usr/lib

# 执行固件的启动配置脚本

/etc/init.d/rc.local

Linux系统快速启动方案的更多相关文章

  1. CentOS(四)--Linux系统的启动级别

    对于绝大多数Linux程序员来说,进入Linux系统后一般看到的是黑乎乎的界面(开发模式),因为系统如果启动选择开发模式,会减少启动时间,优化内存等.但是通常我们刚安装完Linux系统,然后进去以后是 ...

  2. 2021年3月-第01阶段-Linux基础-Linux系统的启动流程

    Linux系统的启动流程 理解Linux操作系统启动流程,能有助于后期在企业中更好的维护Linux服务器,能快速定位系统问题,进而解决问题. 上图为Linux操作系统启动流程 1.加载BIOS 计算机 ...

  3. 探索 Linux 系统的启动过程

    引言 之所以想到写这些东西,那是因为我确实想让大家也和我一样,把 Linux 桌面系统打造成真真正正日常使用的工具,而不是安装之后试用几把再删掉.我是真的在日常生活和工作中都使用 Linux,比如在 ...

  4. 腾讯云Linux系统中启动自己安装的tomcat

    腾讯云Linux系统中启动自己安装的tomcat 首先通过工具查看一下安装的tomcat的位置 进入命令行之后输入以下指令: 此时,tomcat已经启动了.

  5. [转] 浅谈Linux系统的启动流程

    原文:http://blog.csdn.net/justdb/article/details/9621271 版权声明:本文为博主原创文章. Linux系统的启动时通过读取不同的配置文件,执行相应的S ...

  6. 详解linux系统的启动过程及系统初始化

    一.linux系统的启动流程 关于linux系统的启动流程我们可以按步进行划分为如下: POST加电自检 -->BIOS(Boot Sequence)-->加载对应引导上的MBR(boot ...

  7. 浅谈Linux系统的启动流程

    Linux系统的启动时通过读取不同的配置文件,执行相应的Shell脚本完成的.当然本文只是简单的从文件的角度分析,更深层次的本文没涉及. 主要读取了以下文件:  /boot/grub/grub.con ...

  8. Linux系统下启动MySQL报错:Neither host &#39;localhost.localdomain&#39; nor &#39;localhost&#39; could be looked up with

    Linux系统下启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with 摘要 Li ...

  9. Linux系统的启动过程

    Linux 系统启动过程 Linux系统的启动过程可以分为5个阶段: BIOS自检 内核的引导. 运行init. 系统初始化. 用户登录系统. BIOS自检: BIOS是英文"Basic I ...

随机推荐

  1. JDK动态代理与Cglib库

    JDK动态代理 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在 ...

  2. 帝国CMS 6.0功能解密之新版结合项功能,帝国结合项使用

    可以用来做A-Z信息检索    某字段等于多少,输出  等等 帝国CMS6.0在继承以往版本结合项功能的基础上又新增很多特性,更强大.今天我们就专门来讲解6.0的结合项改进. 回顾下以往版本的结合项语 ...

  3. linux下tomcat服务的启动、关闭与错误跟踪

    linux下tomcat服务的启动.关闭与错误跟踪,远程连接到服务器以后,通常通过以下几种方式启动关闭tomcat服务: 1).启动tomcat服务 进入tomcat主目录下的bin目录,然后执行如下 ...

  4. [ActionScript] AS3利用SWFObject与JS通信

    首先介绍SWFObject的用法: swfobject.embedSWF(swfUrl, id, width, height, version, expressInstallSwfurl, flash ...

  5. ckfinder的配置使用

    1.单纯的上传图片和预览图片 修改configasp中CheckAuthentication = true; 否则的话会报没有权限或修改配置错误 此时如果可以查看的话,单击图片应该是放大并且预览图片 ...

  6. SAP_20140304

    1.  SAP 主打产品  R/3 :分布式 客户端/服务器 环境的标准ERP软件. 2. 主要功能模块:销售和分销,物料管理,生产计划,质量管理,工厂维修,人力资源,工业方案,办公室和通信,项目系统 ...

  7. Android中 View not attached to window manager错误的解决办法

    前几日出现这样一个Bug是一个RuntimeException,详细信息是这样子的:java.lang.IllegalArgumentException: View not attached to w ...

  8. 【转】一个URL编码和解码的C++类

    下面的代码实现了一个用于C++中转码的类strCoding.里面有UTF8.UNICODE.GB2312编码的互相转换. .H文件: #pragma once #include <iostrea ...

  9. 使用 iMacros 来自动化日常的工作

    利用 iMacros 的浏览器附加组件来提高工作效率 介绍 iMacros 这个强大的工具,使用简单的范例演示了如何使用这个工具来完成对于网页的操作,对于大量的具有重复性的工作内容尤其可以提高效率.对 ...

  10. 基于Web的企业网和互联网的信息和应用( 1194.22 )

    基于Web的企业网和互联网的信息和应用( 1194.22 ) 原文更新日期: 2001年6月21日原文地址: http://www.access-board.gov/sec508/guide/1194 ...