JavaScript is required to for searching.
跳过导航链接
退出打印视图
编写设备驱动程序     Oracle Solaris 10 1/13 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

第 1 部分针对 Oracle Solaris 平台设计设备驱动程序

1.  Oracle Solaris 设备驱动程序概述

2.  Oracle Solaris 内核和设备树

3.  多线程

4.  属性

5.  管理事件和排队任务

6.  驱动程序自动配置

7.  设备访问:程控 I/O

8.  中断处理程序

9.  直接内存访问 (Direct Memory Access, DMA)

10.  映射设备和内核内存

11.  设备上下文管理

12.  电源管理

13.  强化 Oracle Solaris 驱动程序

14.  分层驱动程序接口 (Layered Driver Interface, LDI)

第 2 部分设计特定种类的设备驱动程序

15.  字符设备驱动程序

16.  块设备驱动程序

17.  SCSI 目标驱动程序

18.  SCSI 主机总线适配器驱动程序

19.  网络设备驱动程序

20.  USB 驱动程序

21.  SR-IOV 驱动程序

第 3 部分生成设备驱动程序

22.  编译、装入、打包和测试驱动程序

23.  调试、测试和调优设备驱动程序

24.  推荐的编码方法

第 4 部分附录

A.  硬件概述

B.  Solaris DDI/DKI 服务汇总

C.  使设备驱动程序支持 64 位

64 位驱动程序设计简介

常规转换步骤

使用硬件寄存器的固定宽度类型

使用固定宽度的公共访问函数

检查并扩展派生类型的用法

检查 DDI 数据结构中更改的字段

buf 结构更改

ddi_dma_attr

ddi_dma_cookie 结构更改

csi_arq_status 结构更改

scsi_pkt 结构更改

检查 DDI 函数中更改的参数

getrbuf() 参数更改

drv_getparm() 参数更改

delay() 和 timeout() 参数更改

rmallocmap() 和 rmallocmap_wait() 参数更改

scsi_alloc_consistent_buf() 参数更改

uiomove() 参数更改

cv_timedwait() 和 cv_timedwait_sig() 参数更改

ddi_device_copy() 参数更改

ddi_device_zero() 参数更改

ddi_dma_mem_alloc() 参数更改

修改处理数据共享的例程

ioctl() 中的数据共享

devmap() 中的数据共享

mmap() 中的数据共享

检查 x86 平台上 64 位 Long 数据类型的结构

已知的 ioctl 接口

设备大小

D.  控制台帧缓存器驱动程序

E.  pci.conf 文件

索引

已知的 ioctl 接口

许多 ioctl(9E) 操作对一类设备驱动程序通用。例如,大多数磁盘驱动程序实现 dkio(7I) 系列的众多 ioctls。这些接口中有许多将数据结构复制到内核中,或从内核中复制出数据结构,在 LP64 数据模型中这些数据结构的一部分已更改了大小。以下部分列出了对于 dkio、fdio(7I)、fbio(7I)、cdio(7I) 和 mtio(7I) 系列的 ioctls,现在需要在 64 位驱动程序 ioctl 例程中显式进行转换的 ioctls。

ioctl 命令
受影响的数据结构
参考
DKIOCGAPART

DKIOCSAPART

dk_map

dk_allmap

DKIOGVTOC

DKIOSVTOC

partition

vtoc

FBIOPUTCMAP

FBIOGETCMAP

fbcmap
FBIOPUTCMAPI

FBIOGETCMAPI

fbcmap_i
FBIOCCURSOR

FBIOSCURSOR

fbcursor
CDROMREADMODE1

CDROMREADMODE2

cdrom_read
CDROMCDDA
cdrom_cdda
CDROMCDXA
cdrom_cdxa
CDROMSUBCODE
cdrom_subcode
FDIOCMD
fd_cmd
FDRAW
fd_raw
MTIOCTOP
mtop
MTIOCGET
mtget
MTIOCGETDRIVETYPE
mtdrivetype_request
USCSICMD
uscsi_cmd

设备大小

nblocks 属性按块设备驱动程序的每一分片导出。此属性包含 512 字节块的数量,设备的每一分片都支持这些块。nblocks 属性被定义为带符号的 32 位量,这就将分片的最大大小限制为 1 TB。

每个磁盘提供 1 TB 以上存储空间的磁盘设备必须定义 Nblocks 属性,该属性仍应包含设备可支持的 512 字节块的数量。但是,Nblocks 是带符号的 64 位量,它除去了对磁盘空间的任何实际限制。

nblocks 属性现在已过时。所有磁盘设备都应提供 Nblocks 属性。