Ioctl Numbers

1999年10月19日

Michael Elizabeth Chastain <mec@shout.net>

如果您要向核心新增新的 ioctl,則應使用 <linux/ioctl.h> 中定義的 _IO 宏。

_IO

一個

沒有引數的ioctl

_IOW

一個

具有寫入引數的ioctl(copy_from_user)

_IOR

一個

具有讀取引數的ioctl(copy_to_user)

_IOWR

一個

同時具有寫入和讀取引數的ioctl。

“寫入”和“讀取”是從使用者的角度來看的,就像系統呼叫“write”和“read”一樣。 例如,SET_FOO ioctl將是_IOW,即使核心實際上是從使用者空間讀取資料; GET_FOO ioctl將是_IOR,即使核心實際上將資料寫入使用者空間。

_IO、_IOW、_IOR或_IOWR的第一個引數是來自下表的標識字母或數字。 由於驅動程式數量眾多,因此許多驅動程式與其他驅動程式共享部分字母。

如果您正在為新裝置編寫驅動程式並且需要一個字母,請選擇一個有足夠擴充套件空間的未使用塊:32到256個ioctl命令應該足夠了。 您可以透過修補此檔案並透過常規補丁提交流程註冊該塊。

_IO、_IOW、_IOR或_IOWR的第二個引數是一個序列號,用於區分彼此的ioctl。 _IOW、_IOR或_IOWR的第三個引數是進入核心或從核心傳出的資料的型別(例如“int”或“struct foo”)。 注意! 請勿使用 sizeof(arg) 作為第三個引數,因為這會導致您的ioctl認為它傳遞的是 size_t 型別的引數。

某些裝置使用其主裝置號作為識別符號; 只要它是唯一的,這就可以。 某些裝置不規則,根本不遵循任何約定。

遵循此約定是好的,因為

  1. 保持ioctl全域性唯一有助於錯誤檢查:如果程式在錯誤的裝置上呼叫ioctl,它將收到一個錯誤,而不是一些意外的行為。

  2. “strace”構建過程會自動找到使用 _IO、_IOW、_IOR 或 _IOWR 定義的 ioctl 號。

  3. 當數字是唯一的時,“strace”可以將數字解碼回有用的名稱。

  4. 當使用此約定定義ioctl號時,尋找ioctl的人可以更容易地grep它們。

  5. 當遵循該約定,驅動程式程式碼可以使用通用程式碼在使用者和核心空間之間複製引數。

此表列出了使用者態可見的 ioctl,不包括 drivers/staging/ 中的。

程式碼

Seq# (十六進位制)

包含檔案

註釋

0x00

00-1F

linux/fs.h

衝突!

0x00

00-1F

scsi/scsi_ioctl.h

衝突!

0x00

00-1F

linux/fb.h

衝突!

0x00

00-1F

linux/wavefront.h

衝突!

0x02

所有

linux/fd.h

0x03

所有

linux/hdreg.h

0x04

D2-DC

linux/umsdos_fs.h

自 2.6.11 以來已失效,但不要重複使用這些。

0x06

所有

linux/lp.h

0x07

9F-D0

linux/vmw_vmci_defs.h, uapi/linux/vm_sockets.h

0x09

所有

linux/raid/md_u.h

0x10

00-0F

drivers/char/s390/vmcp.h

0x10

10-1F

arch/s390/include/uapi/sclp_ctl.h

0x10

20-2F

arch/s390/include/uapi/asm/hypfs.h

0x12

所有

linux/fs.h linux/blkpg.h linux/blkzoned.h linux/blk-crypto.h

BLK* ioctls

0x15

所有

linux/fs.h

FS_IOC_* ioctls

0x1b

所有

InfiniBand 子系統 <http://infiniband.sourceforge.net/>

0x20

所有

drivers/cdrom/cm206.h

0x22

所有

scsi/sg.h

0x3E

00-0F

linux/counter.h

<mailto:linux-iio@vger.kernel.org>

‘!’

00-1F

uapi/linux/seccomp.h

‘#’

00-3F

IEEE 1394 子系統塊,適用於整個子系統

‘$’

00-0F

linux/perf_counter.h, linux/perf_event.h

‘%’

00-0F

include/uapi/linux/stm.h

系統跟蹤模組子系統 <mailto:alexander.shishkin@linux.intel.com>

