Linux入职基础-4.10_系统启动过程(3):Linux内核(vmlinuz)启动

Linux系统启动过程(3):Linux内核(vmlinuz)启动

上节回顾:详解见上一篇《内核的引导程序》,内核模块在获取控制权后开始工作,内核(vmlinuz-2.6.18-238.e15)最开始的工作就是解压自己,同时将压缩的initrd.img(initrd是initalram disk的宿写)解压成正常的ram disk。

本节开始:

问一:为何要解压与运行initrd,内核自己难道不能直接启动吗?

答案:

Linux Kernel需要适应多种不同的硬件架构,但是将所有的硬件驱动编入Kernel(vmlinuz-2.6.18-238.e15)是不实际的,而且Kernel也不可能每新出一种硬件结构,就将该硬件的设备驱动写入内核。

以上原因导致,实际上LinuxKernel仅是包含了基本的硬件驱动,在系统安装过程中也会再检测系统硬件信息,根据安装信息和系统硬件信息将一部分设备驱动写入initrd 。这样在以后启动系统时,一部分设备驱动就放在initrd中来加载。关于initrd部分详见initrd文件系统

如果,Linux内核安装在IDE硬盘, 并且使用默认的ext2/ext3 文件系统,这时就不需要加载initrd的映像文件(boot/initrd-xxxx.img)可以直接启动。

如果,Linux内核安装在SCSI(USB)硬盘,这时内核里模块还不不能识别这些硬件,故需要initrd来加载特殊硬件模块(硬件驱动程序)。

在内核驱动外部硬件的工作完成之后,initrd所建立的虚拟文件系统(即内存文件系统)就会被删除(计算机世界里也有过河拆桥的!哈哈),如果没有在命令行中设置"keepinitd"命令将保留。

一,先了解/boot目录下的文件

Linux入职基础-4.10_系统启动过程(3):Linux内核(vmlinuz)启动_第1张图片

[root@lamp01 mnt]# ls --format=single-column -F /boot

config-2.6.18-238.el5   <==此版本核心被编译时选择的功能与模块配置档

grub/                       <==就是启动管理程序 grub 相关数据目录

initrd-2.6.18-238.el5.img   <==虚拟磁盘文件系统档

System.map-2.6.18-238.el5   <==核心功能放置到内存位址的对应表

vmlinuz-2.6.18-238.el5      <==Linux内核文件

//内核映像文件信息

二、vmlinuz-2.6.18-238.el5

vmlinuz采用gzip压缩vmlinux 的压缩文件(命令makebzImage创建)。

vmlinux是编译出来的最原始的内核文件,是elf格式的文件。这里vm代表Virtual Memory(虚拟内存);Linux支持虚拟内存,因此得名vmlinux。

2.6.18是kernel

238是2.6.18的子版本号

el5代表 EnterpriseLinux 5

ELF,Executableand Linkable Format,可执行可链接格式,是UNIX实验室作为应用程序二进制接口而发布的,扩展名为elf。在elf格式的文件中,除二进制代 码外,还包括该可执行文件的某些信息,比如符号表等。

vmlinuz的建立有两种方式:

一是编译内核时通过“makezImage”创建,然后通过:

cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage /boot/vmlinuz

zImage适用于小内核的情况,它的存在是为了向后的兼容性。

二是内核编译时通过命令makebzImage创建,然后通过:

cp /usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz

三,内核vmlinuz启动运行

 Linux入职基础-4.10_系统启动过程(3):Linux内核(vmlinuz)启动_第2张图片

备注:内核中的init函数实际上只是用户态init进程的入口,它在执行execve("/sbin/init",argv_init, envp_init)时改变成为一个普通的用户进程,系统就转入用户态的运行,在这之后创建的一切进程,都是在用户态进行。

四,内核启动总结

当用户在grub菜单界面选择启动Linux操作系统后,grub会根据/boot/grub.conf配置文件中所设置的信息,从/boot所在的分区上读取Linux内核映像(vmlinuz-xxx),然后把内核映像加载到内存中并把控制权交给Linux内核,Linux内核获得控制权后,将会按以下步骤继续引导系统。

1.由于内核映像是经过压缩的,接下来它要对自身进行解压,同时加载必要的设备驱动。

2. 内核映像会检测系统中的硬件设备,包括内存、CPU、硬盘等,对这些设备进行初始化并配置。

3.初始化与文件系统相关的虚拟设备,如,initrd、LVM或者软件RAID等。

4.装载根文件系统(/),把根文件系统挂载到根目录下。

5.完成引导后,Linux内核会在其进程空间内加载init程序,并把控制权交给init进程,由init进程继续来完成接下来的系统引导工作。

RHEL5的内核映像引导过程信息如图:

Linux入职基础-4.10_系统启动过程(3):Linux内核(vmlinuz)启动_第3张图片

 



你可能感兴趣的:(Linux,Linux入职基础)