树莓派Linux启动过程简介

昨天我在写一篇关于linux setup脚本引导的文章时,有一个问题是关于引导时如何确认运行级别,然后遍历/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进程,空闲进程,是系统初始化时内核自己从头创建的。通过调用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?、登录shell

默认的shell是bash,命令行界面,它允许用户直接与操作系统对话。读环境变量,请参考作者的文章——Linux环境变量设置。