linux启动过程中内核拷贝,轻松识破linux内核启动过程中的“”套路“”

内核启动流程相关的内容让很多热爱linux的小伙伴既爱又恨,因为这是了解linux系统基本构造的良好过程同时由于其本身复杂且底层,脑子中的脉络不是很清晰,本文就总结了一些优秀博文,以自己的理解来解构一下。

本文的环境是CentOS 6.8,

基本过程:

38860a71bf75137507f3b94a80cfbaf3.png庖丁解牛:

1.POST

BIOS的功能由两部分组成,

步骤1:上电自检POST(Power-on self test),主要负责检测系统外围关键设备(如:CPU、内                 存、显卡、I/O、键盘鼠标等)是否正常。例如,最常见的是内存松动的情况,BIOS自                 检阶段会报错,系统就无法启动起来;

步骤2:步骤1成功后,便会执行一段小程序用来枚举本地设备并对其初始化。这一步主要是根               据我们在BIOS中设置的系统启动顺序来搜索用于启动系统的驱动器,如硬盘、光盘、U                 盘、软盘和网络等。我们以硬盘启动为例,BIOS此时去读取硬盘驱动器的第一个扇区                 (MBR,512字节),然后执行里面的代码。 BIOS的任务就完成后将系统启动的控制权移交               到MBR部分的代码。

2.MBR(Master Boot Record):主引导扇区位于整个硬盘的0磁头0柱面1扇区,包括硬盘主引导记录MBR(Master Boot Record)和分区表。其中主引导记录的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序,也就是操作系统引导扇区调入内存加以执行。

0_1331124562mEvE.gif

stage1:stage1是直接被写入到MBR中去的,这样机器一启动检测完硬件后,就将控制权交给了GRUB的代码。也就是上图所看到的前446个字节空间中存放的是stage1的代码。BIOS将stage1载入内存中0x7c00处并跳转执行。stage1(/stage1/start.S)的任务非常单纯,仅仅是将硬盘0头0道2扇区读入内存。而0头0道2扇区内容是源代码中的/stage2/start.S,编译后512字节,它是stage2或者stage1_5的入口

stage1.5它存放在硬盘0头0道3扇区向后的位置,stage1_5作为stage1和stage2中间的桥梁,stage1_5有识别文件系统的能力,此后grub才有能力去访问/boot分区/boot/grub目录下的 stage2文件,将stage2载入内存并执行。

a7a4f8b77bacea9101f4c53fbd6f8c80.png

当stage2被载入内存执行时,它首先会去解析grub的配置文件/boot/grub/grub.conf,然后加载内核镜像到内存中,并将控制权转交给内核。而内核会立即初始化系统中各设备并做相关的配置工作,其中包括CPU、I/O、存储设备等。

关于Linux的设备驱动程序的加载,有一部分驱动程序直接被编译进内核镜像中,另一部分驱动程序则是以模块的形式放在initrd(ramdisk)中

default=1# 默认启动的内核title, 0 表示是第一个

timeout=5# 默认等待时间

splashimage=(hd0,0)/grub/splash.xpm.gz    # 指定菜单的背景图片的路径。为xpm格式,采用gzip压缩,只能为14bits色

hiddenmenu    # 隐藏菜单

title CentOS (2.6.32-358.el6.x86_64)    # 标题名,用户可自定义

root (hd0,0)    # 指定 grub 的根位置

# 指定 kernel 文件的位置,还要指出 root(系统启动后) 的位置,挂载方式 ro,这项很关键。

# 加载后会启动 init 进程。

kernel /vmlinuz-2.6.32-358.el6.x86_64 roroot=/dev/mapper/vg0-root rd_NO_LUKS rd_NO_DMLANG=en_US.UTF-8rd_LVM_LV=vg0/swap rd_NO_MDSYSFONT=latarcyrheb-sun16crashkernel=autord_LVM_LV=vg0/rootKEYBOARDTYPE=pcKEYTABLE=usrhgbcrashkernel=autoquiet rhgb quiet

# 在内核启动过程中装载根文件系统时有用

initrd /initramfs-2.6.32-358.el6.x86_64.img

3.kernel:

自身初始化:

探测可识别到的所有硬件设备;