‘&’

00-07

drivers/firewire/nosy-user.h

‘*’

00-1F

uapi/linux/user_events.h

使用者事件子系統 <mailto:linux-trace-kernel@vger.kernel.org>

‘1’

00-1F

linux/timepps.h

來自 Ulrich Windl 的 PPS 套件 <ftp://ftp.de.kernel.org/pub/linux/daemons/ntp/PPS/>

‘2’

01-04

linux/i2o.h

‘3’

00-0F

drivers/s390/char/raw3270.h

衝突!

‘3’

00-1F

linux/suspend_ioctls.h, kernel/power/user.c

衝突!

‘8’

所有

SNP8023 高階 NIC 卡 <mailto:mcr@solidum.com>

‘;’

64-7F

linux/vfio.h

‘;’

80-FF

linux/iommufd.h

‘=’

00-3f

uapi/linux/ptp_clock.h

<mailto:richardcochran@gmail.com>

‘@’

00-0F

linux/radeonfb.h

衝突!

‘@’

00-0F

drivers/video/aty/aty128fb.c

衝突!

‘A’

00-1F

linux/apm_bios.h

衝突!

‘A’

00-0F

linux/agpgart.h, drivers/char/agp/compat_ioctl.h

衝突!

‘A’

00-7F

sound/asound.h

衝突!

‘B’

00-1F

linux/cciss_ioctl.h

衝突!

‘B’

00-0F

include/linux/pmu.h

衝突!

‘B’

C0-FF

高階 bbus

<mailto:maassen@uni-freiburg.de>

‘B’

00-0F

xen/xenbus_dev.h

衝突!

‘C’

所有

linux/soundcard.h

衝突!

‘C’

01-2F

linux/capi.h

衝突!

‘C’

F0-FF

drivers/net/wan/cosa.h

衝突!

‘D’

所有

arch/s390/include/asm/dasd.h

‘D’

40-5F

drivers/scsi/dpt/dtpi_ioctl.h

自 2022 年起已失效

‘D’

05

drivers/scsi/pmcraid.h

‘E’

所有

linux/input.h

衝突!

‘E’

00-0F

xen/evtchn.h

衝突!

‘F’

所有

linux/fb.h

衝突!

‘F’

01-02

drivers/scsi/pmcraid.h

衝突!

‘F’

20

drivers/video/fsl-diu-fb.h

衝突!

‘F’

20

linux/ivtvfb.h

衝突!

‘F’

20

linux/matroxfb.h

衝突!

‘F’

20

drivers/video/aty/atyfb_base.c

衝突!

‘F’

00-0F

video/da8xx-fb.h

衝突!

‘F’

80-8F

linux/arcfb.h

衝突!

‘F’

DD

video/sstfb.h

衝突!

‘G’

00-3F

drivers/misc/sgi-gru/grulib.h

衝突!

‘G’

00-0F

xen/gntalloc.h, xen/gntdev.h

衝突!

‘H’

00-7F

linux/hiddev.h

衝突!

‘H’

00-0F

linux/hidraw.h

衝突!

‘H’

01

linux/mei.h

衝突!

‘H’

02

linux/mei.h

衝突!

‘H’

03

linux/mei.h

衝突!

‘H’

00-0F

sound/asound.h

衝突!

‘H’

20-40

sound/asound_fm.h

衝突!

‘H’

80-8F

sound/sfnt_info.h

衝突!

‘H’

10-8F

sound/emu10k1.h

衝突!

‘H’

10-1F

sound/sb16_csp.h

衝突!

‘H’

10-1F

sound/hda_hwdep.h

衝突!

‘H’

40-4F

sound/hdspm.h

衝突!

‘H’

40-4F

sound/hdsp.h

衝突!

‘H’

90

sound/usb/usx2y/usb_stream.h

‘H’

00-0F

uapi/misc/habanalabs.h

衝突!

‘H’

A0

uapi/linux/usb/cdc-wdm.h

‘H’

C0-F0

net/bluetooth/hci.h

衝突!

‘H’

C0-DF

net/bluetooth/hidp/hidp.h

衝突!

‘H’

C0-DF

net/bluetooth/cmtp/cmtp.h

衝突!

‘H’

C0-DF

net/bluetooth/bnep/bnep.h

