启动过程详解-揭秘系统从开机到登录的奥秘-Linux (stm32启动过程详解)
计算机启动是一个复杂的过程,涉及多个步骤。以下是计算机启动的详细步骤:
步骤 1:加载 BIOS/UEFI 固件
- 当我们打开电源时,BIOS(基本输入/输出系统)或 UEFI(统一可扩展固件接口)固件会从非易失性存储器(例如 CMOS)中加载。
- BIOS/UEFI 固件执行 POST(开机自检),以验证系统的硬件组件是否正常工作。
步骤 2:检测硬件
- BIOS/UEFI 检测并初始化连接到系统的设备,包括 CPU、RAM、存储和外围设备。
- 此过程称为硬件枚举,它确定每个设备的类型、功能和资源分配。
步骤 3:选择启动设备
- BIOS/UEFI 等待用户选择要从中启动操作系统的启动设备。
- 启动设备可以是硬盘驱动器、网络服务器、CDROM 或其他存储设备。
- 用户可以在 BIOS/UEFI 设置中配置启动顺序。
步骤 4:运行引导加载程序
- BIOS/UEFI 将控制权移交给引导加载程序,通常是 GRUB(GNU GRUB)。
- GRUB 提供了一个菜单,允许用户选择要启动的操作系统或内核。
步骤 5:加载内核
- 用户选择后,GRUB 将加载选定的内核到内存中。
- 内核是操作系统的核心组件,它负责管理硬件资源和进程。
步骤 6:初始化用户空间
- 当内核初始化完毕后,它将创建一个用户空间进程,通常是 systemd。
- systemd 负责启动和管理用户空间进程和服务。
步骤 7:探测剩余硬件和挂载文件系统
- systemd 探测剩余的硬件组件,例如图形卡和网络适配器。
- 它还挂载文件系统,使操作系统可以访问存储在硬盘上的数据。
步骤 8:启动桌面环境
- systemd 启动桌面环境,例如 GNOME 或 KDE。
- 桌面环境提供了一个图形用户界面,允许用户与计算机交互。
步骤 9:显示登录窗口
- 加载桌面环境后,系统会显示一个登录窗口。
- 用户在登录窗口中输入他们的用户名和密码。
步骤 10:登录并完成启动
- 用户成功登录后,系统完成启动过程。
- 用户现在可以开始使用计算机。
值得注意的是,计算机启动过程可能因系统而异,但一般步骤保持不变。
linux启动的过程有哪些?
总结一下,linux的开机整个流程。 · 1: 启动电源后,主机第一步先做的就是查询BIOS(全称:basic input/output system 基本输入输出系统)信息。 了解整个系统的硬件状态,如CPU,内存,显卡,网卡等。 嗯,这一步windows算和它是一家。 不分彼此。 · 2: 接下来,就是主机读取MBR(硬盘的第一个扇区)里的boot loader了。 这个可是重点哦,据说troubleshooting里就会考这点,给个坏了的loader,叫你修正。 windows不支持linux的分区格式。 所以,用windows的boot。 ini是查不到linux的系统的。 一般我装系统都是先装windows再装linux,然后用grub来做boot loader。 两个字:省心!因为linux不像windows那么小气。 grub可是支持windows分区格式的哦。 · 3: 接上一步,主机读取boot loader后,会读取里面的信息,知道谁跟谁是待在哪,假如主机想进入linux系统,读取到linux核心是在/boot文件目录中后,将此核心加载到内存中。 开始了接下来的分析启动之旅。 · 4: OK,第一个运行程序是谁?就是/sbin/init程序。 不信,就用top程序看下,是不是PID为1的就是这个东东,它,可是万物之祖啊,我简称它是女娲娘娘(不喜欢亚当夏娃)。 · 5: init首先查找启动等级(run-level)。 因为启动等级不同,其运行脚本(也就是服务)会不同。 默认的等级有以下几项:0 - halt (系统直接关机)1 - single user mode (单人模式,用于系统维护时使用)2 - Multi-user, without NFS (类似3模式,不过少了NFS服务)3 - Full multi-user mode (完整模式,不过,是文本模式)4 - unused (系统保留功能)5 - X11 (与3模式类似,不过,是X终端显示)6 - reboot (重新开机)(不要选择0或4,6 否则,进步了系统的)· 6: OK。 系统知道自己的启动等级后,接下来,不是去启动服务,而是,先设置好主机运行环境。 读取的文件是/etc/rc。 d/rc。 sysinit文件。 那究竟要设置哪些环境呢?· 设置网络环境/etc/sysconfig/network,如主机名,网关,IP,DNS等。 · 挂载/proc。 此文件是个特殊文件,大小为0,因为它是在内存当中。 里面东东最好别删。 · 根据内核在开机时的结果/proc/sys/kernel/modprobe。 开始进行周边设备的侦测。 · 载入用户自定义的模块/etc/sysconfig/modules/*。 modules· 读取/etc/sysctl。 conf文件对内核进行设定。 · 设定时间,终端字体,硬盘LVM或RAID功能,以fsck进行磁盘检测。 · 将开机状况记录到/var/log/dmesg中。 (可以用命令dmesg查看结果)· 7: OK,接下来,就是启动系统服务了,不同的run-level会有不同的服务启动。 到/etc/rc。 d目录中,不同的level会有不同的目录。 如启动3模式,会有个rc3。 d目录,里面就保存着服务。 其中,S(start)开头的表明开机启动,K(kill)开头的表明开机不启动。 数字表示启动顺序。 数字越小,启动越早。 注意,他们都是连接到etc/rc。 d/init。 d/目录中的相关文件。 所以,想手工启动某一服务,可以用/etc/rc。 d/init。 d/某个服务 start启动哦。 相反,我们也可以把某个服务ln(链接命令)到不同run-level的目录中。 记得打上S或者K+数字哦。 · 8: 读取服务后,主机会读取/etc/rc。 d/rc。 local文件。 所以,如果需要什么开机启动的话,可以写个脚本或命令到这里面来。 就不用像上面那么麻烦。 以后删除也方便。 OK,经过一番长途跋涉后,系统终于可以安心的开启shell了。 把控制权交到我们手上了。 我们可以为所欲为了。 最好,养成好习惯,平时不要用root用户登陆。 上次我就一不小心错输了poweroff。 那可是网关服务器啊。 全公司人都上不了网啊。 还好跟他们已经热乎了。 只是狂K了我一顿而已。
树莓派Linux启动过程简介
昨天在写关于linux设置脚本开机启动的文章时,有个疑问就是开机时怎么确认运行级别,然后遍历执行/etc/rcN.d/目录下的所有服务程序。 带着疑问, 在前人的基础上 学习总结一下linux系统初始化的工作的内容,现在树莓派4B上展示出来。 1、加载内核 当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。 操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。 树莓派4B的内核是Raspbian GNU/Linux 10 (buster),基于Debian。 2、初始化进程init 内核文件加载以后,运行第一个程序init,它的作用是初始化系统环境。 init位于目录/sbin,进程号PID为1,即1号进程,其他所有进程都由init衍生,是init的子进程。 同时还有个0号进程,idle进程,在系统初始化时由内核kernel自身从无到有创建,通过调用kernel_thread创建一个内核线程去执行init函数,0号进程创建1号进程。 3、运行级别 具体介绍请参考笔者的文章-Linux运行级别简介 ,但是开机时是怎么确定运行级别的呢? init进程首先读取文件 /etc/inittab,它是运行级别的设置文件。 但是各个发行版不太一样,init的配置文件也不一样,有可能使用/etc/event.d里面的配置文件,最新版的改用为/etc/init目录。 4、开机启动程序 具体详情请参考文章-linux中/etc/init.d设置开机启动 ,确定运行级别后,执行rcN.d目录下的文件,这些链接文件是连接到init.d目录下的程序。 init进程逐一加载开机启动程序,其实就是运行这个目录里的启动脚本。 比如运行级别为5(图形化多用户)时启动的程序:5、用户登录 开机启动程序加载完毕以后用户登录。 用户的登录方式有三种:命令行登录:init进程调用getty程序。 ssh登录:init进程调用sshd程序。 图形界面登录:init进程调用显示管理器,Gnome图形界面对应的显示管理器为gdm。 6、login shell 默认shell时bash,命令行界面,让用户可以直接与操作系统对话。 读取环境变量,具体请参考笔者文章-Linux环境变量的设置。
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。