还记得马哥曾总结过每天必读的7句话

1、永远不要向任何人解释你自己。 
2、别让某人成为你生命中的优先。 
3、每天早上两个简单的选择:回去睡或起身追逐梦想。 
4、不要让在乎我们的人为我们哭泣 
5、别在喜悦时许下承诺,忧伤时做出回答,愤怒时做出决定 
6、享受生命的每个当下 
7、当你持续的说你非常忙碌,你的明天就永远不会来

现在细细看来,感悟良多。谁也不能预见将来,做好当前,即便将来遭遇失败,也不会留下什么遗憾。。。

废话不多说,进入正题

首先此篇先大体介绍下整个系统的开机流程,再来对其一一展开进行详细的说明

第一步:首先进行开机自检POST,确认硬件正常后进入下一步

第二步:BIOS initialization(BOOT SEQ)BIOS初始化,并按照BIOS中设定的开机启动加载设备进行依次的检测

第三步:MBR(bootloader)在BIOS检测到某一设备可以启动后,开始加载MBR上的引导程序,在linux中,引导分为2个阶段,首先加载在MBR上的一段极其精简的启动程序,由此启动程序引导boot目录中的grub,再由grub进行具体系统的引导启动(grub是一个很强大的系统启动引导管理软件,也可以引导window)

第三步:Kernel initialization 在由grub引导linux内核后,启动内核,由内核检测基本硬件设备装载对应驱动,并装载rootfs和启动init(/etc/inittab)

第四步:系统启动和初始化,在启动init后,才开始真正的系统启动,内核退居到后台,由init来接管整个系统的加载和启动,init会根据设定进行系统进一步的初始化,下面是init启动后进行的一系列操作

1.完成系统整体初始化:/etc/rc.d/rc.sysinit (此脚本可以细细研读)

2.启动对应级别的各个服务:/etc/rc.d/rc 利用/etc/rc.d/ec[0-6].d/目录下的所有脚本启动或者停止服务

/etc/rc.d/ec[0-6].d/下都是链接文件,链接到/etc/rc.d/init.d/下的各个脚本

3./etc/rc.local (链接到/etc/rc.d/rc.local)给用户定义的额外开机操作项

4.启动虚拟终端,验证用户登录(图形界面则调用其他如XDM来验证用户登录)

至此 系统启动完整,可以说,整个系统的启动都是靠一堆脚本来完成的

第一二步骤涉及到硬件的POST和BIOS阶段就不再细说了,从bootloader开始说起

bootloader

这是一段放置在MBR钱446字节中的一段精简的引导程序(MBR一共有512字节,后64字节既是分区表,还有最后2个字节的填充)

常见的bootloader程序有

LILO:LInux LOader 可以引导多个操作系统,但不支持大硬盘

GRUB:GRand Unified Bootloader 目前比较常见的引导加载器,这是一个分段的引导加载器,在Ubunt上用的是GRUB1.9x。

时隔10年,最新的GRUB2在昨天正式发布了,有兴趣的童鞋可以去关注下

可以在开机时进入GRUB的交互模式,直接输入参数启动系统,在这里可以输入单用户启动参数直接进入单用户模式进行密码修改等操作

之前说这是一个分段的引导程序这里来说说具体是怎么分段的

第一段:MBR 
用来引导进入第二段,在完成第一段后,初始化GRUB自我初始化后,并正常启动第二段

第二段:/boot/grub

由于MBR上的引导程序只有446字节,所以能放置的内容很少,功能很弱,所以通过引导启动第二段放置在磁盘中/boot/grub目录下强大的GRUB程序,来扩展其更为强大的引导功能

此目录下的配置文件

/boot/grub/grub.conf

