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 数据模型中这些数据结构的一部分已更改了大小。以下部分列出了对于 dkiofdio(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 属性。