[翻译] Section 5.1. System Initialization Overview 系统初始化简介

了解网络子系统在何时被初始化是比较重要的。然而,由于这本书只覆盖了初始化网络方面,并没有涉及到通用驱动程序以及Linux service(例如内存管理)的方面。为了理解背景知识,建议阅读 Linux Device Drivers 和 Understanding the Linux Kernel,均出版自 O’Reilly.

Figure 5-1展示了内核启动过程中内核子系统的初始化次序(init/main.c)

Figure 5-1 内核初始化

在内核启动时,c程序入口首先进入start_kernel程序,该进程会执行一系列的子系统初始化的工作。在start_kernel进入idle之前会创建init内核线程,负责剩余的初始化操作。本章大部分的初始化工作在do_basic_set_up函数中实现。

在大量的初始化任务中,我们感兴趣的是:

1、Boot-time option

启动时间内核参数,在调用parse_args函数时传递给内核参数。“Boot-time Kernel option”一节中会详细介绍。

2、中断和计时器初始化

通过调用 init_IRQ init_timers softirq_init 对硬件中断及软中断进行初始化。第九章会详细介绍,本章会介绍设备驱动程序如何向IRQ注册处理程序以及IRQ处理程序如何操作memory。计时器也会提前初始化,因为后面的任务会用到。

3、routines初始化

内核子系统和built-in设备驱动初始化将会在do_initcalls中执行。free_init_mem会释放掉不需要模块的code的内存。这些都是通过routines标签进行实现。第七章会详细介绍

run_init_process系统中第一个运行的进程,pid为1,是其他所有进程的父进程,并且会一直运行到Linux系统退出。

init可以通过选项指定程序,如果没有特殊指定,会往特定位置寻找,找不到会引起系统错误。

猜你喜欢

转载自blog.csdn.net/qq_28351465/article/details/81946624
今日推荐