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

退出打印视图

更新时间: 2014 年 9 月
 
 

设备树组件

系统将会生成树结构,其中包含有关引导时连接到计算机的设备的信息。此外,系统正常运行时也可以动态重新配置设备树。设备树从表示平台的根设备节点开始。

根节点下面是设备树的分支。分支由一个或多个总线结点设备和一个终止叶设备组成。

总线结点设备可为设备树中的从属设备提供总线映射和转换服务。PCI-PCI 网桥、PCMCIA 适配器和 SCSI HBA 都是结点设备的示例。编写结点设备驱动程序的讨论仅限于 SCSI HBA 驱动程序的开发(请参见Chapter 18, SCSI Host Bus Adapter Drivers)。

叶设备通常为外围设备,如磁盘、磁带、网络适配器、帧缓存器等。叶设备驱动程序可以导出传统的字符驱动程序接口和块驱动程序接口。通过这些接口,用户进程可在存储设备或通信设备中读取和写入数据。

系统通过以下步骤来生成树:

  1. CPU 经过初始化后搜索固件。

  2. 主要固件(OpenBoot、基本输入/输出系统 (Basic Input/Output System, BIOS) 或 Bootconf)初始化并创建包含已知或自标识硬件的设备树。

  3. 当主要固件在设备中发现兼容固件时,主要固件将初始化该设备并检索设备属性。

  4. 该固件将查找并引导操作系统。

  5. 内核从树的根节点开始,搜索匹配的设备驱动程序并将该驱动程序绑定到设备。

  6. 如果设备是结点,则内核会查找固件尚未检测到的子设备。内核会将所有子设备都添加到树的子树节点下面。

  7. 内核从步骤 5 开始重复该过程,直到无需再创建设备节点。

每个驱动程序都会导出设备操作结构 dev_ops(9S),以定义设备驱动程序可以执行的操作。设备操作结构包含通用操作(如 attach(9E)detach(9E)getinfo(9E))的函数指针。该结构同时还包含了一组与特定总线结点驱动程序操作相关的函数指针,以及一组与特定叶结点设备驱动程序操作相关的函数指针。

树结构将在节点之间创建父子关系。此父子关系是体系结构无关性的关键。当叶驱动程序或总线结点驱动程序本质上需要依赖于体系结构的服务时,该驱动程序会请求其父级提供该服务。采用此方法,不管计算机或处理器的体系结构是什么,驱动程序都可以正常运行。下图显示了典型的设备树。

图 2-2  示例设备树

image:图中显示了典型的设备树中的叶和节点。

子树节点可以有一个或多个子节点。叶节点表示各个设备。