编写设备驱动程序

已知的 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

dkio(7I)

DKIOGVTOC

DKIOSVTOC

partition

vtoc

dkio(7I)

FBIOPUTCMAP

FBIOGETCMAP

fbcmap

fbio(7I)

FBIOPUTCMAPI

FBIOGETCMAPI

fbcmap_i

fbio(7I)

FBIOCCURSOR

FBIOSCURSOR

fbcursor

fbio(7I)

CDROMREADMODE1

CDROMREADMODE2

cdrom_read

cdio(7I)

CDROMCDDA

cdrom_cdda

cdio(7I)

CDROMCDXA

cdrom_cdxa

cdio(7I)

CDROMSUBCODE

cdrom_subcode

cdio(7I)

FDIOCMD

fd_cmd

fdio(7I)

FDRAW

fd_raw

fdio(7I)

MTIOCTOP

mtop

mtio(7I)

MTIOCGET

mtget

mtio(7I)

MTIOCGETDRIVETYPE

mtdrivetype_request

mtio(7I)

USCSICMD

uscsi_cmd

scsi_free_consistent_buf(9F)

设备大小

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

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

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