加载硬件驱动程序:(有可能会借助于randisk加载驱动)

以只读方式挂载根文件系统,防止内核对根文件系统有损坏

运行用户空间的第一个应用程序:/sbin/init

a.ramfsinitramfs 是以 gzip 压缩的 cpio 格式的文件。内核启动时将他作为一个临时的根文件系统。

# grub 的 stage2 将initrd加载到内存里,让后将其中的内容释放到内容中,

# 内核便去执行init脚本,这时内核将控制权交给了init文件处理。

# init 它也主要是加载各种存储介质相关的设备驱动程序。当所需的驱动程序加载完后,

# 会创建一个根设备,然后将根文件系统rootfs以只读的方式挂载。

# 这一步结束后,释放未使用的内存,转换到真正的根文件系统上面去,同时运行/sbin/init程序,

# 执行系统的1号进程。此后系统的控制权就全权交给/sbin/init进程了。

b.

4.系统初始化

一览众山小:

d02a5984934ffdba5165353b5b833afb.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux brctl命令,Linux中brctl命令起什么作用呢?

摘要:下文讲述Linux中brctl的功能说明,如下所示;brctl命令功能:用于对以太网的网桥进行配置brctl命令的语法格式:brctl [参数] -----常用参数说明------addbr:创建网桥delbr:删除网桥addif:将网卡接口接入网桥delif:删除网桥接入的网卡接口sh…

linux文件编辑命令详细整理,Linux文件编辑命令vi详细说明

目录1、引言2、vi命令与vim命令3、vi命令使用3.1一般模式3.2编辑模式(重点)3.3命令行模式1、引言相信有很多程序员朋友,在长时间不操作linux系统或者初学linux命令时,都有跟我有一样的疑惑。这个vim命令与vi命令有什么区别?不都是编辑器么&am…

linux wifi ip,Linux环境下使用WIFI模块:使用DHCP工具动态获得IP地址

