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

退出打印视图

更新时间: 2014 年 9 月
 
 

GLDv2 网络设备驱动程序框架

GLDv2 是多线程、可克隆、可装入的核心模块,为局域网的设备驱动程序提供支持。Oracle Solaris OS 中的局域网 (Local Area Network, LAN) 设备驱动程序是基于 STREAMS 的驱动程序,使用数据链路提供者接口 (Data Link Provider Interface, DLPI) 与网络协议栈进行通信。这些协议栈使用网络驱动程序在 LAN 中发送和接收包。GLDv2 实现了 Oracle Solaris LAN 驱动程序的很多 STREAMS 和 DLPI 功能。GLDv2 提供可供许多网络驱动程序共享的通用代码。使用 GLDv2 可减少重复的代码,简化您的网络驱动程序。

有关 GLDv2 的更多信息,请参见 gld(7D) 手册页。

Part II, Kernel Interface, in STREAMS Programming Guide 中介绍了 STREAMS 驱动程序。具体请参见 STREAMS 指南中的第 9 章“STREAMS 驱动程序”。STREAMS 框架是基于消息的框架。STREAMS 驱动程序特有的接口包括 STREAMS 消息队列处理入口点。

DLPI 指定 OSI 参考模型数据链路层的数据链路服务 (Data Link Service, DLS) 的接口。DLPI 使 DLS 用户能够访问和使用多种符合规定的 DLS 提供者,而无需专门确认提供者的协议。DLPI 以 M_PROTO 和 M_PCPROTO 类型的 STREAMS 消息的形式指定对 DLS 提供者的访问。DLPI 模块使用 STREAMS ioctl 调用链接至 MAC 子层。有关 DLPI 协议的更多信息,包括特定于 Oracle Solaris 的 DPLI 扩展,请参见 dlpi(7P) 手册页。有关 DLPI 的一般信息,请参见以下位置的 DLPI 标准:http://www.opengroup.org/pubs/catalog/c811.htm

    使用 GLDv2 实现的 Oracle Solaris 网络驱动程序有两个独立的部分:

  • 通用组件。处理 STREAMS 和 DLPI 接口。

  • 特定于设备的组件。处理特定硬件设备。

    • 通过链接 misc/gld 中的依赖性指明驱动程序对于 GLDv2 模块的依赖性。在 SPARC 系统的 /kernel/misc/sparcv9/gld、64 位 x86 系统的 /kernel/misc/amd64/gld 和 32 位 x86 系统的 /kernel/misc/gld 中可以找到 GLDv2 模块。

    • 注册 GLDv2:驱动程序在 attach(9E) 入口点中为 GLDv2 提供指向其他入口点的指针。GLDv2 使用这些指针进入 gld(9E) 入口点。

    • 调用 gld(9F) 函数来处理数据或使用某些其他 GLDv2 服务。gld_mac_info(9S) 结构是 GLDv2 与特定于设备的驱动程序之间的主数据接口。

GLDv2 驱动程序必须处理格式完全的 MAC 层包,不能执行逻辑链路控制 (logical link control, LLC) 处理。