• Linux 驱动开发 五十六:《ioctl-number.txt》翻译


    文档目录:linux-imx-4.1.15\Documentation\ioctl\ioctl-number.txt

    如果要向内核添加新的 ioctl,则应使用 中定义的 _IO 宏:

    • _IO:没有参数的 ioctl
    • _IOW:带有写入参数的 ioctlcopy_from_user);
    • _IOR:带有读取参数的 ioctlcopy_to_user);
    • _IOWR:具有写入和读取参数的 ioctl

    “写”和“读”是从用户的角度来看的,就像系统调用“写”和“读”一样。 例如,一个 SET_FOO ioctl 将是 _IOW,尽管内核实际上会从用户空间读取数据; GET_FOO ioctl 将是 _IOR,尽管内核实际上会将数据写入用户空间。

    _IO_IOW_IOR_IOWR 的第一个参数是下表中的标识字母或数字。 由于驱动程序众多,许多驱动程序与其他驱动程序共享一个部分字母。

    如果您正在为新设备编写驱动程序并且需要一个字母,请选择一个具有足够扩展空间的未使用块:32 到 256 个 ioctl 命令。 您可以通过修补此文件并将修补程序提交给 Linus Torvalds 来注册块。 或者您可以通过 mec@shout.net 给我发送电子邮件,我会为您注册一个。

    _IO_IOW_IOR_IOWR 的第二个参数是用于区分 ioctl 的序列号。 _IOW_IOR_IOWR 的第三个参数是进入内核或从内核出来的数据的类型(例如 “int”v或 “struct foo”)。 注意! 不要使用 sizeof(arg) 作为第三个参数,因为这会导致您的 ioctl 认为它传递了 size_t 类型的参数。

    一些设备使用它们的主设备号作为标识符; 这没关系,只要它是唯一的。 有些设备是不规则的,根本不遵循任何惯例。

    遵循这个约定是好的,因为:

    1、保持 ioctl 的全局唯一性有助于错误检查:如果程序在错误的设备上调用 ioctl,它将得到错误而不是一些意外行为。

    2、'strace' 构建过程会自动查找使用 _IO_IOW_IOR_IOWR 定义的 ioctl 编号。

    3、当数字唯一时,“strace”可以将数字解码回有用的名称。

    4、当使用此约定定义 ioctl 编号时,寻找 ioctl 的人可以更轻松地使用 grep 查找它们。

    5、当遵循约定时,驱动程序代码可以使用通用代码在用户空间和内核空间之间复制参数。

    此表列出了 Linux/x86 用户国家/地区可见的 ioctl。 它包含最多 2.6.31 的大多数驱动程序,但我知道我缺少一些。 没有尝试从驱动程序/暂存/列出非 X86 架构或 ioctl

    Code  Seq#(hex)	Include File		Comments
    ========================================================
    0x00	00-1F	linux/fs.h		    conflict!
    0x00	00-1F	scsi/scsi_ioctl.h	conflict!
    0x00	00-1F	linux/fb.h		    conflict!
    0x00	00-1F	linux/wavefront.h	conflict!
    0x02	all	    linux/fd.h
    0x03	all	    linux/hdreg.h
    0x04	D2-DC	linux/umsdos_fs.h	Dead since 2.6.11, but don't reuse these.
    0x06	all	    linux/lp.h
    0x09	all	    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	all	    linux/fs.h
    		        linux/blkpg.h
    0x1b	all	    InfiniBand Subsystem	
    0x20	all	    drivers/cdrom/cm206.h
    0x22	all	    scsi/sg.h
    '#' 	00-3F	IEEE 1394 Subsystem	Block for the entire subsystem
    '$'	    00-0F	linux/perf_counter.h, linux/perf_event.h
    '&'	    00-07	drivers/firewire/nosy-user.h
    '1'	    00-1F		PPS kit from Ulrich Windl
    					
    '2'	    01-04	linux/i2o.h
    '3'	    00-0F	drivers/s390/char/raw3270.h	conflict!
    '3'	    00-1F	linux/suspend_ioctls.h	conflict!
    		        and kernel/power/user.c
    '8'	    all		SNP8023 advanced NIC card
    					
    ';'	    64-7F	linux/vfio.h
    '@'	    00-0F	linux/radeonfb.h	conflict!
    '@'	    00-0F	drivers/video/aty/aty128fb.c	conflict!
    'A'	    00-1F	linux/apm_bios.h	conflict!
    'A'	    00-0F	linux/agpgart.h		conflict!
    		        and drivers/char/agp/compat_ioctl.h
    'A'	    00-7F	sound/asound.h		conflict!
    'B'	    00-1F	linux/cciss_ioctl.h	conflict!
    'B'	    00-0F	include/linux/pmu.h	conflict!
    'B'	    C0-FF	advanced bbus
    					
    'C'	    all	    linux/soundcard.h	conflict!
    'C'	    01-2F	linux/capi.h		conflict!
    'C'	    F0-FF	drivers/net/wan/cosa.h	conflict!
    'D'	    all	    arch/s390/include/asm/dasd.h
    'D'	    40-5F	drivers/scsi/dpt/dtpi_ioctl.h
    'D'	    05	    drivers/scsi/pmcraid.h
    'E'	    all	    linux/input.h		conflict!
    'E'	    00-0F	xen/evtchn.h		conflict!
    'F'	    all	    linux/fb.h		conflict!
    'F'	    01-02	drivers/scsi/pmcraid.h	conflict!
    'F'	    20	    drivers/video/fsl-diu-fb.h	conflict!
    'F'	    20	    drivers/video/intelfb/intelfb.h	conflict!
    'F'	    20	    linux/ivtvfb.h		conflict!
    'F'	    20	    linux/matroxfb.h	conflict!
    'F'	    20	    drivers/video/aty/atyfb_base.c	conflict!
    'F'	    00-0F	video/da8xx-fb.h	conflict!
    'F'	    80-8F	linux/arcfb.h		conflict!
    'F'	    DD	    video/sstfb.h		conflict!
    'G'	    00-3F	drivers/misc/sgi-gru/grulib.h	conflict!
    'G'	    00-0F	linux/gigaset_dev.h	conflict!
    'H'	    00-7F	linux/hiddev.h		conflict!
    'H'	    00-0F	linux/hidraw.h		conflict!
    'H'	    01	    linux/mei.h		conflict!
    'H'	    00-0F	sound/asound.h		conflict!
    'H'	    20-40	sound/asound_fm.h	conflict!
    'H'	    80-8F	sound/sfnt_info.h	conflict!
    'H'	    10-8F	sound/emu10k1.h		conflict!
    'H'	    10-1F	sound/sb16_csp.h	conflict!
    'H'	    10-1F	sound/hda_hwdep.h	conflict!
    'H'	    40-4F	sound/hdspm.h		conflict!
    'H'	    40-4F	sound/hdsp.h		conflict!
    'H'	    90	    sound/usb/usx2y/usb_stream.h
    'H'	    A0	    uapi/linux/usb/cdc-wdm.h
    'H'	    C0-F0	net/bluetooth/hci.h	conflict!
    'H'	    C0-DF	net/bluetooth/hidp/hidp.h	conflict!
    'H'	    C0-DF	net/bluetooth/cmtp/cmtp.h	conflict!
    'H'	    C0-DF	net/bluetooth/bnep/bnep.h	conflict!
    'H'	    F1	    linux/hid-roccat.h	
    'H'	    F8-FA	sound/firewire.h
    'I'	    all	    linux/isdn.h		conflict!
    'I'	    00-0F	drivers/isdn/divert/isdn_divert.h	conflict!
    'I'	    40-4F	linux/mISDNif.h		conflict!
    'J'	    00-1F	drivers/scsi/gdth_ioctl.h
    'K'	    all	    linux/kd.h
    'L'	    00-1F	linux/loop.h		conflict!
    'L'	    10-1F	drivers/scsi/mpt2sas/mpt2sas_ctl.h	conflict!
    'L'	    E0-FF	linux/ppdd.h		encrypted disk device driver
    					
    'M'	    all	    linux/soundcard.h	conflict!
    'M'	    01-16	mtd/mtd-abi.h		conflict!
    		        and drivers/mtd/mtdchar.c
    'M'	    01-03	drivers/scsi/megaraid/megaraid_sas.h
    'M'	    00-0F	drivers/video/fsl-diu-fb.h	conflict!
    'N'	    00-1F	drivers/usb/scanner.h
    'N'	    40-7F	drivers/block/nvme.c
    'O'     00-06   mtd/ubi-user.h		UBI
    'P'	    all	    linux/soundcard.h	conflict!
    'P'	    60-6F	sound/sscape_ioctl.h	conflict!
    'P'	    00-0F	drivers/usb/class/usblp.c	conflict!
    'Q'	    all	    linux/soundcard.h
    'R'	    00-1F	linux/random.h		conflict!
    'R'	    01	    linux/rfkill.h		conflict!
    'R'	    C0-DF	net/bluetooth/rfcomm.h
    'S'	    all	    linux/cdrom.h		conflict!
    'S'	    80-81	scsi/scsi_ioctl.h	conflict!
    'S'	    82-FF	scsi/scsi.h		conflict!
    'S'	    00-7F	sound/asequencer.h	conflict!
    'T'	    all	    linux/soundcard.h	conflict!
    'T'	    00-AF	sound/asound.h		conflict!
    'T'	    all	    arch/x86/include/asm/ioctls.h	conflict!
    'T'	    C0-DF	linux/if_tun.h		conflict!
    'U'	    all	    sound/asound.h		conflict!
    'U'	    00-CF	linux/uinput.h		conflict!
    'U'	    00-EF	linux/usbdevice_fs.h
    'U'	    C0-CF	drivers/bluetooth/hci_uart.h
    'V'	    all	    linux/vt.h		conflict!
    'V'	    all	    linux/videodev2.h	conflict!
    'V'	    C0	    linux/ivtvfb.h		conflict!
    'V'	    C0	    linux/ivtv.h		conflict!
    'V'	    C0	    media/davinci/vpfe_capture.h	conflict!
    'V'	    C0	    media/si4713.h		conflict!
    'W'	    00-1F	linux/watchdog.h	conflict!
    'W'	    00-1F	linux/wanrouter.h	conflict!		(pre 3.9)
    'W'	    00-3F	sound/asound.h		conflict!
    'X'	    all	    fs/xfs/xfs_fs.h		conflict!
    		and     fs/xfs/linux-2.6/xfs_ioctl32.h
    		and     include/linux/falloc.h
    		and     linux/fs.h
    'X'	    all	    fs/ocfs2/ocfs_fs.h	conflict!
    'X'	    01	    linux/pktcdvd.h		conflict!
    'Y'	    all	    linux/cyclades.h
    'Z'	    14-15	drivers/message/fusion/mptctl.h
    '['	    00-07	linux/usb/tmc.h		USB Test and Measurement Devices
    					
    'a'	    all	    linux/atm*.h, linux/sonet.h	ATM on linux
    					
    'a'	    00-0F	drivers/crypto/qat/qat_common/adf_cfg_common.h	conflict! qat driver
    'b'	    00-FF	conflict! bit3 vme host bridge
    					
    'c'	    all	    linux/cm4000_cs.h	conflict!
    'c'	    00-7F	linux/comstats.h	conflict!
    'c'	    00-7F	linux/coda.h		conflict!
    'c'	    00-1F	linux/chio.h		conflict!
    'c'	    80-9F	arch/s390/include/asm/chsc.h	conflict!
    'c'	    A0-AF   arch/x86/include/asm/msr.h	conflict!
    'd'	    00-FF	linux/char/drm/drm/h	conflict!
    'd'	    02-40	pcmcia/ds.h		conflict!
    'd'	    F0-FF	linux/digi1.h
    'e'	    all	    linux/digi1.h		conflict!
    'e'	    00-1F	drivers/net/irda/irtty-sir.h	conflict!
    'f'	    00-1F	linux/ext2_fs.h		conflict!
    'f'	    00-1F	linux/ext3_fs.h		conflict!
    'f'	    00-0F	fs/jfs/jfs_dinode.h	conflict!
    'f'	    00-0F	fs/ext4/ext4.h		conflict!
    'f'	    00-0F	linux/fs.h		conflict!
    'f'	    00-0F	fs/ocfs2/ocfs2_fs.h	conflict!
    'g'	    00-0F	linux/usb/gadgetfs.h
    'g'	    20-2F	linux/usb/g_printer.h
    'h'	    00-7F	conflict! Charon filesystem
    					
    'h'	    00-1F	linux/hpet.h		conflict!
    'h'	    80-8F	fs/hfsplus/ioctl.c
    'i'	    00-3F	linux/i2o-dev.h		conflict!
    'i'	    0B-1F	linux/ipmi.h		conflict!
    'i'	    80-8F	linux/i8k.h
    'j'	    00-3F	linux/joystick.h
    'k'	    00-0F	linux/spi/spidev.h	conflict!
    'k'	    00-05	video/kyro.h		conflict!
    'k'	    10-17	linux/hsi/hsi_char.h	HSI character device
    'l'	    00-3F	linux/tcfs_fs.h		transparent cryptographic file system
    					
    'l'	    40-7F	linux/udf_fs_i.h	in development:
    					
    'm'	    00-09	linux/mmtimer.h		conflict!
    'm'	    all	    linux/mtio.h		conflict!
    'm'	    all	    linux/soundcard.h	conflict!
    'm'	    all	    linux/synclink.h	conflict!
    'm'	    00-19	drivers/message/fusion/mptctl.h	conflict!
    'm'	    00	    drivers/scsi/megaraid/megaraid_ioctl.h	conflict!
    'm'	    00-1F	net/irda/irmod.h	conflict!
    'n'	    00-7F	linux/ncp_fs.h and fs/ncpfs/ioctl.c
    'n'	    80-8F	linux/nilfs2_fs.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		conflict! (OCFS2 and UBI overlaps)
    'o'     40-41   mtd/ubi-user.h		UBI
    'o'     01-A1   linux/dvb/*.h		DVB
    'p'	    00-0F	linux/phantom.h		conflict! (OpenHaptics needs this)
    'p'	    00-1F	linux/rtc.h		conflict!
    'p'	    00-3F	linux/mc146818rtc.h	conflict!
    'p'	    40-7F	linux/nvram.h
    'p'	    80-9F	linux/ppdev.h		user-space parport
    					
    'p'	    A1-A5	linux/pps.h		LinuxPPS
    					
    'q'	    00-1F	linux/serio.h
    'q'	    80-FF	linux/telephony.h	Internet PhoneJACK, Internet LineJACK
    		        linux/ixjuser.h		
    'r'	    00-1F	linux/msdos_fs.h and fs/fat/dir.c
    's'	    all	    linux/cdk.h
    't'	    00-7F	linux/ppp-ioctl.h
    't'	    80-8F	linux/isdn_ppp.h
    't'	    90	    linux/toshiba.h
    'u'	    00-1F	linux/smb_fs.h		gone
    'u'	    20-3F	linux/uvcvideo.h	USB video class host driver
    'v'	    00-1F	linux/ext2_fs.h		conflict!
    'v'	    00-1F	linux/fs.h		conflict!
    'v'	    00-0F	linux/sonypi.h		conflict!
    'v'	    C0-FF	linux/meye.h		conflict!
    'w'	    all		CERN SCI driver
    'y'	    00-1F	packet based user level communications
    					
    'z'	    00-3F	CAN bus card	conflict!
    					
    'z'	    40-7F	CAN bus card	conflict!
    					
    'z'	    10-4F	drivers/s390/crypto/zcrypt_api.h	conflict!
    '|'	    00-7F	linux/media.h
    0x80	00-1F	linux/fb.h
    0x89	00-06	arch/x86/include/asm/sockios.h
    0x89	0B-DF	linux/sockios.h
    0x89	E0-EF	linux/sockios.h		SIOCPROTOPRIVATE range
    0x89	E0-EF	linux/dn.h		PROTOPRIVATE range
    0x89	F0-FF	linux/sockios.h		SIOCDEVPRIVATE range
    0x8B	all	    linux/wireless.h
    0x8C	00-3F	WiNRADiO driver
    					
    0x90	00	    drivers/cdrom/sbpcd.h
    0x92	00-0F	drivers/usb/mon/mon_bin.c
    0x93	60-7F	linux/auto_fs.h
    0x94	all	    fs/btrfs/ioctl.h
    0x97	00-7F	fs/ceph/ioctl.h		Ceph file system
    0x99	00-0F	537-Addinboard driver
    					
    0xA0	all	    linux/sdp/sdp.h		Industrial Device Project
    					
    0xA2	00-0F	arch/tile/include/asm/hardwall.h
    0xA3	80-8F	Port ACL		in development:
    					
    0xA3	90-9F	linux/dtlk.h
    0xAB	00-1F	linux/nbd.h
    0xAC	00-1F	linux/raw.h
    0xAD	00	    Netfilter device	in development:
    					
    0xAE	all	    linux/kvm.h		Kernel-based Virtual Machine
    					
    0xAF	00-1F	linux/fsl_hypervisor.h	Freescale hypervisor
    0xB0	all	    RATIO devices		in development:
    					
    0xB1	00-1F	PPPoX			
    0xB3	00	    linux/mmc/ioctl.h
    0xC0	00-0F	linux/usb/iowarrior.h
    0xCA	00-0F	uapi/misc/cxl.h
    0xCB	00-1F	CBM serial IEC bus	in development:
    					
    0xCD	01	    linux/reiserfs_fs.h
    0xCF	02	    fs/cifs/ioctl.c
    0xDB	00-0F	drivers/char/mwave/mwavepub.h
    0xDD	00-3F	ZFCP device driver	see drivers/s390/scsi/
    					
    0xEC	00-01	drivers/platform/chrome/cros_ec_dev.h	ChromeOS EC driver
    0xF3	00-3F	drivers/usb/misc/sisusbvga/sisusb.h	sisfb (in development)
    					
    0xF4	00-1F	video/mbxfb.h		mbxfb
    					
    0xF6	all	    LTTng			Linux Trace Toolkit Next Generation
    					
    0xFD	all	    linux/dm-ioctl.h
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268
    • 269
  • 相关阅读:
    系分 - 系统规划
    GateWay实现负载均衡
    【Rust日报】2022-08-07 专注于开发人员生产力的 R3BL TUI 库和应用程序
    Redis 7.0 源码调试环境搭建与源码导读技巧
    计算机网络-网络层 (IPV6,IPV4与IPV6对比,IPV6地址类型)
    MES生产执行解决方案提供商,可定制工厂MES精益制造管理系统-亿发
    指纹采集技术
    计算机毕业论文选题python毕业设计题目推荐基于Python实现的租房数据分析和展示系统[包运行成功]
    Redis 内存管理
    Redis的分布式锁问题(九)Redis + Lua 脚本实现分布式锁
  • 原文地址:https://blog.csdn.net/OnlyLove_/article/details/127132372