Linux-- 开机启动过程

    技术2025-11-12  10

    Linux开机启动过程如下:

     

    1. 加载BIOS:

        启动计算机后,计算机会首先加载BIOS(Basic input output system)信息,BIOS信息中包含中CPU、内存、硬盘、显卡、网卡、设备启动顺序等。加载BIOS后,将系统的控制权交给硬盘的第一扇区。

     

    2. 读取MBR:

        硬盘上第零磁道第一个扇区即为MBR(Master Boot Record)——主引导记录,是一个存放了预启动信息、分区表的512字节的空间。其中第一部分为引导区(Pre-boot),占446个字节;第二部分为分区表(Partition Table),占66个字节,记录着硬盘的分区信息。系统找到MBR后,会将其复制到0*7c00地址所在的物理内存,被复制的内容就是Boot Loader。

     

    3. 运行Boot Loader:

        Boot Loader是操作系统内核运行之前运行的一小段程序。通过这段程序,初始化硬件设备、建立内存空间的映射图等,为最终调用操作系统内核做好准备。

     

    4. 加载内核:

        系统根据设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作后将内核放置在内存之中,并调用start_kenrel()函数来启动一系列初始化函数来进程各种初始化。

        start_kenrel()函数中主要操作有:

        (1) 在屏幕上打印出当前的内核版本信息。

        (2) 执行setup_arch(),对系统结构进行设置。

        (3) 执行sched_init(),对系统的调试机制进行初始化。

        (4) 执行parse_early_param()和parsees_args(),解析系统启动参数。

        (5) 执行trap_init(),设置系统中断向量表,初始化系统调用向量。

              执行cpu_init(),完善对CPU的初始化,用于支持进度调试机制。

        (6) 执行rcu_init(),初始化系统中的read_copy Update互斥机制。

        (7) 执行init_IRQ(),初始化用于外设的中断,完成对IDT的最终初始化过程。

        (8) 执行init_timers(),初始化定时器机制。

              执行softirq_init(),初始化软中断机制。

              执行time_init(),初始化系统日期和时间。

        (9) 执行mem_init(),完成对物理内存管理机制的创建。

        (10) 执行kmem_cache_init(),对通用slab缓冲区管理机制的初始化。

        (11) 执行fork_init(),计算出当前系统的物理内存容量能够允许创建的进程数。

        (12) 执行proc_caches_init()、bufer_init()、unnamed_dev_init()、vfs_caches_init()、signals_init(),各种管理机制建立起              专用的slab缓冲区队列。

        (13) 执行proc_root_init(),对虚拟文件系统/proc进行初始化。

        (14) 执行kenrel_thread(),创建出第一个系统内核线程,该线程执行的是内核中的init()函数,负责的是下一阶段的启动任务。

        最后,执行cpues_idle()函数,进入了系统主循环体。

     

    5. 根据/etc/inittab文件来设定运行等级:

        内核加载后,首先会读取/etc/inittab文件,并依据此文件来进行初始化工作。inittab文件主要作用是设定Linux运行的等级,等级如下:

        0——关机

        1——单人模式

        2——无网络支持的多用户模式

        3——有网络支持的多用户模式

        4——系统保留

        5——有网络支持有X-Window支持的多用户模式

        6——重新开机reboot

     

    6. 执行/etc/rc.d/rc.sysinit脚本程序:

        其作用很多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等。

     

    7. 启动内核模块:

        依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。

     

    8. 执行不同运行级别的脚本程序:

        根据运行级别的不同,系统会运行/etc/rc0.d到/etc/rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。

     

    9. 执行/etc/rc.d/rc.local脚本程序:

        当系统完成一切初始化的工作后,就会执行该脚本,所以用户可以把需要设置和启动的东西放在此处。

     

    10. 执行/bin/login程序,进入登录状态:

        系统进入到等待用户输入"用户名"和"密码"。

    最新回复(0)