Linux启动流程梳理|思维导图|流程图

strongerHuang 2024-01-23 08:20
关注+星标公众,不错过精彩内容
来源 | 网络

Linux启动流程总的来说可以分成三个阶段



Linux启动流程图


第一步:上电

Ø在 x86 系统中,将 1M 空间最上面的 0xF0000 到 0xFFFFF 这 64K 映射给 ROM。

Ø当电脑刚加电的时候,会做一些重置的工作,将 CS 设置为 0xFFFF,将 IP 设置为 0x0000,所以第一条指令就会指向 0xFFFF0,正是在 ROM 的范围内。

Ø在这里,有一个 JMP 命令会跳到 ROM 中做初始化工作的代码,于是,BIOS 开始进行初始化的工作




第二步:BIOS启动

固件初始化:计算机开机后,UEFI固件会进行初始化,包括硬件初始化、自检和加载UEFI固件驱动程序等。

启动设备选择:UEFI固件会检测并识别可启动的设备,如硬盘、光盘、USB设备等。它会根据预设的启动顺序或用户设置的启动选项,选择一个可启动的设备作为启动介质。

UEFI固件驱动程序加载:UEFI固件会加载设备上的UEFI固件驱动程序,这些驱动程序负责与硬件设备进行交互,以便后续的启动过程能够正常进行。

UEFI应用程序加载:UEFI固件会加载位于启动介质上的UEFI应用程序,如引导加载程序(Bootloader)或操作系统的引导管理器。这些应用程序通常位于EFI系统分区中,以.efi文件格式存在。

引导加载程序执行:加载的引导加载程序会接管控制权,负责加载操作系统内核或其他引导组件。常见的引导加载程序有UEFI Shell、GRUB、rEFInd等。


第三步:Linux启动



Linux启动-引导

Ø我们可以通过BIOS界面选择硬盘启动项进入OS,那BIOS是怎么发现这个硬盘里有OS?

Ø答案就是MBR(Master Boot Record),

ØMBR是放在硬盘的第一个扇区,一共512字节,

Ø可以分成两部分:

Ø主引导记录:安装启动引导程序的地方,446字节,

Ø分区表:记录整个硬盘分区的的状态此外,64字节


Linux启动-引导EBR/VBR

Ø找到MBR后下一步做啥?

Ø(1)如果查找分区表时发现操作系统装在主分区,然后执行已载入的MBR中的boot loader代码,加载该激活主分区的VBR中的boot loader,至此,控制权就交给了VBR的boot loader

Ø(2)如果操作系统不是装在主分区,那么肯定是装在逻辑分区中,所以查找完主分区表后会继续查找扩展分区表,直到找到EBR所在的分区,然后MBR中的boot loader将控制权交给该EBR的boot loader




Linux启动-引导GRUB2介绍

