=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=
《 “Linux启动过程的几个阶段” 》 有 8 条评论
GNU Grub是如何工作的?(How does GNU GRUB work)
https://0xax.github.io/grub/
Linux Loader 机制与内核模块修复
https://threathunter.org/topic/59d60bebec721b1f1966ec64
https://www.centos.bz/2017/10/linux-loader-%E6%9C%BA%E5%88%B6%E4%B8%8E%E5%86%85%E6%A0%B8%E6%A8%A1%E5%9D%97%E4%BF%AE%E5%A4%8D/
`
0x1 Linux 启动与内核加载
1.1 bootloader
1.2 内核文件
1.3 解剖 initramfs
1.4 bootloader 配置
0x2 内核模块依赖重建
2.1 内核模块
2.2 问题重现
2.3 修复内核模块
0x3 总结
`
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/
Linux boot process 分析
https://opensource.com/article/18/1/analyzing-linux-boot-process
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?
-总结
`
如何清除不可清除的 BIOS 密码
https://www.reddit.com/r/homelab/comments/8x4qxq/how_i_cleared_an_unclearable_bios_password/
内核镜像攻击的缓解措施
http://c0reteam.org/2019/01/02/ksma
UEFI 引导与 BIOS 引导在原理上有什么区别?
https://www.zhihu.com/question/21672895
`
UEFI和传统BIOS在启动引导过程原理上没有本质区别!
`
UEFI背后的历史
https://zhuanlan.zhihu.com/p/25281151
UEFI和BIOS探秘
https://zhuanlan.zhihu.com/UEFIBlog