使用DHCP工具动态获得IP地址实验版本及下载地址DHCP:dhcp-4.4.1.tar.gz链接: [https://www.isc.org/downloads/]编译安装DHCP配置编译选项解压完成后进入DHCP根文件目录,输入配置指令./configure --hostarm-linux ac_cv_file__dev_randomyes --with-rand…

linux 硬盘空间监控,Linux服务器硬盘空间监控

#*************************************************************************# Author : 清风# CreateDate : 2015/6/12 15:30:13# Description : this script is mointoring the linux disk capacity, if disk used more than 90%,then it wi…

linux nifi指定jdk,nifi在arm架构启动不了,怎么办?

问题描述nifi启动报错问题出现的平台版本及自己尝试过哪些方法arrch64、在服务器上编译过相关代码粘贴代码文本(请勿用截图)ERROR [main] org.apache.nifi.NiFi Failure to launch NiFi due to java.util.ServiceConfigurationError: org.apache.nifi.processor.Processor: Pro…

linux内核更新 2.6.38,Linux内核 2.6.38版本预计到四月初完成

【IT168 技术】Linux版本2.6.37发布整整14天之后,Linus Torvalds发布了内核2.6.38的第一测试版,正式版预计将在三月底或四月初完成。在此版本中,开发周期的合并窗口已经结束,Torvalds集 成这个版本的大多数变化到主要开发分支的源…

Linux指令lunch,linux命令 launch是什么命令?

lunch 吧?类似于choosecombo,选择编译编译参数的。执行source build/envsetup.sh才有。其实我也不是特别了解。我觉得应该是在envsetup.sh里定义的。不知道你用过choosecombo没有,跟那个是类似的。$ source build/envsetup.shincluding devic…

linux创建a1的硬链接a2,Linux命令-重定向和软硬链接

echo功能说明:显示文字. 语 法:echo [-ne][字符串] 或 echo [–help][–version]参数:   -n 不要在最后自动换行重定向>是定向输出到文件,如果文件不存在,就创建文件;如果文件存在,就将其…

linux shell 博客,【博客侠】Linux Shell脚本系列:开始上手(1)

看标题大家应该知道,这是一个关于 Linux Shell 脚本的系列文章。通过本系列文章希望帮助 Linux 初学用户快速开始上手编写 Shell 脚本,能够利索的对脚本进行测试和使用。在接下来的首篇文章中,我们将介绍什么是 Shell,有哪些 Linu…

怎么在linux中查询yum,linux - 如何使用YUM列出包的内容?

linux - 如何使用YUM列出包的内容?我知道如何使用rpm列出包的内容(rpm -qpil package.rpm)。 但是,这需要知道.rpm文件在文件系统上的位置。 更优雅的解决方案是使用包管理器,在我的例子中是YUM。 如何使用YUM实现这一目标?7个解决…

在linux安装光盘启动不了,linux光盘启动

〔以RedHat 7.3为例〕1.把安装盘的第一张放到光驱,然后重新启动机器,在BOIS中把系统用光驱来引导。2.等安装界面出来后,按〔F4〕键,也就是linux rescue模式。3.一系列键盘以及几项简单的配制,过后就〔继续〕了。。。这…

linux libusb应用实例,在Linux中使用libusb-1.0作为非root用户访问USB设备

我试图在RHEL5上作为非root用户与USB设备连接.该设备是一个GPIO接口(其文档可在http://www.xdimax.com/sub20/sub20.html找到),它使用libusb-1.0.使用其API打开设备的过程是:sub_device d;d sub_find_devices(0);sub_handle h sub_open(d);当我这样做时,sub_find_…

交叉调试 arm linux,搭建交叉调试环境Arm-Linux-Gdb与gdbserver

操作系统:Ubuntu9.04 开发板:博创2410s 交叉编译工具:arm-linux-gcc-4.1.1 gdbgdbserver 是调试目标板的常用方法.网络环境如下:HOST 192.168.1.123 Target: 192.168.1.21NFS共享目录: mount -t nfs -o intr,nolock,rsize1024,ws…

sql server linux性能,详细了解SQL Server 2008性能和性能优化

在SQL Server 2005或更早的版本中的中,表变量是不能作为存储过程的参数的。当多行数据到SQL Server需要发送多行数据到SQL Server ,开发者要么每次发送一列记录,或想出其他的变通方法,以满足需求。虽然在.net 2.0中提供了个SQLBul…

开发linux显卡驱动,显卡驱动开发DRM入门--Apple的学习笔记

由于之前的blog提及kmscube的源码我没有找到,所以只能在网上搜索了。DRM简介DRM是Linux目前主流的图形显示框架,同时DRM可以统一管理GPU和Display驱动,使得软件架构更为统一,方便管理和维护。而且drm是集成在linux kernel中的。DR…

linux 中w和x 区别,r、w、x权限在文件和目录中的含义有何区别?

age 于 2011-01-11 17:48:39发表:目录和文件的rw权限基本一致, 唯一有区别的可能就是执行权限了文件的可执行权限很好理解, 最简单的理解就是可以在终端下输入路径来执行这个文件.但目录可执行的意思则完全不同, 它并非指这个目录可以被执行. 而是指它允许在该目录下运行可执行…

linux ppp漏洞,Linux下ppp拨号的实现(Arm)

Linux发行版自带PPP拨号需要的pppd和chat命令,以2.6.18内核的Linux虚拟机为例,在/usr/sbin目录下,/etc/ppp目录也已自动创建。参考模权创建拨号脚本ppp-on,ppp-off,ppp-on-dialer三个文件,on&off放在/u…

c语言学生成绩管理论文,学生成绩管理系统毕业论文c语言.doc

111111111学院毕 业 论 文题 目 学生成绩管理系统姓 名 1 1 1所在系别 计 算 机 系专业班级 计算机应用技术计算机111班学 号 1111111111指导教师 1 1 1日 期 2012 年 4 月 15 日目 录摘 要 ………………………………………………………………………………………………………1…

编程语言基础 c语言同步教案,C语言程序设计基实验教案.doc

C语言程序设计基实验教案高级语言程序设计基础实验主讲教师:张顺利2011年10月,其中。2.将China译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例如,字母A后面第四个字母是E,用…

c语言char转cstring,CString、TCHAR*、char*转换 | 时刻需

char*、TCHAR*转换CStringCString str(****)下面详细写一下其它转换///************************************************************************* 函数: TransCStringToTCHAR* 描述:将CString 转换为 TCHAR** 日期:*********************…