搬照我的配置文件来详细说明

  1. # grub.conf generated by anaconda
  2. #
  3. # Note that you do not have to rerun grub after making changes to this file
  4. # NOTICE:  You do not have a /boot partition.  This means that
  5. #          all kernel and initrd paths are relative to /, eg.
  6. #          root (hd0,0)
  7. #          kernel /boot/vmlinuz-version ro root=/dev/sda1
  8. #          initrd /boot/initrd-[generic-]version.img
  9. #boot=/dev/sda
  10. #以上是注释说明
  11. #以下是全局设定
  12. default=0 #默认启动的系统顺序,从0开始数
  1. timeout=5 #等待用户选择系统的超时时间
  2. splashimage=(hd0,0)/boot/grub/splash.xpm.gz #开机图片的位置,这里的位置,由于GRUB是直接识别硬盘的,所以和在linux的树状文件系统要区分一下,如果在linux中boot挂载点是和单独分区,那么只要指向boot分区下的目录,不用从boot开始,直接写成splashimage=(hd0,0)/grub/splash.xpm.gz 我这里将boot和根放在同一分区,所以从boot目录开始写
  3. hiddenmenu #是否隐藏菜单
  4. #以下是各个引导系统的设定
  5. title CentOS (2.6.32-220.el6.i686) #菜单显示名称
  6. root (hd0,0) #内核所在分区
  7. kernel /boot/vmlinuz-2.6.32-220.el6.i686 ro root=UUID=f7ba45db-7d52-407e-996d-0d7c087f7a1a rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM #内核所在位置和需要向内核传递的参数
  8. initrd /boot/initramfs-2.6.32-220.el6.i686.img #这是一个小linux,完整,精悍。 为了防止内核中没有根系统文件的驱动产生系统启动死循环(比如根是放在lvm设备中),先加载initrd这个精简的linux,然后内核借助这个精简的linux加载根文件系统的驱动,然后切换到真正的根文件系统继续进行系统加载
  9. password 123456 #启动此系统需要的密码,也可以放在全局设定中,表示在开机进入交互式GRUB编辑需要输入密码

Kernel initialization

1、硬件探测

2、硬件驱动初始化(initrd)

3、挂载根文件系统(为了避免额外进程写操作破坏文件系统,所以在这里是使用只读挂载)

4、启动/sbin/init (PID:1)

在Kernel阶段,需要挂在根目录,而linux单内核系统,但它也吸收了微内核的特性,所以它包括了内核模块。

内核:/boot/vmlinuz-version 模块:/libmodules/version/

把模块集成进内核能提高效率,但也增大了内核体积,所以使用加载模块的方式提高了可管理性

这里就造就了一个问题,由于内核比较精简,所以不可能集成进很多的驱动进去,由内核初始化后是必须要加载根文件系统的,一旦根文件系统放在RAID或LVM设备上,由于内核缺少这些高级文件系统的驱动,会导致无法加载。于是就在这里加了一层中间层,就是这里的initrd了。initrd是一个微型的根文件系统,内置额外内核中没有的驱动模块

首先内核借助initrd加载根文件系统,然后加载真实根文件系统驱动和其它必须驱动后,切换到真正的根文件系统。所以initrd只是起到一个过渡的作用

内核初始化产生的所有信息保存在/var/log/dmesg 二进制文件,使用dmesg命令查看

init 系统初始化

加载完成内核后,启动整个系统的父进程,PID为1 的init

init接管系统后,结合/etc/initab的配置,加载各种需要的库文件,启动各个进程,比如bash,用户登录验证等。。。

本文转自lustlost 51CTO博客,原文链接:http://blog.51cto.com/lustlost/912513,如需转载请自行联系原作者

