您的位置:首页 > 运维架构 > Linux

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

2018-03-03 15:36 1136 查看
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目录下的文件



[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启动运行
 


备注:内核中的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的内核映像引导过程信息如图:



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: