Linux系统快速启动方案

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

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

时间: 2024-08-19 14:23:16

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

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

对于绝大多数Linux程序员来说,进入Linux系统后一般看到的是黑乎乎的界面(开发模式),因为系统如果启动选择开发模式,会减少启动时间,优化内存等.但是通常我们刚安装完Linux系统,然后进去以后是图形的界面,(如果要切换到开发模式,使用快捷键Ctrl + F2即可),从开发模式返回到图形界面则使用快捷键(Ctrl + F1),或者在命令行里输入命令 startx 命令就可以切换到图形界面. 注意:如果你是开机启动模式设置的是图形界面启动,则通过快捷键( Ctrl + Alt + F2~F7

Linux系统的启动

Linux系统的启动:1.上电以后,BIOS(Basic Input Output System)加电自检,检测硬件设备,然后按照CMOS上的顺序依次搜索相关的可引导的硬件设备. 2.加载主引导程序:主引导程序主要是为了加载次引导程序到内存中运行. 3.加载次引导程序:加载次引导程序后,其在内存中跑起来,进而加载Linux的内核. 4.Linux内核映像:加载linux内核后,次引导程序便会依据/boot/grub.conf配置文件中所设置的信息,从/boot/所在的分区上读取linux内核映像

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 摘要 Linux系统下安装完MySQL,启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with... Linux系统下装完MySQL,然后重启动时报错: 解决方法:  查看cat /etc/h

Linux系统无法启动故障解决方案

Linux系统无法启动故障解决方案 2011-09-27 09:42 佚名 比特网 我要评论(0) 字号:T | T 不管你多么喜爱你的Linux系统机器,有时候你都必须恢复你的系统.是的,即使一台Linux系统机器也可能遭受系统崩溃:不管是由于视频配置错误.内核更新出错.或是由于init脚本配置错误,这种情况都是必然的. AD:2014WOT全球软件技术峰会北京站 课程视频发布 当你的心爱的linux系统出现故障的时候,你是如何来解决的呢?没有操作系统能够确保100%可靠.终有一天,即使Lin

Linux系统开机启动时的工作原理

Linux系统开机启动时的工作原理也是深入了解Linux系统核心工作原理的一个很好的途径. 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬盘信息.内存信息.时钟信息.PnP特性等等.在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了.在BIOS将系统的控制权交给硬盘第一个扇区之后,就开始由Linux来控制系统了. 启动第二步--读取MB

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

Linux系统下启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with 摘要 Linux系统下安装完MySQL,启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with... Linux系统下装完MySQL,然后重新启动动时报错: 解决方法:  查看cat /etc

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

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

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

一.linux系统的启动流程 关于linux系统的启动流程我们可以按步进行划分为如下: POST加电自检 -->BIOS(Boot Sequence)-->加载对应引导上的MBR(bootloader)-->主引导设置加载其 BootLoader-->Kernel初始化-->initrd—>/etc/init进程加载/etc/inittab,其进程流 程图如下: 二.剖析详细启动过程 ⑴. POST开机自检:电脑主机打开电源的时候,随后会听到滴的一声,系统启动开始了开机

0923------APUE 学习笔记----------Linux系统的启动流程

前言: 前天在看APUE的时候突然想到了这个问题,于是给自己科普一下Linux系统的启动流程. 1.加载BIOS 接通电源后,计算机首先加载BIOS(即Basic Input-Output System,该程序被固化在主板上的一个ROM芯片中,包括最基本的输入输出程序.系统设置程序.开机硬件自检程序和系统自举程序等),进行硬件自检(即Power On Self Test)检查计算机硬件是否满足运行的基本条件(对于非严重故障,会发出一些声音,严重故障则会直接退出),硬件自检完成以后,BIOS根据C