Linux启动深度剖析:引导、内核与文件系统初始化

需积分: 0 0 下载量 54 浏览量 更新于2024-08-05 收藏 584KB PDF 举报
Linux系统的启动过程可以分为几个关键阶段,从引导过程到文件系统挂载和应用程序执行。本文将着重讨论这三个阶段: **引导过程**: 引导过程首先由bootloader启动,例如U-Boot,其源码可以在提供的GitHub仓库中找到:[my-boot](https://github.com/luowei1995/my-boot.git)。在这个阶段,主要使用汇编语言编写,如`arch/arm/kernel/head.s` 和 `head-common.s`。启动过程包括确认内核架构、识别硬件类型、配置内存管理单元(MMU)、初始化页面表、禁用缓存、设置栈指针等基本操作。接着,内核会调用`start_kernel()`函数,进行进一步的初始化。 **内核启动过程**: 采用C语言编写的内核启动流程主要包括两个阶段。第一阶段着重于硬件和体系结构相关的设置,如CPUID保存、机器类型ID设置,以及调用`start_kernel()`。第二阶段则涉及操作系统核心初始化,如控制台设置、初始化内核服务和进程,其中`init/main.c`中的`start_kernel()`函数承担这一角色。 **文件系统启动过程**: 内核启动时,默认采用`noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0`命令行参数。一旦文件系统挂载,执行的首先是`/linuxrc`链接到的`/bin/busybox`。`busybox`的源码显示,它会执行`/etc/init.d/rcS`,这是第一个初始化脚本。`rcS`脚本(如友善之臂提供的`rootfs_qtopia_qt4/etc/init.d/rcS`)在加载时设置了机器名称为" FriendlyARM"。 接着,脚本会挂载虚拟文件系统`/proc`和`/sys`,并临时在`/dev`目录下挂载一个ramfs,以模拟SDRAM。这对于正确创建设备节点文件至关重要。通过`mdev-s`工具,rcS脚本在`/dev`目录下建立必要的设备节点。此外,rcS还设置内核的hotplug handler为`mdev`,以便在设备插入或移除时自动处理。 Linux系统的启动过程是一个复杂而有序的过程,从低级的硬件引导到高级的文件系统管理和初始化服务,每个阶段都是为了确保系统的稳定运行和功能完备。理解这些步骤有助于深入掌握Linux系统的内部运作机制。