衝突!

‘H’

F1

linux/hid-roccat.h

<mailto:erazor_de@users.sourceforge.net>

‘H’

F8-FA

sound/firewire.h

‘I’

所有

linux/isdn.h

衝突!

‘I’

00-0F

drivers/isdn/divert/isdn_divert.h

衝突!

‘I’

40-4F

linux/mISDNif.h

衝突!

‘K’

所有

linux/kd.h

‘L’

00-1F

linux/loop.h

衝突!

‘L’

10-1F

drivers/scsi/mpt3sas/mpt3sas_ctl.h

衝突!

‘L’

E0-FF

linux/ppdd.h

加密磁碟裝置驅動程式 <http://linux01.gwdg.de/~alatham/ppdd.html>

‘M’

所有

linux/soundcard.h

衝突!

‘M’

01-16 和

mtd/mtd-abi.h drivers/mtd/mtdchar.c

衝突!

‘M’

01-03

drivers/scsi/megaraid/megaraid_sas.h

‘M’

00-0F

drivers/video/fsl-diu-fb.h

衝突!

‘N’

00-1F

drivers/usb/scanner.h

‘N’

40-7F

drivers/block/nvme.c

‘N’

80-8F

uapi/linux/ntsync.h

NT 同步原語 <mailto:wine-devel@winehq.org>

‘O’

00-06

mtd/ubi-user.h

UBI

‘P’

所有

linux/soundcard.h

衝突!

‘P’

60-6F

sound/sscape_ioctl.h

衝突!

‘P’

00-0F

drivers/usb/class/usblp.c

衝突!

‘P’

01-09

drivers/misc/pci_endpoint_test.c

衝突!

‘P’

00-0F

xen/privcmd.h

衝突!

‘P’

00-05

linux/tps6594_pfsm.h

衝突!

‘Q’

所有

linux/soundcard.h

‘R’

00-1F

linux/random.h

衝突!

‘R’

01

linux/rfkill.h

衝突!

‘R’

20-2F

linux/trace_mmap.h

‘R’

C0-DF

net/bluetooth/rfcomm.h

‘R’

E0

uapi/linux/fsl_mc.h

‘S’

所有

linux/cdrom.h

衝突!

‘S’

80-81

scsi/scsi_ioctl.h

衝突!

‘S’

82-FF

scsi/scsi.h

衝突!

‘S’

00-7F

sound/asequencer.h

衝突!

‘T’

所有

linux/soundcard.h

衝突!

‘T’

00-AF

sound/asound.h

衝突!

‘T’

所有

arch/x86/include/asm/ioctls.h

衝突!

‘T’

C0-DF

linux/if_tun.h

衝突!

‘U’

所有

sound/asound.h

衝突!

‘U’

00-CF

linux/uinput.h

衝突!

‘U’

00-EF

linux/usbdevice_fs.h

‘U’

C0-CF

drivers/bluetooth/hci_uart.h

‘V’

所有

linux/vt.h

衝突!

‘V’

所有

linux/videodev2.h

衝突!

‘V’

C0

linux/ivtvfb.h

衝突!

‘V’

C0

linux/ivtv.h

衝突!

‘V’

C0

media/si4713.h

衝突!

‘W’

00-1F

linux/watchdog.h

衝突!

‘W’

00-1F

linux/wanrouter.h

衝突!(3.9之前)

‘W’

00-3F

sound/asound.h

衝突!

‘W’

40-5F

drivers/pci/switch/switchtec.c

‘W’

60-61

linux/watch_queue.h

‘X’

所有

fs/xfs/xfs_fs.h, fs/xfs/linux-2.6/xfs_ioctl32.h, include/linux/falloc.h, linux/fs.h,

衝突!

‘X’

所有

fs/ocfs2/ocfs_fs.h

衝突!

‘X’

01

linux/pktcdvd.h

衝突!

‘Z’

14-15

drivers/message/fusion/mptctl.h

