5.2. SYSINIT操作
上一页 | 第 5 章 SYSINIT框架 | 下一页

## 5.2. SYSINIT操作

SYSINIT要依靠链接器获取遍布整个程序源代码多处申明的静态数据 并把它们组成一个彼此相邻的数据块。这种链接方法被称为 “链接器集合”(linker set)。 SYSINIT使用两个链接器集合以维护两个数据集合， 包含每个数据条目的调用顺序、函数、一个会被提交给该函数的数据指针。

SYSINIT按照两类优先级标识对函数排序以便执行。 第一类优先级的标识是子系统的标识， 给出SYSINIT分别执行子系统的函数的全局顺序， 定义在`<sys/kernel.h>`中的枚举 `sysinit_sub_id`内。第二类优先级标识在子系统中的元素的顺序， 定义在`<sys/kernel.h>`中的枚举 `sysinit_elem_order`内。

有两种时刻需要使用SYSINIT：系统启动或内核模块加载时， 系统析构或内核模块卸载时。内核子系统通常在系统启动时使用SYSINIT 的定义项以初始化数据结构。例如，进程调度子系统使用一个SYSINIT 定义项来初始化运行队列数据结构。设备驱动程序应避免直接使用 `SYSINIT()`，对于总线结构上的物理真实设备应使用 `DRIVER_MODULE()`调用的函数先侦测设备的存在， 如果存在，再进行设备的初始化。这一系统过程中， 会做一些专门针对设备的事情，然后调用`SYSINIT()`本身。 对于非总线结构一部分的虚设备，应改用`DEV_MODULE()`。

上一页 | 上一级 | 下一页
第 5 章 SYSINIT框架 | 起始页 | 5.3. 使用SYSINIT

本文档和其它文档可从这里下载： ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题，请先阅读 文档，如不能解决再联系 <questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.