Linux启动流程详解:从Bootloader到Kernel

需积分: 3 0 下载量 27 浏览量 更新于2024-09-18 收藏 14KB TXT 举报
"Linux启动过程综述" Linux操作系统启动是一个复杂的过程,涉及到多个阶段和组件。以下是Linux启动过程的详细概述: 1. Bootloader(引导加载器) Bootloader是启动过程的第一步,它的任务是加载Linux内核到内存中。对于不同的硬件平台,Bootloader的选择会有所不同。在Alpha/AXP架构上,通常使用MILO作为Bootloader,而i386平台则常使用LILO或GRUB。Bootloader可以识别并加载多种文件系统,如ext2和iso9660,并且在固件如ARCSRM下运行。对于不支持直接从硬盘启动的系统,Bootloader还需要通过网络(如通过BOOTP协议)来获取内核。 2. Kernel(内核) Bootloader加载内核后,内核开始初始化。在Alpha平台上,内核加载的起点是head.S,它设置操作系统的栈指针(OSFP),然后调用main.c中的start_kernel()函数。start_kernel()负责进一步的初始化工作,包括pal_init()和openboot(),它们处理硬件设备的初始化和内核的加载。内核被加载到内存的START_ADDR位置,通常是0x100000。 3. 初始化进程(init进程) 内核初始化完成后,它会启动第一个用户空间进程,即init。init根据/etc/inittab配置文件定义的行为来决定系统的行为,比如启动多级运行级别。在早期的Redhat6.0 Linux 2.2.19 for Alpha/AXP中,init可能执行一系列rc脚本,这些脚本会启动系统服务和守护进程。 4. 用户登录 随着init进程的执行,getty进程会被启动,提供终端登录服务。getty会在控制台上创建一个登录会话,等待用户输入用户名和密码。一旦验证成功,就会启动bash shell,让用户交互地使用操作系统。 5. X Window System(XDM服务) 如果系统配置了图形化桌面环境,如X Window System,XDM(X Display Manager)会被启动,提供图形化的登录界面。用户可以通过XDM选择不同的桌面环境,如Gnome或KDE。 不同平台的Bootloader有不同的实现方式,例如在i386平台上,BIOS会从磁盘的0x7c00地址开始加载bootsect.S,该段代码会将控制权传递给setup.S,然后setup.S会将内核加载到0x90000地址。对于压缩的内核(如bzImage),Bootloader需要解压内核,并将其放置在0x100000处以便执行。 Linux启动过程是一个涉及硬件初始化、内核加载、系统服务启动和服务管理的复杂流程,每个步骤都至关重要,确保了操作系统能够正确、高效地运行。