Linux的引导过程是一个用来初始化系统的程序。它包含了在打开电源键之后直到用户界面可操作之前的一切。
一旦你开始使用Linux,你会发现如果你对引导过程中的步骤非常熟悉,将会有助于你解决相关故障以及按需配置你的计算机。
打开电源–>BIOS–>MBR(主引导记录,硬盘的第一个扇区–>引导程序(例如GRUB)–>内核(Linux 系统))–>initramfs映像–>/sbin/init(父进程)–>终端提示符–>X Windows System(图形用户界面)
BIOS - 第一步
开启一台X86平台的Linux系统涉及到很多步骤。当计算机的电源被打开时,基本输入输出系统(BIOS)开始初始化硬件,包括屏幕、键盘,同时测试主存储器。这个过程也被叫做POST(加电自检)。 BIOS软件被存储在主板的一个ROM芯片上。在这之后,剩下的引导过程将完全的被操作系统所控制。
主引导记录(MBR)和引导程序
一旦加电自检完成,系统控制权就由BIOS传递给了引导程序。引导程序通常被存储在系统中的一个硬盘,不是在引导扇区(传统的BIOS/MBR系统)就是在EFI分区(较新的可扩展固件接口或者EFI/UEFI系统)。在这时,机器并不能存取大容量存储器。之后,日期、时间以及最重要的外围设备被从CMOS(基于电池的存储器,允许系统在断电之后继续记录日期和时间)加载到系统。 在Linux中有很多引导程序;最常见的就是GRUB(统一引导程序)和ISOLINUX(从可移动介质上启动)。大多数的Linux 引导程序能提供用户界面来选择选项引导Linux,甚至其他可能安装着的操作系统。当引导Linux时,引导程序负责加载内核映象和初始化RAM磁盘(包含了一些用来启动系统的关键文件和设备驱动)到内存。
活动中的引导程序
引导程序分为两个不同的阶段
第一阶段:
对于使用BIOS/MBR技术的系统,其引导程序位于硬盘的第一个扇区,又被成为主引导扇区(MBR)。MBR的大小仅仅为512字节。在这个阶段,引导程序检查分区表寻找一个可启动的分区。一旦找到,就开始寻找第二阶段的引导程序,例如GRUB,并把它加载到RAM(随机存取存储器)。 当系统使用EFI/UEFI技术时,UEFI固件读取它的启动管理程序来决定哪一个UEFI程序和哪里开始(例如在哪个磁盘或分区可以找到EFI分区)启动。固件随后启动UEFI程序——比如说GRUB——它被定义为固件启动管理程序的入口。这个步骤非常复杂但是它的灵活性远远超过了旧的MBR技术。
第二阶段:
第二阶段的引导程序位于/boot下。一个启动画面会被显示用来让我们选择一个操作系统(OS)启动。在选择完OS之后,引导程序加载被选择的操作系统的内核到内存中并将控制权移交给它。引导程序加载被选择的内核映像(在这里是Linux)并将控制权移交给它。内核基本上都是被压缩的,所以它首先得解压自己。在这之后,它将检查并分析系统硬件并初始化硬件设备驱动到内核中
Linux内核
引导程序同时加载内核和初始化文件系统(initramfs)到内存,以使initramfs可以直接被内核使用。 当内核被加载到RAM中,它将立即初始化和配置计算机内存,同时也配置所有依赖于系统的硬件。包括所有的处理器、I/O子系统、存储设备等等。内核同时也加载一些必须的用户空间应用程序。
RAM的初始化
initramfs包含了用来加载正确的根文件系统所需要的程序和二进制文件,像是为文件系统提供内核函数以及为一个叫做udev(面向USB设备)的被用来确认设备是否存在和定位适合的驱动并加载它们的大容量存储控制器提供设备驱动)。当发现根文件系统后,将会进行错误检测并加载。 mount程序通知操作系统有一个文件系统已经准备好被使用了,并协助它挂载在整个文件系统的最顶层(挂载点)。如果成功了,initramfs将会被从内存清除,然后根文件系统 下的init程序(/sbin/init)将会被执行。 init处理挂载并转到最终的、也是真正的根文件系统下。如果在大容量存储设备可以存取之前需要特殊的硬件驱动,它们必须被包含在initramfs映像中。
一旦内核设置好了所有硬件并被挂载到根文件系统之后将会开始运行/sbin/init程序。这个初始进程将会启动其他进程来让系统开始运行。系统中的绝大多数其他进程归根结底都是来源于init;例外的是内核进程,直接由内核启动来管理操作系统的内部细节。 传统上,(这个进程的启动是使用System V UNIX的数据返回约定来完成的,在系统经过一系列的包括各种开启和关闭服务的脚本时。)???每种运行级别提供不同的系统运行模式。在不同的级别,每个单独的服务都能被运行或者在运行时被关闭。较新的发行版已经开始抛弃the System V 标准了,但为了兼容性的目的还是通常支持the System V约定。 除了启动系统之外,init也负责保持系统运行和完全关闭系统。它表现为所有非内核进程的最终管理者,当需要时会在进程结束之后进行清理。同时在用户登入登出时重启用户登录进程。
字符界面登录
在引导过程结束之前,init启动会一些字符界面的登录提示符(使用一个叫getty的程序)。它能允许你输入用户名和密码,最后转到命令解释器。默认的命令解释器通常是bash(Bourne Shell的后继,叫GNU Bourne Again Shell),但也有许多其他的高级命令解释器。shell输出一个字符提示符,预示它已经准备好接受命令。在用户输入命令并按下回车键之后,命令就会被执行。在命令执行完之后将会显示另一个提示符。 在你学完后面的‘命令行操作’之后,终端将可以使用ALT键作为一个额外的功能键。大多数发行版启动六个终端和用F1和F2启动的图形终端。如果图形终端已经启动了,切换到字符需要按下CRTL-ALT+功能键(F1到F7).如果你处在纯字符模式,你可能需要使用startx命令来启动或重启你的图形桌面。
X Window System
通常,在一个Linux桌面系统中,加载X Window System是引导过程的最后一步。一个被称为显示管理器的服务被提供用来追踪显示过程和加载X server(这样叫是因为它提供应用程序的图形服务,有时也叫做X clients)。这个显示管理器也处理图形化的登陆界面以及在一个用户登录后开启合适的桌面环境。 一个桌面环境包含一个启动和维护图形会话组件的会话管理器、一个控制和摆放窗口、标题栏以及一系列控件的窗口管理器。不过它们都是一同呈现的。通常这些程序、会话管理器和窗口管理器会被作为一个整体同时使用以提供一个无缝的桌面环境。如果显示管理器没有在默认运行级别启动,你可以通过另一种方法启动X,在通过字符界面登录后,从命令行运行 startx 命令。
参考至:https://www.fdzh.org/blog/2015/06/26/linux-boot/
如有错误,欢迎指正
邮箱:czmcj@163.com
相关推荐
util-linux-ng-2.17源码(含fdisk) Here is a list of all documented files with brief descriptions: util-linux-ng-2.17.2/disk-utils/blockdev.c [code] util-linux-ng-2.17.2/disk-utils/cramfs.h [code] ...
Linux-xlnx-xilinx-v2018.3.tar.gz 是一个针对Xilinx FPGA设备的Linux内核源码包,适用于PetaLinux工具的2018.3版本。这个压缩包包含了构建自定义Linux内核和相关固件所需的所有核心文件。Xilinx是一家知名的半导体...
嵌入式Linux的U-boot系统启动过程涉及到许多关键步骤和技术,包括BootLoader的种类与功能、U-boot的特点和操作、ELDK工具的使用以及不同启动方式的实现。下面将详细阐述这些知识点。 1. BootLoader启动方式: ...
4. **启动安装过程**:引导机器从安装介质启动,进入Oracle Linux安装界面。 5. **配置分区**:根据需求选择合适的磁盘分区方案,可以手动分区或者选择自动分区。 6. **设置系统参数**:输入主机名、网络信息、...
首先,我们需要下载EasyDarwin的Linux版本压缩包“EasyDarwin-linux-8.1.0-1901141151.tar.gz”。这个文件包含了完整的EasyDarwin服务器软件及其相关的配置文件。同时,压缩包中还附带了一个名为“说明.txt”的文档...
关于Linux系统的启动过程分享一下,内容是关于Linux的
ARM Linux交叉编译工具链,arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
标题中的"arm-linux-gcc-4.4.3.tar.gz"是一个针对ARM架构的Linux GCC交叉编译器的压缩包,版本为4.4.3。这个文件通常用于在非ARM设备(如Ubuntu系统)上构建能在ARM处理器上运行的Linux应用程序。下面将详细介绍...
- **链接器脚本**:在构建过程中,链接器脚本(如ld script)可以帮助控制链接过程,确保正确地定位和加载内存映像,这对于嵌入式系统的启动和运行至关重要。 - **库的选择与优化**:根据应用需求选择合适的库,并...
ARM-Linux-GCC-4.5.1是友善之臂提供的一个特定版本的交叉编译器,主要用于在非ARM架构的主机上构建针对ARM架构的Linux应用程序。交叉编译器是一种特殊的编译器,能够在一种处理器平台上生成适用于另一种处理器平台的...
引导启动过程是计算机启动时加载操作系统的步骤,而Linux引导修复主要针对由于各种原因导致的启动问题,如误操作、系统更新或硬盘故障等。Boot Repair是一款实用工具,专为Linux用户设计,用于解决与GRUB(GRand ...
在实际开发过程中,开发人员需要将"arm-linux-gcc-2.95.3"安装到主机系统上,设置环境变量以指向这个交叉编译工具链,然后就可以使用它来编译uboot或其他针对ARM-Linux的项目。例如,他们可能需要编译uboot的源代码...
### Linux启动过程综述 #### 一、引言 Linux是一种开源的操作系统,以其高度的稳定性和安全性在服务器领域有着广泛的应用。对于深入理解Linux系统的行为及其管理来说,掌握Linux的启动过程至关重要。本文旨在详细...
arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2
本文将围绕“arm-linux-gcc-4.4.3”这一交叉编译器展开,介绍其功能、安装过程以及使用方法,帮助开发者更好地理解和运用这一关键工具。 1. **交叉编译概念** 交叉编译是指在一个平台上生成另一个平台上的可执行...
在Bochs启动后,你需要按照Linux-0.11的引导提示进行操作,可能包括选择语言、分区硬盘、格式化文件系统等步骤。最后,Linux-0.11应该会在Bochs的模拟环境中成功启动。 通过这种方式,你不仅可以体验早期Linux的...
qt-creator-linux-x86-opensource-1.3.0
android-ndk-r12b\toolchains下的编译平台 android-ndk-r12b\toolchains\mips64el-linux-android-4.9 android-ndk-r12b\toolchains\mipsel-linux-android-4.9
Linux 2.6内核作为一款广泛使用的开源操作系统内核,其启动过程涉及多个步骤,包括编译、链接、压缩等,这些步骤确保了内核能够高效地引导系统并运行用户程序。 #### 二、内核构建 构建内核通常需要经历以下几个...
解压后的Linux 2.6.9源代码被放置在`linux-2.6.9/`目录下。该目录包含了各种子目录,每个子目录对应着不同的功能模块,例如: - `arch/`: 存放与特定硬件架构相关的代码; - `fs/`: 文件系统相关的代码; - `drivers...