打造个人专属的微型linux--启动原理篇相关推荐

  1. linux 精简开机启动服务,打造个人专属的微型Linux--启动原理篇

    首先此篇先大体介绍下整个系统的开机流程,再来对其一一展开进行详细的说明 第一步:首先进行开机自检POST,确认硬件正常后进入下一步 第二步:BIOS initialization(BOOT SEQ)B ...

  2. 从无盘启动看 Linux 启动原理

    作者:bobyzhang,腾讯 IEG 运营开发工程师 0. 故事的开始 0.1 为什么和做什么 最近家里买了对音响,我需要一个数字播放器.一凡研究后我看上了 volumio(https://volu ...

  3. centos7无盘启动_从无盘启动看Linux启动原理

    作者:bobyzhang,腾讯 IEG 运营开发工程师 0. 故事的开始 0.1 为什么和做什么 最近家里买了对音响,我需要一个数字播放器.一凡研究后我看上了volumio( 我打算让volumio运 ...

  4. 华为定制版Linux镜像下载,华为OpenEuler体验系列(02)--定制支持NTFS的微型Linux启动盘...

    上次已经制作了可以在bios和uefi下启动的启动盘,今天在这个基础上添加一个支持ntfs微型linux定制的启动u盘. 一.下载小型的linux: http://www.tinycorelinux. ...

  5. nfsd linux是什么进程,如何从NFS启动Linux及原理

    搞嵌入式的,不懂NFS,那绝对是一个悲剧.如果你连调试一个普通的Linux C程序,都要经历"编译->打包 -> 烧写 -> 重启"这些过程,那么你离正式产品不是 ...

  6. linux内核bios,BIOS的启动原理——Linux内核设计学习笔记

    RAM:随机存取存储器,常见的内存条就是一类RAM,其特点是加电状态下可任意读.写,断电后信息消失. 在RAM中什么程序也没有的时候,谁来完成加载软盘中操作系统的任务呢? 答案是:BIOS. BIOS ...

  7. 1-10-RHEL6.3-linux启动原理及各种故障案例分析(Red Hat Enterprise Linux Server6.3)@树袋飘零...

    本节内容: 一.Linux启动过程 二.常见的启动故障排除 三.救援模式 1.系统瘫痪了救援模式下拷贝数据 2.grub重新安装 3.系统无法启动--磁盘资源耗尽 4.文件删除空间不释放的问题(拓展) ...

  8. 制作自己的linux内核,打造属于你自己的Linux系统

    一.前言 Linux操作系统至1991年10月5日诞生以来,就其开源性和自由性得到了很多技术大牛的青睐,每个Linux爱好者都为其贡献了自己的一份力,不管是在Linux内核还是开源软件等方面,都为我们 ...

  9. VLOG丨树莓派Raspberry Pi 3安装PLEX并挂载USB硬盘打造最牛的微型家庭影音服务器2018...

    视频介绍 树莓派3安装目前最流行的PLEX服务器,实现既能最大限度降低功耗,也能随时随地观看分享影片. 一.在树莓派下安装PLEX媒体服务器 1.在终端,将你的树莓派更新至最新 sudo apt up ...

最新文章

  1. 前端验证码后端返回一个图片_Web后端开发(6)——简易图片验证码的制作
  2. 【知识图谱】知识存储
  3. Apache与Tomcat整合
  4. Linux 安装Redis全过程日志
  5. Java虚拟机执行引擎多态的实现
  6. 嵌入式开发中,用C++真香!
  7. 从全景相机领先者到大幅裁员,完美幻境经历了什么?
  8. axios 中文文档、使用说明
  9. linux arm交叉编译ko,Ubuntu嵌入式交叉编译环境arm-linux-gcc
  10. ollvm源码分析之控制流扁平化(3)
  11. 暗黑主题(皮肤)资源 (实用)
  12. 电力系统谐波分析代码
  13. 深度测试oppo软件,OPPO深度测试app
  14. 计算机管理中打开移动硬盘磁盘必须格式化,Win10下移动硬盘无法打开提示需要格式化的三种解决方法...
  15. movie计算机英语作文,my favorite movie英语作文100字
  16. shell脚本俄罗斯方块小游戏
  17. handsome对应php文件,基于handsome主题的一些美化总结
  18. 虎牙直播怎么换html5,虎牙直播怎么换徽章-虎牙直播更换粉丝徽章的方法 - 河东软件园...
  19. 如何获取美团外卖推广链接
  20. pygame之窗口大小调整

热门文章

  1. POJ1256 (C++ compare函数)
  2. 数据结构2 - 线性表
  3. selenium - webdriver - 定位一组元素
  4. Vue2.0+ElementUI+PageHelper实现的表格分页
  5. 《SaaS架构设计》试读:前 言
  6. python之多并发socket
  7. [Mac入门]如何在Mac下显示Finder中的所有文件
  8. 关于this和base
  9. 美国之旅-出发前的准备
  10. 网络专业人士笔记(超级珍藏)