系统启动
1、系统加电
2、BIOS 自检 → 本地设备枚举和初始化
3、POST 代码从内存中清除,但运行时服务(runtime service)仍然留在内存。
4、BIOS 从 CMOS 的设置中找出第1/2/3 启动设备(可能有第4个),然后逐个尝试,
并在第一个 ”active“状态的硬盘上读入其 MBR
第一阶段引导加载程序
1、MBR 实际上是由3个部分组成 :主引导加载程序(master bootloader code,446 字节)、主分区表 (ppt)、magic nubmer (0xAA55)组成
主分区表有4个记录,对应主分区1-主分区4,共64 字节。最后的 magic number 是 2 字节
2、主引导加载程序搜索主分区表,扫描全部4个分区记录,确保只有1个是被标为”active“ 的(用 fdisk 可以设置某个分区为 active 分区)。
然后读入该分区的引导扇区(前512 字节)。active 分区一般是 C 盘或者 linux 的第一个分区
3、主引导加载程序的作用就是读入第2阶段的引导加载程序
第二阶段引导加载程序
1、第2阶段引导加载程序的目的是加载内核和 initrd 。GRUB 和 LILO 都是把 boot loader 程序分成两部分,一部分在 MBR ,一部分在”active" 分区的引导扇区
2、第2阶段引导加载程序被读入内存后,它读取 root() 命令给出的分区下的 grub/grub.conf ,显示一个菜单,供用户选择
3、GRUB 可以细分为3个阶段,中间的一个是 stage1.5 ,它跟在 stage1 的后面,目的是让 grub 能够识别文件系统的类型
内核
1、内核自解压
2、按照 bootloader 向它提供的 initrd 在内存中的地址,把 /dev/initrd 的内容拷贝到 /dev/ram ,并释放 /dev/initrd 所占用的内存
3、把 /dev/ram 按 rw 的模式挂载为初始根文件系统
4、执行其上面的 /linuxrc 或者 /init 脚本,目的是加载驱动模块
5、在 /linuxrc 和 /init 脚本中,会有 pivot_root ()或者 switchroot 把 /sysroot 下的真正根文件系统设备挂载到 / ,把初始根文件系统挂载到 /initrd 下
6、/linuxrc 和 /init 脚本的后面会 umount /initrd 下的初始根文件系统(即使没有完全卸载,也会在 /etc/rc.d/rc.sysinit 中把它们全部卸载)
7、接下来是启动 init 进程。在 2.4 内核中,这个步骤是由内核完成的。但在 2.6 内核中,这个步骤是由 /init 脚本完成的。
Init
1、init 首先执行 /etc/rc.d/rc.sysinit 进行系统的初始化
2、而 rc.sysint 会先执行 /etc/rc.d/init.d/functions ,获得一些有用的函数,例如 daemon()、action ()、success()、failure()等
3、按照默认运行级别或者 grub 启动时的 kernel 行给出的运行级别运行 /etc/rcN.d/ 下的脚本,先执行 K 开头的(按从低到高),再执行S开头的(从低到高)
这个过程“有可能”是通过执行 /etc/rc.d/rc 脚本实现的。因为 rc 脚本是为改变 runlevel 而做的,那么从关机(level 0)到 正常(level3/5)应该也算是
一种特殊的改变 runlevel 的情况吧
4、按照 /etc/inittab 的要求在指定的虚拟控制台上创建 mingetty 进程,提示输入用户名和密码
5、执行 login 命令,login 命令会做如下工作 :
a)如果存在 ~/.hashlogin ,则以 "quiet" 的方式登录,不显示邮件、不打印 motd
如果存在 /var/log/lastlog ,则打印最后登录时时间
b)设置环境变量,包括 HOME、MAIL、PATH 、SHELL、TERM 等
PATH 值默认是 /usr/local/bin:/bin:/usr/bin (对于普通用户而言),
对于 root 而言,则是 /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 。
c)如果不是 quiet login ,则打印用户的邮件数量和 /etc/motd 文件)
d)启动 login shell (默认是 /bin/sh),并执行 ~/.bashprofile
e)~/.bashprofile 会自动执行 ~/.bashrc ,而 ~/.bashrc 又调用 /etc/bashrc
分享到:
相关推荐
关于Linux系统的启动过程分享一下,内容是关于Linux的
### Linux启动过程综述 #### 一、引言 Linux是一种开源的操作系统,以其高度的稳定性和安全性在服务器领域有着广泛的应用。对于深入理解Linux系统的行为及其管理来说,掌握Linux的启动过程至关重要。本文旨在详细...
### Linux内核启动过程分析 #### 一、引言 随着技术的发展,Linux作为一个免费开源的Unix类操作系统,因其强大的功能、高效的性能以及良好的可移植性,在嵌入式系统乃至高性能服务器领域获得了广泛应用。理解Linux...
ARM Linux启动过程分析 1. ARM Linux 启动过程概述 ARM Linux 启动过程可以分为四个部分:引导加载程序(bootloader),Linux 内核,文件系统,应用程序。其中 bootloader 是系统启动或复位以后执行的第一段代码,...
"Linux启动过程分析" Linux 启动过程分析是嵌入式 Linux 系统的核心组成部分,理解 Linux 启动过程对嵌入式系统的开发和应用至关重要。本文将详细分析 Linux 启动过程,包括 bootloader 的执行流程和 ARM Linux 的...
LINUX系统启动过程分析 LINUX系统启动过程是一个复杂的过程,涉及到多个步骤和组件。下面将对LINUX系统启动过程进行详细的分析。 BIOS自检 在PC中,LINUX系统启动从BIOS中的地址0xFFFF0处开始。BIOS的第一个步骤...
Linux的启动过程 Linux的服务管理 Linux的进程管理 Linux的启动过程 BIOS自检 读取并加载硬盘MBR(主引导记录)中的启动引导器(GRUB或LILO等) 运行Linux的系统内核并检测硬件 Linux的启动过程 读取配置文件/etc/...
linux系统内核启动过程详细分析,希望对学习linux的大家有帮助。
### Linux启动过程详解 在深入理解Linux操作系统的工作原理时,了解其启动流程是至关重要的一步。本文将详尽解析Linux的启动过程,包括从引导区加载到系统初始化的各个环节。 #### 引导区引导 Linux的启动始于...
### Linux启动过程详解 #### 一、Bootloader详解 Linux系统的启动过程中,Bootloader扮演着极其重要的角色。它是系统启动的第一阶段,负责加载操作系统内核到内存中,并将控制权交给内核。根据不同的硬件平台,...
嵌入式Linux系统的启动是一个复杂的过程,涉及到硬件初始化、BIOS或U-Boot加载、内核启动、根文件系统挂载等多个环节。以下是对这个过程的详细解析。 首先,我们从硬件层面开始。嵌入式设备通常有一个固件,如BIOS...
Linux启动过程是一个复杂而有序的序列,涉及到多个组件和阶段,从硬件初始化到操作系统核心的加载,再到用户空间服务的启动。以下是对Linux启动过程的详细解析,主要以Redhat 6.0 Linux 2.2.19 for Alpha/AXP为例,...
剖析Linux系统启动过程 今日,我们将深入剖析 Linux 系统启动过程,从用户打开电源到屏幕出现命令行提示符的整个过程。 1. BIOS 开机自检 当用户打开 PC 的电源,BIOS 开机自检,按 BIOS 中设置的启动设备...
ARMLinux启动过程分析 本文将对ARMLinux启动过程进行详细的分析,主要介绍了bootloader的概念和作用、bootloader的执行流程、ARM Linux的启动过程等内容。通过对bootloader和Linux内核的研究,可以加速嵌入式系统的...
Linux系统的启动过程是一个复杂而有序的序列,涉及多个关键组件和步骤。首先,当计算机加电后,BIOS(基本输入输出系统)开始执行自检(POST),检查硬件设备是否正常工作并初始化它们。接着,BIOS根据配置的启动...
"Linux启动过程分析" Linux启动过程是一个复杂的过程,涉及到多个文件和阶段。下面我们将详细分析Linux启动过程中的各个阶段和关键文件。 1. 启动过程简介 Linux启动过程可以分为三个阶段:引导、内核初始化和...