Linux启动过程的几个阶段

本文最后更新于2017年7月29日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

=Start=

缘由:

之前有学习、整理过相关的知识,虽然说现在基本上天天都在和Linux打交道,不过后来没有专门研究过那些知识,再加上时间一长一些细节性的内容也记不清楚了,所以想在博客里面再总结、记录一下,方便以后参考。

正文:

参考解答:

thegeekstuff.com里对Linux的启动过程有一个描述,是基于SysV init的,虽然现在的CentOS 7都开始使用systemd替代init了,但大体内容和顺序大同小异,值得学习、参考:

 

  • BIOS #基本输入输出系统

进行一些系统完整性检查(开机自检——Power-On Self-Test);

搜索、加载、执行 boot loader 程序;(一般的查找顺序是floppy软盘、cd-rom光盘、hard-drive硬盘,你可以通过在启动的时候按F12键修改查找顺序)(一旦boot loader程序已经被检测到并加载进内存后BIOS就会将控制权移交给MBR)

总的来说,BIOS主要是起加载和执行MBR boot loader的作用;

  • MBR #主引导记录

MBR一般位于可引导磁盘的第一个扇区中,比较典型的是/dev/hda或/dev/sda;

MBR大小一般为512字节,有3个组成部分:前446字节表示主引导程序信息/结构,接下来的64字节表示分区表信息,最后2字节表示MBR的合法性检查信息;

它会包含和GRUB相关的信息(在比较老的系统上是LILO);

总的来说,MBR主要是起加载和执行GRUB boot loader的作用;

  • GRUB #引导程序(Grand Unified Bootloader)

如果在你的系统上有多个内核镜像,你可以通过GRUB选择一个来执行,如果不指定,它就会加载一个默认的内核镜像;

总的来说,GRUB主要是起加载和执行Kernel和initrd镜像的作用;

  • Kernel #内核

挂载在grub.conf中根据「root=」指定的根文件系统;

执行/sbin/init程序;

initrd指的是Initial RAM Disk;在根文件系统被挂载到真正的磁盘上之前,initrd被内核用作临时的根文件系统;

  • Init #超级进程

根据/etc/inittab文件的内容决定Linux的运行级别;

  • Runlevel #运行级别/模式

根据实际的运行级别决定执行/etc/rc.d/rc*.d/目录下的哪些文件;

参考链接:

6 Stages of Linux Boot Process (Startup Sequence)
http://www.thegeekstuff.com/2011/02/Linux-boot-process/

Linux pid 1 和 systemd
http://coolshell.cn/articles/17998.html

计算机是如何启动的?
http://www.ruanyifeng.com/blog/2013/02/booting.html
Linux 的启动流程
http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html

为什么主引导记录的内存地址是0x7C00?
http://www.ruanyifeng.com/blog/2015/09/0x7c00.html

实现 Linux 内核加载的 bash 脚本(Linux kernel initialization, translated to bash)
https://gist.githubusercontent.com/marcan/a2eafd605d3d6ac76eb10a7c64f736c3/raw/96af72eef2579e3992a83798437e1ef0995c688f/linux.sh

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/3466.html

《Linux启动过程的几个阶段》上有6条评论

  1. Message Of The Day(/etc/motd)

    /etc/issue 文件的使用方法与 /etc/motd 文件相差不大,它们的主要区别在于:当一个网络用户或通过串口登录系统上时, /etc/issue 的文件内容显示在login提示符之前,而 /etc/motd 内容显示在用户成功登录系统之后。

    Linux的/etc/issue、/etc/issue.net和/etc/motd的区别
    http://www.cnblogs.com/pluse/p/5531523.html

    关于/etc/issue和/etc/motd的问题
    http://itchen.blog.51cto.com/343363/206679

    https://en.wikipedia.org/wiki/Motd_(Unix)
    https://serverfault.com/questions/459229/is-it-possible-to-put-commands-in-etc-motd

    个性化定制你的MOTD
    http://www.mewbies.com/how_to_customize_your_console_login_message_tutorial.htm
    https://askubuntu.com/questions/105689/how-is-etc-motd-updated

    https://www.tecmint.com/protect-ssh-logins-with-ssh-motd-banner-messages/

  2. Linux 启动过程分析
    https://linux.cn/article-9437-1.html
    https://opensource.com/article/18/1/analyzing-linux-boot-process

    -启动的开始:OFF 状态
    -----局域网唤醒Wake-on-LAN
    -----英特尔管理引擎、平台控制器单元和 Minix
    -----引导程序
    -启动内核
    -----配置引导内核
    -从 start_kernel() 到 PID
    -----内核的硬件清单:设备树和 ACPI 表
    -----从 start_kernel() 到用户空间
    -----早期的用户空间:谁规定要用 initrd?
    -总结

发表评论

电子邮件地址不会被公开。 必填项已用*标注