`

Linux系统启动过程详解

阅读更多

1)BIOS自检
2)启动Grub/Lilo
3)加载内核
4)执行init进程
5)通过/etc/inittab文件进行初始化
6)登陆Linux

1)BIOS自检
a)POST(Power On Self Test),对硬件进行检测
计算机在通电后首先由BIOS进行自检,即所谓的POST(Power On Self Test),对硬件进行检测
依据BIOS内设置的引导顺序从硬盘、软盘或CDROM中读入"引导块"
      在PC中,Linux是从BIOS中的地址0xFFFF0处开始的
BIOS的第一个步骤是加电自检(POST),对硬件进行检测
        第二个步骤是进行本地设备的枚举和初始化
BIOS由两部分组成: POST代码和运行时服务
当POST完成后,它从内存中清理出来,但BIOS运行时服务依然保留在内存中,目标操作系统可以使用这些服务
要引导一个操作系统,BIOS运行时会按照CMOS的设置的顺序来搜索处于活动状态并可引导的设备:软盘、CD-ROM、硬盘上的分区、网络上的某个设备、USB(通常Linux是从硬盘引导的
主引导记录MBR中包含主引导加载程序。MBR是一个512字节大小的扇区,位于磁盘上的第一个扇区中(0道0柱面1扇区))当MBR被加载到RAM中之后,BIOS会把控制权交给MBR

b)提取MBR的信息
要看MBR的内容,请使用下面的命令
#从/dev/sda上读取前512个字节的内容,并将其写入mbr.bin文件中
[root@localhost pam.d]# dd if=/dev/sda of=mbr.bin bs=512 count=1

#以十六进制和ASCII码格式打印这个二进制文件的内容
[root@localhost pam.d]# od -xa mbr.bin
0000000 48eb 0090 d08e 00bc fb7c d88e b9fc 0080
          k   H dle nul so   P   < nul   |   { so   X   |   9 nul nul
0000020 f48b 00bf 8e06 f3c0 a566 2fea 0006 1000
         vt   t   ? nul ack so   @   s   f   %   j   / ack nul nul dle


2)启动GRUB/Lilo
GRUB和LILO都是引导加载程序,它们会引导操作系统。当机器引导它的操作系统时,BIOS会读取引导介质上最前面的512字节(即MBR: master boot record)

3)加载内核
当内核映像被加载到内存后,内核阶段就加开始了
内核映像并不是一个可执行的内核,而是一个压缩过的内核映像。通常它是一个zImage(压缩映像,小于512KB)或bzImage(较大的压缩映像,大于512KB),它是提前使用zlib进行压缩的
在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压,然后将其放入高端内存中,如果有初始RAM磁盘映像,就会将它移动到内存中,并标明以后使用,然后此例程会调用内核,并开始启动内核引导的过程
在GRUB命令中,我们可以使用initrd映像引导一个特定的内核,方法如下:
grub> kernel /bzImage-2.6.14.2
[Linux-bzImage, setup=0x1400, size=0x29672e]

grub>initrd /initrd-2.6.14.2.img
[Linux-initrd @ 0x5f13000, 0xcc199 bytes]

grub> boot
Uncompressing Linux... Ok, booting the kernel.

如果不知道要引导的内核的名称,只需使用/然后按下Tab键,就会显示内核和initrd映像列表

对grub命令行进行加密
a)使用命令/sbin/grub-md5-crypt来产生grub使用的密码
[root@localhost pam.d]# /sbin/grub-md5-crypt
   Password:
   Retype password:
   $1$3YbPF$zFVRY6J8VxNR9Ok4fXRkr1

b)修改/etc/grub.conf加入password --md5 $1$3YbPF$zFVRY6J8VxNR9Ok4fXRkr1 一定要放在title之前
这样重启系统时在grub的启动grub菜单时,想再按e命令进行编辑时,必须先按p键后输入密码才成

4)执行init进程
init进程是所有进程的起点,内核在完成内核引导后,即在本线程(进程)空间内加载init程序,它的进程号为1
init进程是所有进程的发起者和控制者
init进程有两个作用:
    扮演终结父进程的角色:所有的孤儿进程都会被init进程接管
    进入某个特定的运行级别时运行相应的程序,以此对各种运行级别进行管理,这个作用由/etc/inittab文件定义的

5)通过/etc/inittab文件进行初始化
init进程的工作是根据/etc/inittab来执行相应的脚本进行系统初始化,如设置键盘、字体,装载模块,设置网络等,对于RedHat来说,按以下顺序执行
a)执行/etc/rc.d/rc.sysinit(由init执行的第一个脚本)
    此步可进行的工作有:
    设置$PATH变量
    配置网络
    为虚拟内存启动交换
    设置系统的主机名
    检查root文件系统,以进行必要的修复
    检查root文件系统的配额
    为root文件系统打开用户和组的配额
    以读/写的方式重新装载root文件系统
    清除被装载的文件系统表/etc/matb
    把root文件系统输入到mtab
    使用系统为装入模块做准备
    查找模块的相关文件
    检查文件系统,以进行必要的修复
    加载所有其他文件系统
    清除几个/etc文件,如/etc/mtab、/etc/fastboot和/etc/nologin
    删除UUCP的lock文件
    删除过时的子系统文件
    删除过时的pid文件
    设置系统时钟
    打开交换
    初始化串行端口
    装入模块

   b)执行/etc/rc.d/rcX.d[KS]
    首先终止K开头的服务(用来关闭一个服务),然后启动S开头的服务(用来启动一个服务)
    对每一个运行级别来说,在/etc/rc.d子目录中都有一个对应的下级目录。
    这些运行级别的下级子目录的命名方法上rcX.d, 其中X就是代表运行级别的数字
    在各个运行级别的子目录中,都建立有到/etc/rc.d/init.d子目录中命令脚本程序的符号链接
    链接的名称在K与S后有一个数字,表示执行顺序,数字小的先执行如K01tog-pegasus 、 S00microcode_ctl
    对以K开头的脚本执行时系统会传递stop参数,而S开头的脚本系统会传递start参数

   c)执行/etc/rc.d/rc.local
    Redhat中运行模式2,3,5都把/etc/rc.d/rc.local作为初始化脚本中的最后一个文件,所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后,登陆之前执行的命令


6)执行/bin/login
   login程序会提示使用者需输入帐号与密码,接着编码并确认密码的正确性,若二者相合,则为使用者进行初始化环境,并将控制权交给shell,即等用户登录。

   ----------------至此,Linux启动过程全部结束----------------------

分享到:
评论

相关推荐

    Linux系统启动过程

    关于Linux系统的启动过程分享一下,内容是关于Linux的

    Linux内核启动过程分析.pdf

    ### Linux内核启动过程分析 #### 一、引言 随着技术的发展,Linux作为一个免费开源的Unix类操作系统,因其强大的功能、高效的性能以及良好的可移植性,在嵌入式系统乃至高性能服务器领域获得了广泛应用。理解Linux...

    linux_启动过程详解

    Linux 启动过程详解 Linux 系统的启动流程是一个复杂而有序的过程,涉及多个步骤,从硬件初始化到操作系统核心的加载,再到用户空间服务的启动。以下是对这个过程的详细解析: 1. BIOS 初始化: - BIOS(基本输入...

    Linux启动过程详解

    ### Linux启动过程详解 在深入理解Linux操作系统的工作原理时,了解其启动流程是至关重要的一步。本文将详尽解析Linux的启动过程,包括从引导区加载到系统初始化的各个环节。 #### 引导区引导 Linux的启动始于...

    Slackware Linux操作系统启动过程详解

    **Slackware Linux操作系统启动过程详解** Linux操作系统启动流程是一个复杂但有序的过程,涉及多个步骤和组件。在本文中,我们将深入探讨Slackware Linux的启动机制,特别是关于运行级别的概念及其在系统运行时的...

    LINUX系统第三章--启动系统.pdf

    ### Linux系统启动过程详解 #### 一、引言 在深入了解Linux系统启动的过程之前,我们需要对几个关键概念有所了解:首先是8086汇编语言的基础知识,这对于我们理解bootsect.s、setup.s以及head.s这三个核心启动文件...

    嵌入式Linux系统的启动(很好的嵌入式linux启动过程分析)

    嵌入式Linux系统的启动是一个复杂的过程,涉及到硬件初始化、BIOS或U-Boot加载、内核启动、根文件系统挂载等多个环节。以下是对这个过程的详细解析。 首先,我们从硬件层面开始。嵌入式设备通常有一个固件,如BIOS...

    Linux系统引导过程详解

    Linux系统的引导过程是一个复杂但至关重要的过程,它涉及到计算机硬件的初始化、操作系统的加载以及内核的启动。本文将详细解析这一过程。 首先,当计算机加电后,硬件开始进行基本输入输出系统(BIOS)的自检程序...

    Linux系统启动流程详解3-1

    Linux系统启动流程详解3-1 在深入了解Linux系统启动流程之前,我们首先需要理解什么是操作系统启动。操作系统是计算机硬件和用户应用之间的桥梁,它的启动过程是计算机加电后执行的第一步,也是确保系统正常运行的...

    linux启动过程详解

    linux系统内核启动过程详细分析,希望对学习linux的大家有帮助。

    描述linux开机到登陆界面的启动过程详解借鉴.pdf

    "Linux系统启动过程详解" Linux系统从开机到登陆界面的启动过程可以分为以下步骤: 1. POST(加电自检):Linux系统开机加电后,系统开始开机自检,该过程主要对计算机各种硬件设备进行检测,如CPU、内存、主板、...

    描述linux开机到登陆界面的启动过程详解.docx

    "Linux系统启动过程详解" 一、POST开机自检 Linux系统的启动过程始于POST(Power-On Self-Test),也称为开机自检。在这个阶段,系统对计算机的各种硬件设备进行检测,如CPU、内存、主板、硬盘、CMOS芯片等。如果...

    Linux启动过程综述

    #### 二、启动过程详解 ##### 2.1 硬件启动阶段 此阶段主要由BIOS(基本输入/输出系统)负责完成。当用户打开PC电源时,BIOS会自动运行一系列测试来确保所有硬件设备(如内存、CPU、硬盘等)正常工作。如果检测到...

    ARM嵌入式Linux系统开发详解.zip

    《ARM嵌入式Linux系统开发详解》是一本深入探讨如何在ARM处理器上构建和开发Linux系统的资源集合。ARM架构因其低功耗、高性能的特点,在嵌入式领域广泛应用,而Linux作为开源的操作系统,为开发者提供了丰富的工具和...

    最小的Linux系统制作过程详解

    【Linux系统引导过程详解】 Linux系统的引导流程是一个复杂但有序的过程,主要分为以下几个步骤: 1. **BIOS自检和MBR加载**:系统启动时,计算机的BIOS(基本输入输出系统)会进行硬件自检(POST),然后读取硬盘...

    ARM9开发系统的linux启动过程剖析的文档

    这份文档是理解嵌入式Linux系统启动流程的重要参考资料,对开发者解决启动问题或优化系统性能具有很高的价值。通过学习,你能够更好地掌控ARM9平台上的Linux系统,为你的项目提供更稳定、高效的运行环境。

    Arm-linux 自定义开机启动程序,避开从桌面启动

    - [Linux系统启动过程详解](http://linux.chinaunix.net/techdoc/install/2006/03/10/928782.shtml) - [Linux开机启动问题解决方案](https://zhidao.baidu.com/question/393674013.html) 通过以上步骤,开发者可以...

    Linux系统启动过程.pdf

    Linux系统启动过程是一个复杂而有序的序列,涉及多个组件和步骤。以下是详细的解析: 1. **启动流程概述** - Linux系统的启动始于计算机加电,BIOS(基本输入输出系统)进行自检(POST,Power-On Self Test)并...

Global site tag (gtag.js) - Google Analytics