第6讲 可信启动 1
1 第6讲 可信启动
提纲 ■Liux的启动过程 ■TrustGrub ■Grub-IMA 2023/3/24 2
2023/3/24 2 ◼Linux的启动过程 ◼TrustGrub ◼Grub-IMA 提纲
Linux启动过程概述 Liux启动过程指的是从打开计算机电源直到显示用 户登录画面的全过程。 Lx启动的大致流程: 开始 引导Linuⅸ内核 打开电源,CPU进入实模式 执行init程序,完成系统初始化 BIOS开机自检 启动mingetty,打开终端供用户登陆 启动引导程序(LILO/GRUB) 结束 2023/3/24 3 2023/34
2023/3/24 3 Linux启动过程概述 2023/3/24 ◼ Linux启动过程指的是从打开计算机电源直到显示用 户登录画面的全过程。 ◼ Linux启动的大致流程: 打开电源,CPU进入实模式 开始 结束 BIOS开机自检 启动引导程序(LILO/GRUB) 引导Linux内核 执行init程序,完成系统初始化 启动mingetty,打开终端供用户登陆
()打开电源,CPU进入实模式 X86架构处理器的模式: 实模式(Real Mode):内存寻址同8086处理器 (16位段寄 存器和偏移量),寻址范围为1M。 保护模式(Protection Mode):采用32位段寄存器和偏移 量,最大寻址空间4GB,CPU分为4个特权级(03) 。 系统管理模式(System Management Mode):拥有独立的 地址空间,用来执行电源管理方面的指令。 ◆ 虚拟8086模式(Virtual-8086Mode):允许在保护模式中 运行传统的8086程序。 开机时系统处于实模式,操作系统(例如Lux、 Vindows)运行于保护模式。 2023/3/24 4
2023/3/24 4 (1)打开电源,CPU进入实模式 ◼ X86架构处理器的模式: ◼ 实模式(Real Mode):内存寻址同8086处理器(16位段寄 存器和偏移量),寻址范围为1M。 ◼ 保护模式(Protection Mode):采用32位段寄存器和偏移 量,最大寻址空间4GB,CPU分为4个特权级(0-3)。 ◼ 系统管理模式(System Management Mode):拥有独立的 地址空间,用来执行电源管理方面的指令。 ◼ 虚拟8086模式(Virtual-8086 Mode):允许在保护模式中 运行传统的8086程序。 ◼ 开机时系统处于实模式,操作系统(例如Linux、 Windows)运行于保护模式
(2)B10S开机自检 BIOS一般被存放在只读存储器 (Read-Only Memory, 简称ROM)之中。 BIOS的代码是直接与硬件打交道,它为操作系统提 供了控制硬件的基本功能。BIOS包括有系统BIOS 即常说的主板BIOS)、显卡BIOS和其它设备(例 C 如DE控制器或者网卡等)的BIOS。其中计算机的启 动过程是在系统BIOS的控制下进行的。 系统BIOS的启动代码要做的事情就是进行加电后自 检(Power-On Self Test,POST)。POST的主要任 务是检测系统中一些关键设备是否存在和能否正常工 作,例如内存和显卡等设备。 2023/3/24 5
2023/3/24 5 (2)BIOS开机自检 ◼ BIOS一般被存放在只读存储器(Read-Only Memory, 简称ROM)之中。 ◼ BIOS的代码是直接与硬件打交道,它为操作系统提 供了控制硬件的基本功能。BIOS包括有系统BIOS (即常说的主板BIOS)、显卡BIOS和其它设备(例 如IDE控制器或者网卡等)的BIOS。其中计算机的启 动过程是在系统BIOS的控制下进行的。 ◼ 系统BIOS的启动代码要做的事情就是进行加电后自 检(Power-On Self Test,POST)。POST的主要任 务是检测系统中一些关键设备是否存在和能否正常工 作,例如内存和显卡等设备
(3)启动引导程序 硬盘的第1个扇区被称为主引 0x0000 导扇区,它在所有的系统分 Master Boot Record (446B) 主引导记永 区之前,不属于任何系统分 0x01BD 区,其包括 0x0IBE 分区1(16B) 0x01CD ,主引导记录(Master Boot Record, 0x01CE 分区2(16B) 简称MBR) 0x0IDD 磁盘分区表 0xOIDE 磁盘分区表(Disk Partition Table, 0x01ED 分区3(16B) 简称DPT) 0xO1EE 0x01FD 分区4(16B) 引导记录标识(Boot Record ID) 0x01FE 0x01FF 0xAA55(2B) 引导记录标识 2023/3/24 6
2023/3/24 6 (3)启动引导程序 ◼ 硬盘的第1个扇区被称为主引 导扇区,它在所有的系统分 区之前,不属于任何系统分 区,其包括: ◼ 主引导记录(Master Boot Record, 简称MBR) ◼ 磁盘分区表(Disk Partition Table, 简称DPT) ◼ 引导记录标识(Boot Record ID)
(3)-1引导加载程序 ▣引导加载程序(boot loader) LLO:作为一个较老的Linux引导加载程序,它在Linux 社区的支持下发展,并始终能够充当一个可用的现代引导 加载程序。有一些新的功能,比如增强的用户界面,以及 对能够突破原来1024柱面限制的新BIOS功能的利用。 Grub:与LLO相比,Grub(Grand Unified Boot Loader). 拥有强大的交互式命令界面,支持网络引导,而且更加可 靠、灵活和易于使用。Grub负责装入内核并引导inux系 统,此外还可以引导其它操作系统,如FreeBSD、 OpenBSD、DOS和Vindows.系列。 2023/3/24
2023/3/24 7 (3)-1 引导加载程序 引导加载程序(boot loader) ◼ LILO:作为一个较老的Linux 引导加载程序,它在Linux 社区的支持下发展,并始终能够充当一个可用的现代引导 加载程序。有一些新的功能,比如增强的用户界面,以及 对能够突破原来1024-柱面限制的新BIOS 功能的利用。 ◼ Grub:与LILO相比,Grub(Grand Unified Boot Loader) 拥有强大的交互式命令界面,支持网络引导,而且更加可 靠、灵活和易于使用。Grub负责装入内核并引导Linux系 统,此外还可以引导其它操作系统,如FreeBSD、 OpenBSD、DOS和Windows系列
(3)-2 Grub Grub包含2个阶段:Stage1和Stage2. ■Stagel:加载Stage2并跳转执行。 ·Stage.2:加载其他操作系统。 default=0 timeout=5 splashimage=(hd0,0)/boot/grub/splash.xpm.gz Linux启动 #hiddenmenu 项 title Fedora(2.6.23.1-42.fc8) root (hd0,0) kernel /boot/vmlinuz-2.6.23.1-42.fc8 ro root=LABEL=/rhgb quiet Windows启 initrd/boot/initrd-2.6.23.1-42.fc8.img 动项 title Windows XP rootnoverify (hd0,1) chainloader +1 2023/3/24 8
2023/3/24 8 (3)-2 Grub ◼ Grub包含2个阶段:Stage1和Stage2。 ◼ Stage1:加载Stage2并跳转执行。 ◼ Stage2:加载其他操作系统。 default=0 timeout=5 splashimage=(hd0,0)/boot/grub/splash.xpm.gz #hiddenmenu title Fedora (2.6.23.1-42.fc8) root (hd0,0) kernel /boot/vmlinuz-2.6.23.1-42.fc8 ro root=LABEL=/ rhgb quiet initrd /boot/initrd-2.6.23.1-42.fc8.img title Windows XP rootnoverify (hd0,1) chainloader +1 Linux启动 项 Windows启 动项
(4)加载内核 ▣根据Gub设定的启动项,读取内核映像,并进行解 压缩操作。 ▣系统将解压后的内核放置在内存之中,并调用 start kernel()函数来启动一系列的初始化函数并初始 化各种设备,完成Liux核心环境的建立。 start kenrel(0定义在init/main..c中,它就类似于一般 可执行程序中的main0函数,系统在此之前所做的仅 仅是一些能让内核程序最低限度执行的初始化操作, 真正的内核初始化过程是从这里才开始。函数 start kerenl()将会调用一系列的初始化函数,用来完 成内核本身的各方面设置,目的是最终建立起基本完 整的Lmux核心环境
(4)加载内核 根据Grub设定的启动项,读取内核映像,并进行解 压缩操作。 系统将解压后的内核放置在内存之中,并调用 start_kernel()函数来启动一系列的初始化函数并初始 化各种设备,完成Linux核心环境的建立。 start_kenrel()定义在init/main.c中,它就类似于一般 可执行程序中的main()函数,系统在此之前所做的仅 仅是一些能让内核程序最低限度执行的初始化操作, 真正的内核初始化过程是从这里才开始。函数 start_kerenl()将会调用一系列的初始化函数,用来完 成内核本身的各方面设置,目的是最终建立起基本完 整的Linux核心环境
(5)完成系统初始化 内核被加载后,第一个运行的程序便是sbim/init,该 文件会读取/etc/inittab文件,并依据业立件夹进行设 置Linux的运行等级。 设置默认的运行等级 id:5:initdefault: :Linux的运行等级设定如下 0:关机 System initialization. si::sysinit:/etc/rc.d/rc.sysinit 1:单用户模式 ■2:无网络支持的多用户模式 10:0:wait:/etc/rc.d/rc 0 11:1:wait:/etc/rc.d/rc 1 ·3:有网络支持的多用户模式 12:2:wait:/etc/rc.d/rc 2 4:保留,未使用 13:3:wait:/etc/rc.d/rc 3 14:4:wait:/etc/rc.d/rc 4 5:图形的多用户模式(X11) 15:5:wait:/etc/rc.d/rc 5 6:重启 16:6:wait:/etc/rc.d/rc 6
(5)完成系统初始化 ◼ 内核被加载后,第一个运行的程序便是/sbin/init,该 文件会读取/etc/inittab文件,并依据此文件来进行设 置Linux的运行等级。 id:5:initdefault: # System initialization. si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 ◼ Linux的运行等级设定如下: ◼ 0:关机 ◼ 1:单用户模式 ◼ 2:无网络支持的多用户模式 ◼ 3:有网络支持的多用户模式 ◼ 4:保留,未使用 ◼ 5:图形的多用户模式(X11) ◼ 6:重启 设置默认的运行等级