‘[’

00-3F

linux/usb/tmc.h

USB 測試和測量裝置 <mailto:gregkh@linuxfoundation.org>

‘a’

所有

linux/atm*.h, linux/sonet.h

linux 上的 ATM <http://lrcwww.epfl.ch/>

‘a’

00-0F

drivers/crypto/qat/qat_common/adf_cfg_common.h

衝突! qat 驅動程式

‘b’

00-FF

衝突!bit3 vme主機橋 <mailto:natalia@nikhefk.nikhef.nl>

‘b’

00-0F

linux/dma-buf.h

衝突!

‘c’

00-7F

linux/comstats.h

衝突!

‘c’

00-7F

linux/coda.h

衝突!

‘c’

00-1F

linux/chio.h

衝突!

‘c’

80-9F

arch/s390/include/asm/chsc.h

衝突!

‘c’

A0-AF

arch/x86/include/asm/msr.h 衝突!

‘d’

00-FF

linux/char/drm/drm.h

衝突!

‘d’

02-40

pcmcia/ds.h

衝突!

‘d’

F0-FF

linux/digi1.h

‘e’

所有

linux/digi1.h

衝突!

‘f’

00-1F

linux/ext2_fs.h

衝突!

‘f’

00-1F

linux/ext3_fs.h

衝突!

‘f’

00-0F

fs/jfs/jfs_dinode.h

衝突!

‘f’

00-0F

fs/ext4/ext4.h

衝突!

‘f’

00-0F

linux/fs.h

衝突!

‘f’

00-0F

fs/ocfs2/ocfs2_fs.h

衝突!

‘f’

13-27

linux/fscrypt.h

‘f’

81-8F

linux/fsverity.h

‘g’

00-0F

linux/usb/gadgetfs.h

‘g’

20-2F

linux/usb/g_printer.h

‘h’

00-7F

衝突!Charon 檔案系統 <mailto:zapman@interlan.net>

‘h’

00-1F

linux/hpet.h

衝突!

‘h’

80-8F

fs/hfsplus/ioctl.c

‘i’

00-3F

linux/i2o-dev.h

衝突!

‘i’

0B-1F

linux/ipmi.h

衝突!

‘i’

80-8F

linux/i8k.h

‘i’

90-9F

linux/iio/*.h

IIO

‘j’

00-3F

linux/joystick.h

‘k’

00-0F

linux/spi/spidev.h

衝突!

‘k’

00-05

video/kyro.h

衝突!

‘k’

10-17

linux/hsi/hsi_char.h

HSI 字元裝置

‘l’

00-3F

linux/tcfs_fs.h

透明加密檔案系統 <http://web.archive.org/web/%2A/http://mikonos.dia.unisa.it/tcfs>

‘l’

40-7F

linux/udf_fs_i.h

開發中: <https://github.com/pali/udftools>

‘m’

00-09

linux/mmtimer.h

衝突!

‘m’

所有

linux/mtio.h

衝突!

‘m’

所有

linux/soundcard.h

衝突!

‘m’

所有

linux/synclink.h

衝突!

‘m’

00-19

drivers/message/fusion/mptctl.h

衝突!

‘m’

00

drivers/scsi/megaraid/megaraid_ioctl.h

衝突!

‘n’

00-7F

linux/ncp_fs.h 和 fs/ncpfs/ioctl.c

‘n’

80-8F

uapi/linux/nilfs2_api.h

NILFS2

‘n’

E0-FF

linux/matroxfb.h

matroxfb

‘o’

00-1F

fs/ocfs2/ocfs2_fs.h

OCFS2

‘o’

00-03

mtd/ubi-user.h

衝突!(OCFS2 和 UBI 重疊)

‘o’

40-41

mtd/ubi-user.h

UBI

‘o’

01-A1

linux/dvb/*.h

DVB

‘p’

00-0F

linux/phantom.h

衝突!(OpenHaptics 需要這個)

‘p’

00-1F

linux/rtc.h

衝突!

‘p’

40-7F

linux/nvram.h

‘p’

80-9F

linux/ppdev.h

使用者空間 parport <mailto:tim@cyberelk.net>

‘p’

A1-A5

linux/pps.h

LinuxPPS

‘p’

B1-B3

linux/pps_gen.h

LinuxPPS <mailto:giometti@linux.it>

‘q’

00-1F

linux/serio.h

‘q’

80-FF

linux/telephony.h linux/ixjuser.h

Internet PhoneJACK, Internet LineJACK <http://web.archive.org/web/%2A/http://www.quicknet.net>

‘r’

00-1F

linux/msdos_fs.h and fs/fat/dir.c

‘s’

所有

linux/cdk.h

‘t’

00-7F

linux/ppp-ioctl.h

‘t’

80-8F

linux/isdn_ppp.h

‘t’

90-91

linux/toshiba.h

toshiba and toshiba_acpi SMM

‘u’

00-1F

linux/smb_fs.h

gone

‘u’

00-2F

linux/ublk_cmd.h

衝突!

‘u’

20-3F

linux/uvcvideo.h

USB video class host driver (USB影片類主機驅動)

‘u’

40-4f

linux/udmabuf.h

userspace dma-buf misc device (使用者空間dma-buf雜項裝置)

‘v’

00-1F

linux/ext2_fs.h

衝突!

‘v’

00-1F

linux/fs.h

衝突!

‘v’

00-0F

linux/sonypi.h

衝突!

‘v’

00-0F

media/v4l2-subdev.h

衝突!

‘v’

20-27

arch/powerpc/include/uapi/asm/vas-api.h

VAS API

‘v’

C0-FF

linux/meye.h

衝突!

‘w’

所有

CERN SCI driver

‘y’

00-1F

packet based user level communications <mailto:zapman@interlan.net>

‘z’

00-3F

CAN bus card conflict! <mailto:hdstich@connectu.ulm.circular.de>

‘z’

40-7F

CAN bus card conflict! <mailto:oe@port.de>

‘z’

10-4F

drivers/s390/crypto/zcrypt_api.h

衝突!

‘|’

00-7F

linux/media.h

‘|’

80-9F

samples/

Any sample and example drivers (任何示例和演示驅動程式)

0x80

00-1F

linux/fb.h

0x81

00-1F

linux/vduse.h

0x89

00-06

arch/x86/include/asm/sockios.h

0x89

0B-DF

linux/sockios.h

0x89

E0-EF

linux/sockios.h

SIOCPROTOPRIVATE range (SIOCPROTOPRIVATE範圍)

0x89

F0-FF

linux/sockios.h

SIOCDEVPRIVATE range (SIOCDEVPRIVATE範圍)

0x8A

00-1F

linux/eventpoll.h

0x8B

所有

linux/wireless.h

0x8C

00-3F

WiNRADiO driver <http://www.winradio.com.au/>

0x90

00

drivers/cdrom/sbpcd.h

0x92

00-0F

drivers/usb/mon/mon_bin.c

0x93

60-7F

linux/auto_fs.h

0x94

所有

fs/btrfs/ioctl.h and linux/fs.h

Btrfs filesystem some lifted to vfs/generic (Btrfs檔案系統的一些已提升到vfs/generic)

0x97

00-7F

fs/ceph/ioctl.h

Ceph file system (Ceph 檔案系統)

0x99

00-0F

537-Addinboard driver <mailto:buk@buks.ipn.de>

0x9A

00-0F

include/uapi/fwctl/fwctl.h

0xA0

所有

linux/sdp/sdp.h

Industrial Device Project <mailto:kenji@bitgate.com>

0xA1

0

linux/vtpm_proxy.h

TPM Emulator Proxy Driver (TPM 模擬器代理驅動)

0xA2

所有

uapi/linux/acrn.h

ACRN hypervisor (ACRN 虛擬機器監控程式)

0xA3

80-8F

Port ACL in development: <mailto:tlewis@mindspring.com>

0xA3

90-9F

linux/dtlk.h

0xA4

00-1F

uapi/linux/tee.h

Generic TEE subsystem (通用 TEE 子系統)

0xA4

00-1F

uapi/asm/sgx.h

<mailto:linux-sgx@vger.kernel.org>

0xA5

01-05

linux/surface_aggregator/cdev.h

Microsoft Surface Platform System Aggregator <mailto:luzmaximilian@gmail.com>

0xA5

20-2F

linux/surface_aggregator/dtx.h

Microsoft Surface DTX driver <mailto:luzmaximilian@gmail.com>

0xAA

00-3F

linux/uapi/linux/userfaultfd.h

0xAB

00-1F

linux/nbd.h

0xAC

00-1F

linux/raw.h

0xAD

00

Netfilter device in development: <mailto:rusty@rustcorp.com.au>

0xAE

00-1F

linux/kvm.h

Kernel-based Virtual Machine <mailto:kvm@vger.kernel.org>

0xAE

40-FF

linux/kvm.h

Kernel-based Virtual Machine <mailto:kvm@vger.kernel.org>

0xAE

20-3F

linux/nitro_enclaves.h

Nitro Enclaves

0xAF

00-1F

linux/fsl_hypervisor.h

Freescale hypervisor (飛思卡爾虛擬機器監控程式)

0xB0

所有

RATIO devices in development: <mailto:vgo@ratio.de>

0xB1

00-1F

PPPoX <mailto:mostrows@styx.uwaterloo.ca>

0xB2

00

arch/powerpc/include/uapi/asm/papr-vpd.h

powerpc/pseries VPD API <mailto:linuxppc-dev>

0xB2

01-02

arch/powerpc/include/uapi/asm/papr-sysparm.h

powerpc/pseries system parameter API <mailto:linuxppc-dev>

0xB2

03-05

arch/powerpc/include/uapi/asm/papr-indices.h

powerpc/pseries indices API <mailto:linuxppc-dev>

0xB2

06-07

arch/powerpc/include/uapi/asm/papr-platform-dump.h

powerpc/pseries Platform Dump API <mailto:linuxppc-dev>

0xB2

08

powerpc/include/uapi/asm/papr-physical-attestation.h

powerpc/pseries Physical Attestation API <mailto:linuxppc-dev>

0xB3

00

linux/mmc/ioctl.h

0xB4

00-0F

linux/gpio.h

<mailto:linux-gpio@vger.kernel.org>

0xB5

00-0F

uapi/linux/rpmsg.h

<mailto:linux-remoteproc@vger.kernel.org>

0xB6

所有

linux/fpga-dfl.h

0xB7

所有

uapi/linux/remoteproc_cdev.h

<mailto:linux-remoteproc@vger.kernel.org>

0xB7

所有

uapi/linux/nsfs.h

<mailto:Andrei Vagin <avagin@openvz.org>>

0xB8

01-02

uapi/misc/mrvl_cn10k_dpi.h

Marvell CN10K DPI driver

0xB8

所有

uapi/linux/mshv.h

Microsoft Hyper-V /dev/mshv driver <mailto:linux-hyperv@vger.kernel.org>

0xC0

00-0F

linux/usb/iowarrior.h

0xCA

00-0F

uapi/misc/cxl.h

Dead since 6.15 (自 6.15 版本後已失效)

0xCA

10-2F

uapi/misc/ocxl.h

0xCA

80-BF

uapi/scsi/cxlflash_ioctl.h

Dead since 6.15 (自 6.15 版本後已失效)

0xCB

00-1F

CBM serial IEC bus in development: <mailto:michael.klein@puffin.lb.shuttle.de>

0xCC

00-0F

drivers/misc/ibmvmc.h

pseries VMC driver

0xCD

01

linux/reiserfs_fs.h

Dead since 6.13 (自 6.13 版本後已失效)

0xCE

01-02

uapi/linux/cxl_mem.h

Compute Express Link Memory Devices (計算快車鏈路記憶體裝置)

0xCF

02

fs/smb/client/cifs_ioctl.h

0xDB

00-0F

drivers/char/mwave/mwavepub.h

0xDD

00-3F

ZFCP device driver see drivers/s390/scsi/ <mailto:aherrman@de.ibm.com>

0xE5

00-3F

linux/fuse.h

0xEC

00-01

drivers/platform/chrome/cros_ec_dev.h

ChromeOS EC driver

0xEE

00-09

uapi/linux/pfrut.h

Platform Firmware Runtime Update and Telemetry (平臺韌體執行時更新和遙測)

0xF3

00-3F

drivers/usb/misc/sisusbvga/sisusb.h

sisfb (in development) <mailto:thomas@winischhofer.net>

0xF6

所有

LTTng Linux Trace Toolkit Next Generation <mailto:mathieu.desnoyers@efficios.com>

0xF8

所有

arch/x86/include/uapi/asm/amd_hsmp.h

AMD HSMP EPYC system management interface driver <mailto:nchatrad@amd.com>

0xF9

00-0F

uapi/misc/amd-apml.h

AMD side band system management interface driver <mailto:naveenkrishna.chatradhi@amd.com>

0xFD

所有

linux/dm-ioctl.h

0xFE

所有

linux/isst_if.h