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 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创建a1的硬链接a2,Linux命令-重定向和软硬链接

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

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

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

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…

android mvc使用方法,详细学习android mvc设计模式教程

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 web 应用程序的模式。其分层有助于管理复杂的应用程序,因为可以在一个时间内专门关注一个方面。例如,可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易…

android l 电池,DIY新技能--M1L换电池

DIY新技能--M1L换电池2019-10-23 16:48:526点赞6收藏10评论更换理由M1L是好几年前买的了,具体几年前我都懒得购买记录了。前前后后买了4台锤子手机了,这是我支持老罗的第二款手机,前一款是坚果手机,买了两台早先给妈妈用一台后来给…

android版本10好不好,一加正式推送Android 10系统 流畅性怎么样

近日,一加正式推送Android 10系统,不知道流畅性如何呢?一加官方推特正式宣布Android 10系统已进行阶段性推送,从今天开始一加7和一加7 Pro手机用户将会陆续收到氧OS系统的更新,国内基于Android 10的氢OS将于下月推送。…

android屏幕适配流程,Android屏幕适配姿势

GitHub地址为什么要屏幕适配?device_framentation.png统计碎片化品牌机型碎片化屏幕尺寸碎片化操作系统碎片化为了保证用户获得一致的用户体验效果,使得某一元素在Android不同尺寸、不同分辨率的手机上具备相同的显示效果,则需要我们进行屏幕…

在html中写js提示错误,页面HTML标签优化

真正需要SEOer掌握并经常使用的HTML标签也就那么几个,本小节错误君带来的是页面HTML标签优化。title标签 – 标题标签1)title标签用法2.13 TF-IDF加权方法 – 错误教程2)标题标签的作用文章标题有着关键词的作用,文章标题引点击流量。3)页面标题标签优化…

在线聊天室html5源码,HTML5WebSocket实现聊天室的代码示例

本篇文章主要介绍了HTML5-WebSocket实现聊天室示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。在传统的网页实现聊天室的方法是通过每隔一段时间请求服务器获取相关聊天信息来实现,然而html5带来的websocket功能改变这了这种方式&am…

列表页时间日期标签靠显示html,帝国CMS列表页面list.var分别调用年月日,显示个性时间日期...

在帝国CMS中列表页个性时间显示的实现方式,首先我们要知道用什么方法来实现,这里我们使用PHP代码来做。要在模板代码中使用PHP代码,就必须勾选此模板代码页面的-使用程序代码.位置就在添加模板页面的列表内容模板(list.var) (*)上边。然后我们在list.var…

html鼠标响应事件吗,学习JavaScript鼠标响应事件

本文为大家分享了一个简单的鼠标模拟案例,供大家参考,具体实现内容如下如何实现捕抓鼠标事件,当鼠标滑动时,获取当前鼠标的坐标,接着在一个透明区域里绑定捕抓的位移,这样就能在模拟的透明区域里实现鼠标滑…

html5边框闪烁,HTML – CSS框阴影动画像素艺术闪烁

部分用于测试,部分用于我的设计理念,我试图将动画gif转换为纯动画CSS.它几乎正常工作,但我遇到了障碍,我不确定是什么导致了我的问题,或者我如何解决它.我不幸地怀疑我只是限制了技术.至于实际的CSS,我一直在尝试实现这里的方法(动画框阴影属性),因为它看起来最可行&#xff1a…

如把联想电脑计算机图标放在桌面上,thinkpad电脑图标没了怎么恢复

正常情况下,在电脑的桌面上都会有系统自带的程序图标,以及用户自己创建的一些图标。可是最近有网友却跟小编反映说,自己thinkpad电脑出现了图标都没了的情况,不知道怎么回事,更加不清楚怎么恢复。那么对此今天本文就来…

未来计算机领域最急缺的人,未来十年最紧缺职业 没人愿意干的高薪职业

未来十年最紧缺职业 没人愿意干的高薪职业2019-03-19 09:25:56文/刘美娟未来十年中国最紧缺的高薪职业类型有:金融分析师、理财规划师以及动漫设计师等。未来最紧缺的高薪职业金融分析师金融分析师是证券投资和管理界的高级人才,目前我国能够真正拿到特许…

口琴膜片什么作用_思域发动机舱里的这个东西是什么东东,它究竟有什么作用呢?...

​今天的文章我们主要来讲讲图中的这个东西究竟是什么?你们知道他是干什么的吗,这个东西究竟有什么作用?这是前几天的一个微信网友添加我微信问我的问题,今天对这个问题整理了一下,顺来来科普一下关于这个系统的具体应…

椭圆形中间一个大写的v_静安区椭圆形桥梁空心板橡胶气囊,方形桥梁板橡胶气囊_冠桥橡胶...

首页 > 新闻中心发布时间:2020-12-11 07:22:18 导读:冠桥橡胶为您提供静安区椭圆形桥梁空心板橡胶气囊,方形桥梁板橡胶气囊的相关知识与详情: 分集水器上,由于主要功能是调节,般选截止阀或闸阀。后来又出现了一种新…

计算机专业独显好还是集显好,笔记本选购指南:笔记本电脑核显好还是独显好?...

暑期装机热潮来了,而大部分大学生会选择入手一台笔记本而不是笨重的台式机,今天这里主要讲下笔记本选购指南,笔记本电脑核显好还是独显好?可能这个问题提出来,大家就要说很外行。不过既然是写给不太懂电脑的人看&#…

oracle查同比增长_天眼查:目前我国今年新增2.3万家充电桩相关企业,同比增长16.94%...

天眼查专业版数据显示,目前我国有近10万家经营范围含“充电桩、新能源智能充电、电动汽车充电”,且状态为在业、存续、迁入、迁出的充电桩相关企业。从地域分布来看,我国充电桩相关企业较多集中在广东、山东和江苏这三个省份,其中…