02_Linux启动与内核引导_201108310924

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
启动过程中,一些服务的配置文件在/etc/sysconfig下 authconfig //身份认证 clock //时钟 i18n //文字语言编码支持 Network //是否开启网络,网络主机名HOSTNAME
19
Linux系统启动与内核引导 (review)
系统启动与内核引导过程 (bootchain)
3
BIOS MBR (bootloader)
BIOS检测完了,是否就该加载内核了?
由于不同OS的文件系统格式不同,因此须要一个引导装载 程序(boot loader)来加载内核文件; Boot loader程序安装在哪里?
• 磁盘的第一个sector(扇区)512B (一般使用前446B) • 称为MBR(Master Boot Record)
• • • • • 系统主机名 网络设置 语系处理 文件系统格式 其他服务启动
配置文件:/etc/inittab (init table)
• 启动执行等级run level • 系统初始化
16
Run Level (共有七个等级)
/etc/inittab
什么是run level?
• 通过run level来设定系统使用不同的服务来启动,让Linux的使用环境不同
注:以从硬盘上引导Linux为例
Grub in MBR
vmlinuz-*** initrd-***
init() Process 1
20
系统启动流程 (review)
Power on 加载BIOS的硬件信息并进行自我检测,并依据设置取得第一个可启 动的设备(硬盘、光盘、U盘等); 从第一个启动设备内的MBR中读取并执行boot loader; boot loader加载kernel,kernel开始检测硬件并加载驱动程序; 在硬件驱动成功后,Kernel会主动调用init进程,而init会取得runlevel信息; init执行/etc/rc.d/rc.sysinit文件准备软件执行环境(如网络、时区等) init执行run-level的各个服务的启动(以script方式) Init执行/etc/rc.d/rc.local文件 Init执行终端模拟程序mingetty来启动login进程,等待用户登录。
第二章 Linux系统启动与内核引导
系统启动与内核引导过程 (bootchain)
注:以从硬盘上引导Linux为例
Grub in MBR
vmlinuz-*** initrd-***
init() Process 1
1
系统启动流程
Power on 加载BIOS的硬件信息并进行自我检测,并依据设置取得第一个可启 动的设备(硬盘、光盘、U盘等); 从第一个启动设备内的MBR中读取并执行boot loader; boot loader加载kernel,kernel开始检测硬件并加载驱动程序; 在硬件驱动成功后,Kernel会主动调用init进程,而init会取得runlevel信息; init执行/etc/rc.d/rc.sysinit文件准备软件执行环境(如网络、时区等) init执行run-level的各个服务的启动(以script方式) Init执行/etc/rc.d/rc.local文件 Init执行终端模拟程序mingetty来启动login进程,等待用户登录。
2
Power-on BIOS
Power-on
Upon power-on, the processor first accesses an address that usually resides in read-only memory (ROM (CMOS), Flash).
BIOS (Basic Input Output System)
14
加载内核与initrd
15
/sbin/init
“1号进程”init登场
内核加载完毕(硬件检测+驱动加载),主机硬件准备就绪 内核主动调用第一个进程 /sbin/init “1号进程”登场
init进程的pid为1,它是所有进程的祖先,常驻内存 /sbin/init的功能是:准备软件执行环境
BIOS stores hardware-specific system resource initialization code
• • • • • • • self-test and hardware identification CPU与接口设备的频率 启动设备的查找顺序 硬盘的大小与类型 系统时间 各接口设备的I/O地址 CPU通信的IRQ(Interrupt Request)
加载内核文件:直接指向可启动的OS的bootloader 提供启动选项:让用户决定启动哪个OS的bootloader 转交其他loader:将引导装载功能转交给其他的loader负责
9
Boot Loader -- grub
GRUB is an x86-based bootloader that's used to load Linux. www.gnu.org/software/grub
21
Kernel initiation code ----- init/main.c
start_kernel()
22
Kernel initiation -- start_kernel()
23
Kernel initiation -- start_kernel()
24
7
疑问:多OS如何启动?
在一台安装多个OS的机器上(Linux+Windows), MBR只 有一个,如何loader呢?
实质上,每个OS都有自己的boot sector 每个OS在自己的boot sector中都安装了一份bootloader
8
疑问:多OS如何启动?(cont’d)
MBR中的bootloader的主要功能:
10
加载内核
/boot/grub/menu.lst
11
加载内核与initrd
12
加载内核
通过bootloader读取内核文件到内存,并解压缩
e.g., /boot/vmlinuz-2.6.18
开始执行内核检测各个外设
存储设备、CPU、网卡、声卡等 Linux内核重新检测一次硬件,而不一定会使用BIOS检测到 的硬件信息
id:5:initdefault: //缺省的run level,一般选3或5 注意这一行: (rc.d 意思是:runlevel control directory)
# System initialization. si::sysinit:/etc/rc.d/rc.sysinit
系统初始化
The interface to BIOS is a uniform set of functions known as interrupts.
• At load time, Linux uses these interrupts to query available system resources.
在initrd的帮助下,内核驱动磁盘,从中读取外设驱动
外设驱动一般作为动态加载内核模块(kernel module)存在 于 /lib/modules/$(uname -r) 想一想,为什么需要initrd的帮助?
• 还没有驱动磁盘,还无法读出文件系统中内核模块及驱动
13
initrd -- initial RAM disk
4
MBR (Master Boot Record)
Disk Formatting (head 0, cylinder 0, sector 0)
4-eBaidu Nhomakorabeatry
5
Copy MBR from disk into Memory
6
Boot Loader
MBR copies the code from the active boot partition to address 0x7c00 and begins executing it.
GRUB recognizes filesystems on the boot drives, and the kernel can be loaded by specifying the filename, drive, and partition where the kernel resides.
At the end of self-test and hardware identification, the system initialization code (BIOS) accesses the hard drive controller to read the MBR. After BIOS completes its initialization, it copies the first 512 bytes from the boot device to address 0x7c00 and jumps to it.
Initrd ---- initial filesystem
E.g.,/boot/initrd-2.6.18-53.el5.img 该initrd被bootloader加载到内存中,解压,它能够仿真为 一个文件系统的根目录,然后通过它加载其他内核模块和 驱动。 acts as a root filesystem before the final root filesystem is loaded and initialized. The kernel initializes using initrd, mounts the final root filesystem, and then dynamically load other modules and drivers.
the active boot partition can have a bootloader that, in turn, loads the operating system. (自举)
Linux Bootloader
GRUB (Grand Unified Bootloader) LILO (LInux LOader)
18
系统初始化阶段还会用到的配置文件
/etc/rc.d/*
rc.local 用户自定义开机启动程序 目录:rc 与 rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d 目录:/etc/rc.d/init.d/ 下的服务
关于模块: /etc/modprobe.conf /etc/sysconfig/*
GRUB can act as a two-stage bootloader
Stage 1 is installed in the MBR and is called by BIOS. Stage 2 is partially loaded by Stage 1 and then finishes loading itself from the filesystem.
17
/sbin/init /etc/inittab /etc/rc.d/rc.sysinit
在加载各项系统服务之前,通过/etc/rc.d/rc.sysinit来设置 系统环境
设置网络环境 /etc/sysconfig/network 设置时区与时间格式 /etc/sysconfig/clock 加载用户自定义模块 /etc/sysconfig/modules/*.modules 加载内核设置 /etc/sysctl.conf 设置主机名和初始化电源管理 以fsck (filesystem check)来检查磁盘文件系统 重新以可读写模块挂载系统磁盘 …… 将启动相关信息存入/var/log/dmesg文件中
相关文档
最新文档