Linux 启动过程

来源:互联网 发布:f9源码论坛 编辑:程序博客网 时间:2024/05/02 20:50

XYM个人博客对应篇章


最近安装了Arch,梳理一下linux启动流程。

BIOS(MBR)

  1. 开机自检,通过通过BIOS加载CMOS,获取各种硬件信息。
  2. 按照BIOS 的boot sequeuece顺序读取每一个存储设备的最前面512个字节,如果发现最后两个字节是0x55, oxAA,那么就找到了主引导扇区MBR。
  3. MBR结构

    HDD 上的位置 代码用意 001-440 bytes 由 BIOS 启动的 MBR 启动代码 441-446 bytes MBR 硬盘签名 447-510 bytes 分区表 (主分区和扩展分区,而非逻辑分区) 511-512 bytes MBR 启动签名 0xAA55

GRUB

  1. 通过引导器(GNU/Linux 引导器包括 GRUB 和 Syslinux)读取分区表。
  2. “传统” Windows/DOS MBR:引导器代码会在整个分区表里搜寻一个也是唯一的一个”活动”分区,读取该分区的X扇区,并把控制权交给操作系统。Windows/DOS 引导器不能启动 Arch Linux 分区因为它不是设计来加载 Linux 内核的,而且它只适应活动分区,主分区 (GRUB 会完全无视). 这也是为什么先装linux,再装windows会无法找到linux启动项。
  3. grub:linux下一般使用grub启动root loader,让用户选择启动哪个操作系统, grub可以从任何分区启动,无论它是主分区还是逻辑分区。
  4. 分区表:每个分区表的长度只有64个字节,里面又分成四项,每项16个字节(第1个字节:如果为0x80,就表示该主分区是”活动”分区)所以,一个硬盘最多只能分四个一级分区,又叫做”主分区”。 随着硬盘越来越大,四个主分区已经不够了,需要更多的分区。但是,分区表只有四项,因此规定有且仅有一个区可以被定义成”扩展分区”(Extended partition)也就逻辑分区。 逻辑分区,以链式存放,可以无限拓展。

载入内核

  1. 操作系统接管硬件以后,首先将系统内核载入RAM,执行内核代码设置自己的虚拟内存子系统和根文件系统,对硬件进行检测并进行设备驱动程序初始化。
  2. 驱动程序初始化后,会挂载一个只读的根文件系统(rootfs),执行/sbin/init, 释放内存。

初始化

  1. 执行/sbin/init 生成第一个进程,接管系统控制权,它首先会去读取/etc/inittab文件来执行相应的脚本进行系统初始化,如设置键盘、字体,装载模块,设置网络等。
  2. 系统初始化脚本(/etc/rc.d/rc.sysinit)对系统进行基本的配置,以读写方式挂载根文件系统及其它文件系统,读取各种系统配置,如分区挂载/etc/fstab, 网络配置/etc/sysconfig/network。
  3. 执行/etc/rc.d/rc脚本。该文件定义了服务启动的先后顺序,而具体的每个运行级别的服务状态是放在/etc/rc.d/rc*.d(=0~6)目录下,所有的文件均是指向/etc/init.d下相应文件的符号链接。rc.sysinit通过分析/etc/inittab文件来确定系统的启动级别,然后才去执行/etc/rc.d/rc.d下的文件。

用户登录

  1. 命令行登录:init进程调用getty程序(意为get teletype),让用户输入用户名和密码。输入完成后,再调用login程序,核对密码。如果密码正确,就从文件 /etc/passwd 读取该用户指定的shell,然后启动这个shell。

桌面载入

  1. 如果有配置图形界面自动启动,则登录成功后,会读取当前用户的~/.xinitrc 文件,启动对应的X窗口系统。
0 0