linux启动流程(Linux怎么学)
Linux启动流程 梳理| 思维导图 | 流程图 | 值得收藏
Linux启动流程梳理
启动流程分为三个阶段:上电、BIOS启动、Linux启动
上电阶段:
- 1M空间映射给 ROM
- BIOS进行初始化,包括硬件初始化、自检、加载 UEFI固件驱动程序等
-选择启动介质,加载 UEFI应用程序,如引导加载程序(Bootloader)
BIOS启动阶段:
- UEFI固件初始化硬件,识别可启动设备,如硬盘、光盘、USB设备
-加载 UEFI固件驱动程序,与硬件设备交互
-加载位于启动介质上的 UEFI应用程序,如引导加载程序(Bootloader)
Linux启动阶段:
- MBR(Master Boot Record)存放于硬盘第一个扇区
-包含主引导记录和分区表,主引导记录用于安装启动引导程序,分区表记录硬盘分区状态
-找到 MBR后,执行主分区或逻辑分区中的引导加载程序,控制权交给 VBR或 EBRA的引导加载程序
引导加载程序 GRUB介绍:
- GNU GRUB是多操作系统启动程序,允许选择运行不同内核
-生成配置文件:grub2-mkconfig-o/boot/grub2/grub.cfg
-安装:grub2-install/dev/sda
- boot.img从硬盘加载到内存,执行 core.img,包含解压缩程序、内核、模块映像
Linux启动-0/1号进程:
- init_task是系统第一个进程,没有通过 fork或 kernel_thread产生
-进行中断初始化、内存初始化、调度策略初始化、基于内存文件系统rootfs初始化
-创建第二个进程,1号进程,对于操作系统具有“划时代”的意义
Linux启动-ramdisk:
- init程序在文件系统上运行,需要驱动才能访问存储设备
-使用 ramdisk作为根文件系统,运行/init启动文件系统上的 init
Linux启动-init介绍:
- init进程运行在用户态,尝试运行 ramdisk的“/init”或文件系统上的“/sbin/init”等
- init类型随 Linux版本不同,配置文件也有所不同
Linux启动-运行级别、fstab:
-每次重启,硬盘一般被自动挂载,自动挂载信息记录在/etc/fstab文件中
-系统读取/etc/fstab自动挂载设备和分区,第一列设备文件或UUID或label,第二列挂载点,第三列文件系统格式,第四列文件系统参数,第五列dump备份设置,第六列磁盘检查设置
Linux启动-用户登录:
-用户登录方式有命令行登录、ssh登录、图形登录
- Linux允许多人同时在线工作,登录需输入用户名和密码验证身份
Linux启动-用户切换:
-预设六个命令窗口终端机,通过Ctrl+ Alt+ F1~ F6切换窗口
嵌入式linux系统的启动流程是什么样的
1)
初始化
RAM
因为
Linux
内核一般都会在
RAM
中运行,所以在调用
Linux
内核之前
Bootloader
必须设置和初始化
RAM,为调用
Linux内核
做好准备。初始化
RAM
的任务包括设置
CPU
的控制寄存器参数,以便能正常使用
RAM
以及检测RAM
大小等。
2)
初始化串口端口
在
Linux
的启动过程中有着非常重要的作用,它是
Linux内核和用户交互的方式之一。Linux
在启动过程中可以将信息通过串口输出,这样便可清楚的了解
Linux
的启动过程。虽然它并不是
Bootloader
必须要完成的工作,但是通过串口输出信息是调试
Bootloader
和Linux
内核的强有力的工具,所以一般的
Bootloader
都会在执行过程中初始化一个串口作为调试端口。
3)
检测
处理器类型
Bootloader在调用
Linux内核前必须检测系统的处理器类型,并将其保存到某个常量中提供给
Linux
内核。Linux
内核在启动过程中会根据该处理器类型调用相应的初始化程序。
4)
设置
Linux启动参数
Bootloader在执行过程中必须设置和初始化
Linux
的内核启动参数。
5)
调用
Linux内核映像
Bootloader完成的最后一项工作便是调用
Linux内核。如果
Linux
内核存放在
Flash
中,并且可直接在上面运行(这里的
Flash
指
Nor
Flash),那么可直接跳转到内核中去执行。但由于在
Flash
中执行代码会有种种限制,而且速度也远不及
RAM
快,所以一般的
嵌入式系统
都是将
Linux内核拷贝到
RAM
中,然后跳转到
RAM
中去执行。
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了我一顿而已。