编写适用于 Oracle® Solaris 11.2 的设备驱动程序

退出打印视图

更新时间: 2014 年 9 月
 
 

什么是内核?

Oracle Solaris 内核是用于管理系统资源的程序。内核将应用程序与系统硬件隔离,并为它们提供基本系统服务,如输入/输出 (input/output, I/O) 管理、虚拟内存和调度。内核由需要时动态装入内存的对象模块组成。

Oracle Solaris 内核在逻辑上可分为两个部分:第一部分称为内核,用于管理文件系统、调度和虚拟内存。第二部分称为 I/O 子系统,用于管理物理组件。

内核提供了一组接口,供可通过系统调用访问的应用程序使用。"Reference Manual Collection" 的第 2 部分对系统调用进行了介绍(请参见 Intro(2))。某些系统调用用于调用设备驱动程序以执行 I/O 操作。设备驱动程序是可装入的内核模块,用于管理数据传输,同时将内核的其余部分与设备硬件隔离。为了与操作系统兼容,设备驱动程序需要能够提供多线程、虚拟内存寻址以及 32 位和 64 位操作之类的功能。

下图解释了内核的工作机制。内核模块用于处理来自应用程序的系统调用。I/O 模块用于与硬件通信。

图 2-1  Oracle Solaris 内核

image:图中显示了用户级应用程序对特定内核级模块的调用,以及驱动程序与设备其他模块之间的调用。

内核通过以下功能提供对设备驱动程序的访问:

  • 设备至驱动程序映射。内核将维护设备树。树中的每个节点都表示一个虚拟设备或物理设备。内核通过将设备节点名称与系统中安装的驱动程序集进行匹配,从而将每个节点绑定到驱动程序。仅当存在驱动程序绑定时,应用程序才能访问设备。

  • DDI/DKI 接口。DDI/DKI(Device Driver Interface/Driver-Kernel Interface,设备驱动程序接口/驱动程序内核接口)接口可对驱动程序和内核、设备硬件以及引导/配置软件之间的交互进行标准化。这些接口使驱动程序独立于内核,并且改进了驱动程序在相同体系架构下不同操作系统发行版间的可移植性。

  • LDI。LDI(Layered Driver Interface,分层驱动程序接口)是 DDI/DKI 的扩展。LDI 允许内核模块访问系统中的其他设备。LDI 还允许确定内核当前使用的设备。请参见Chapter 14, Layered Driver Interface (LDI)