ØGNU GRUB(GRand Unified Bootloader简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。

Ø生成配置文件:grub2-mkconfig -o /boot/grub2/grub.cfg

Ø安装:grub2-install /dev/sda


Linux启动-引导GRUB2加载

ØGrub2 第一个安装的就是 boot.img,BIOS 完成任务后,会将 boot.img 从硬盘加载到内存中的 0x7c00 来运行。boot.img会加载 core.img。如果从硬盘启动的话,这个扇区里面是 diskboot.img,diskboot.img 的任务就是将 core.img 的其他部分加载进来,先是解压缩程序 lzma_decompress.img,再往下是 kernel.img,最后是各个模块 module 对应的映像。这里需要注意,它不是 Linux 的内核,而是 grub 的内核。

Ø随着我们加载的东西越来越大,实模式这 1M 的地址空间实在放不下了,所以在真正的解压缩之前,lzma_decompress.img 做了一个重要的决定,就是调用 real_to_prot,切换到保护模式,这样就能在更大的寻址空间里面,加载更多的东西。




Linux启动-0/1号进程

Øset_task_stack_end_magic(&init_task)。这里面有一个参数 init_task,它的定义是 struct task_struct init_task = INIT_TASK(init_task)。

Ø它是系统创建的第一个进程,我们称为 0 号进程。这是唯一一个没有通过 fork 或者 kernel_thread 产生的进程,是进程列表的第一个。

Ø1.trap_init()中断初始化

Ø2.mm_init()内存初始化

Ø3.sched_init()调度策略初始化

Ø4.vfs_caches_init()基于内存文件系统rootfs初始化

Ø5.start_kernel()->rest_init()其他方面的初始化

Ørest_init 的第一大工作是,用 kernel_thread(kernel_init, NULL, CLONE_FS) 创建第二个进程,这个是 1 号进程。1 号进程对于操作系统来讲,有“划时代”的意义。


Linux启动-ramdisk

Øinit 程序是在文件系统上的,文件系统一定是在一个存储设备上的,例如硬盘。Linux 访问存储设备,要有驱动才能访问。如果存储系统数目很有限,那驱动可以直接放到内核里面,但是文件系统的格式有很多,全都放进内核那内核就太大了。

Ø这该怎么办呢?

Ø我们只好先弄一个基于内存的文件系统。内存访问是不需要驱动的,这个就是 ramdisk。这个时候,ramdisk 是根文件系统。

Ø运行 ramdisk 上的 /init,等它运行完了就已经在用户态了。/init 这个程序会先根据存储系统的类型加载驱动,有了驱动就可以设置真正的根文件系统了。有了真正的根文件系统,ramdisk 上的 /init 会启动文件系统上的 init。


Linux启动-init介绍

Ø前面0/1进程都属于内核线程,ps pid=1的是init进程

Ø if (ramdisk_execute_command) {

Øret = run_init_process(ramdisk_execute_command);

Ø...... }

Ø......

Øif (!try_to_run_init_process("/sbin/init") ||

Ø!try_to_run_init_process("/etc/init") ||

Ø !try_to_run_init_process("/bin/init") ||

Ø!try_to_run_init_process("/bin/sh")) return 0

Ø它会尝试运行 ramdisk 的“/init”,或者普通文件系统上的“/sbin/init”“/etc/init”“/bin/init”“/bin/sh”。不同版本的 Linux 会选择不同的文件启动,但是只要有一个起来了就可以。


ØInit类型:

ØSysV:CentOS 5之前, 配置文件/etc/inittab

ØUpstart:CentOS 6,配置文件/etc/inittab,/etc/init/*.conf

ØSystemd:CnetOS7, 配置文件/usr/lib/system/syste,/etc/systemd/system


Linux启动-运行级别



Linux启动-fstab

Ø任何硬件设备连接后,操作系统使用硬件,即需要挂载。windows只不过是自动“挂载”了,linux需要手动自己搞。在Linux系统下,例如每次挂载/dev/sdb1(例如U盘设备文件)需要手动使用命令mount。当然,每次重启,开启时,硬盘一般也是被自动挂载的,而自动挂载的信息,就记录在/etc/fstab文件中。

Ø 系统每次启动都会读取/etc/fstab中的配置内容,自动挂载该文件中被记录的设备和分区。

Ø 第一列:设备文件或UUID或label(三者的区别看下面)

Ø 第二列:设备的挂载点(空目录)

Ø 第三列:该分区文件系统的格式(可以使用特殊的参数auto,自动识别分区的分区格式)

Ø 第四列:文件系统的参数,设置格式的选项

Ø 第五列:dump备份的设置(0表示不进行dump备份,1代表每天进行dump备份,2代表不定日期的进行dump备份)

Ø 第六列:磁盘检查设置(其实是一个检查顺序,0代表不检查,1代表第一个检查,2后续.一般根目录是1,数字相同则同时检查)


Linux启动-用户登录

一般来说:用户登录方式有三种

1.命令行登录

2.ssh登录

3.图形登录

Linux是多任务多用户的操作系统,它允许多人同时在线工作。但每个人都必须要输入用户名和密码才能验证身份并最终登录。但登陆时是以图形界面的方式给用户使用,还是以纯命令行模式给用户使用呢?这是终端决定的,也就是说在登录前需要先加载终端。

现代Linux上,console终端已经和原始的意义不太一样了,其设备映射在/dev/console上,所有内核输出的信息都输出到console终端,而其他用户程序输出的信息则输出到虚拟终端或伪终端。

总结下:

/dev/console:控制台终端

/dev/ttyN:虚拟终端,ctrl+alt+f[1-6]切换的就是虚拟终端

/dev/ttySN:串行终端

/dev/pts/N:伪终端,ssh等工具连接过去的活着图形终端下开启的命令行终端就是伪终端。


Linux启动-用户切换

Linux预设提供了六个命令窗口终端机让我们来登录。

默认我们登录的就是第一个窗口,也就是tty1,这个六个窗口分别为tty1,tty2 … tty6,你可以按下Ctrl + Alt + F1 ~ F6 来切换它们

Ø

Ø针对我的VM Virtual BOX ctrl+alt + F1是图形终端, ctrl+alt + F2~F6命令行终端


Linux启动流程思维导图

声明:本文素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。

------------ END ------------



●专栏《嵌入式工具

●专栏《嵌入式开发》

●专栏《Keil教程》

●嵌入式专栏精选教程


关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。




点击“阅读原文”查看更多分享。

strongerHuang 作者黄工,高级嵌入式软件工程师,分享嵌入式软硬件、物联网、单片机、开发工具、电子等内容。
评论
  • 本文介绍瑞芯微开发板/主板Android配置APK默认开启性能模式方法,开启性能模式后,APK的CPU使用优先级会有所提高。触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。源码修改修改源码根目录下文件device/rockchip/rk3562/package_performance.xml并添加以下内容,注意"+"号为添加内容,"com.tencent.mm"为AP
    Industio_触觉智能 2025-01-17 14:09 164浏览
  • Ubuntu20.04默认情况下为root账号自动登录,本文介绍如何取消root账号自动登录,改为通过输入账号密码登录,使用触觉智能EVB3568鸿蒙开发板演示,搭载瑞芯微RK3568,四核A55处理器,主频2.0Ghz,1T算力NPU;支持OpenHarmony5.0及Linux、Android等操作系统,接口丰富,开发评估快人一步!添加新账号1、使用adduser命令来添加新用户,用户名以industio为例,系统会提示设置密码以及其他信息,您可以根据需要填写或跳过,命令如下:root@id
    Industio_触觉智能 2025-01-17 14:14 123浏览
  • 数字隔离芯片是一种实现电气隔离功能的集成电路,在工业自动化、汽车电子、光伏储能与电力通信等领域的电气系统中发挥着至关重要的作用。其不仅可令高、低压系统之间相互独立,提高低压系统的抗干扰能力,同时还可确保高、低压系统之间的安全交互,使系统稳定工作,并避免操作者遭受来自高压系统的电击伤害。典型数字隔离芯片的简化原理图值得一提的是,数字隔离芯片历经多年发展,其应用范围已十分广泛,凡涉及到在高、低压系统之间进行信号传输的场景中基本都需要应用到此种芯片。那么,电气工程师在进行电路设计时到底该如何评估选择一
    华普微HOPERF 2025-01-20 16:50 76浏览
  • 高速先生成员--黄刚这不马上就要过年了嘛,高速先生就不打算给大家上难度了,整一篇简单但很实用的文章给大伙瞧瞧好了。相信这个标题一出来,尤其对于PCB设计工程师来说,心就立马凉了半截。他们辛辛苦苦进行PCB的过孔设计,高速先生居然说设计多大的过孔他们不关心!另外估计这时候就跳出很多“挑刺”的粉丝了哈,因为翻看很多以往的文章,高速先生都表达了过孔孔径对高速性能的影响是很大的哦!咋滴,今天居然说孔径不关心了?别,别急哈,听高速先生在这篇文章中娓娓道来。首先还是要对各位设计工程师的设计表示肯定,毕竟像我
    一博科技 2025-01-21 16:17 105浏览
  •     IPC-2581是基于ODB++标准、结合PCB行业特点而指定的PCB加工文件规范。    IPC-2581旨在替代CAM350格式,成为PCB加工行业的新的工业规范。    有一些免费软件,可以查看(不可修改)IPC-2581数据文件。这些软件典型用途是工艺校核。    1. Vu2581        出品:Downstream     
    电子知识打边炉 2025-01-22 11:12 62浏览
  • 现在为止,我们已经完成了Purple Pi OH主板的串口调试和部分配件的连接,接下来,让我们趁热打铁,完成剩余配件的连接!注:配件连接前请断开主板所有供电,避免敏感电路损坏!1.1 耳机接口主板有一路OTMP 标准四节耳机座J6,具备进行音频输出及录音功能,接入耳机后声音将优先从耳机输出,如下图所示:1.21.2 相机接口MIPI CSI 接口如上图所示,支持OV5648 和OV8858 摄像头模组。接入摄像头模组后,使用系统相机软件打开相机拍照和录像,如下图所示:1.3 以太网接口主板有一路
    Industio_触觉智能 2025-01-20 11:04 156浏览
  •  万万没想到!科幻电影中的人形机器人,正在一步步走进我们人类的日常生活中来了。1月17日,乐聚将第100台全尺寸人形机器人交付北汽越野车,再次吹响了人形机器人疯狂进厂打工的号角。无独有尔,银河通用机器人作为一家成立不到两年时间的创业公司,在短短一年多时间内推出革命性的第一代产品Galbot G1,这是一款轮式、双臂、身体可折叠的人形机器人,得到了美团战投、经纬创投、IDG资本等众多投资方的认可。作为一家成立仅仅只有两年多时间的企业,智元机器人也把机器人从梦想带进了现实。2024年8月1
    刘旷 2025-01-21 11:15 502浏览
  • 2024年是很平淡的一年,能保住饭碗就是万幸了,公司业绩不好,跳槽又不敢跳,还有一个原因就是老板对我们这些员工还是很好的,碍于人情也不能在公司困难时去雪上加霜。在工作其间遇到的大问题没有,小问题还是有不少,这里就举一两个来说一下。第一个就是,先看下下面的这个封装,你能猜出它的引脚间距是多少吗?这种排线座比较常规的是0.6mm间距(即排线是0.3mm间距)的,而这个规格也是我们用得最多的,所以我们按惯性思维来看的话,就会认为这个座子就是0.6mm间距的,这样往往就不会去细看规格书了,所以这次的运气
    wuliangu 2025-01-21 00:15 189浏览
  •  光伏及击穿,都可视之为 复合的逆过程,但是,复合、光伏与击穿,不单是进程的方向相反,偏置状态也不一样,复合的工况,是正偏,光伏是零偏,击穿与漂移则是反偏,光伏的能源是外来的,而击穿消耗的是结区自身和电源的能量,漂移的载流子是 客席载流子,须借外延层才能引入,客席载流子 不受反偏PN结的空乏区阻碍,能漂不能漂,只取决于反偏PN结是否处于外延层的「射程」范围,而穿通的成因,则是因耗尽层的过度扩张,致使跟 端子、外延层或其他空乏区 碰触,当耗尽层融通,耐压 (反向阻断能力) 即告彻底丧失,
    MrCU204 2025-01-17 11:30 184浏览
  • 日前,商务部等部门办公厅印发《手机、平板、智能手表(手环)购新补贴实施方案》明确,个人消费者购买手机、平板、智能手表(手环)3类数码产品(单件销售价格不超过6000元),可享受购新补贴。每人每类可补贴1件,每件补贴比例为减去生产、流通环节及移动运营商所有优惠后最终销售价格的15%,每件最高不超过500元。目前,京东已经做好了承接手机、平板等数码产品国补优惠的落地准备工作,未来随着各省市关于手机、平板等品类的国补开启,京东将第一时间率先上线,满足消费者的换新升级需求。为保障国补的真实有效发放,基于
    华尔街科技眼 2025-01-17 10:44 221浏览
  • 嘿,咱来聊聊RISC-V MCU技术哈。 这RISC-V MCU技术呢,简单来说就是基于一个叫RISC-V的指令集架构做出的微控制器技术。RISC-V这个啊,2010年的时候,是加州大学伯克利分校的研究团队弄出来的,目的就是想搞个新的、开放的指令集架构,能跟上现代计算的需要。到了2015年,专门成立了个RISC-V基金会,让这个架构更标准,也更好地推广开了。这几年啊,这个RISC-V的生态系统发展得可快了,好多公司和机构都加入了RISC-V International,还推出了不少RISC-V
    丙丁先生 2025-01-21 12:10 118浏览
  • 临近春节,各方社交及应酬也变得多起来了,甚至一月份就排满了各式约见。有的是关系好的专业朋友的周末“恳谈会”,基本是关于2025年经济预判的话题,以及如何稳定工作等话题;但更多的预约是来自几个客户老板及副总裁们的见面,他们为今年的经济预判与企业发展焦虑而来。在聊天过程中,我发现今年的聊天有个很有意思的“点”,挺多人尤其关心我到底是怎么成长成现在的多领域风格的,还能掌握一些经济趋势的分析能力,到底学过哪些专业、在企业管过哪些具体事情?单单就这个一个月内,我就重复了数次“为什么”,再辅以我上次写的:《
    牛言喵语 2025-01-22 17:10 66浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