[内核文档]ioctl 命令号

[内核文档]ioctl 命令号

 

       如果你要向内核增加新的ioctl函数,需要用到<linux/ioctl.h>中定义的宏_IO。

 

1

_IO

ioctl中无参数

2

_IOW

ioctl有写参数.(copy_from_user)

3

_IOR

ioctl有读参数.(copy_to_user)

4

_IOWR

ioctl既有读参数,也有写参数.

       上面所说的读和写都是从用户的角度看的,就像write和read系统调用。举个例子,SET_FOOioctl应该是_IOW的,虽然内核可能是从用户空间读数据的。GET_FOO ioctl可能是_IOR的,虽然内核可能会向用户空间写数据。_IO, _IOW, _IOR, 或者_IOWR的第一个参数是下面表格中的标识字幕或数字。因为内核中的驱动数量非常巨大,一些驱动可能会分享相同的字母。

       如果你正在为新设备编写驱动并且需要一个字母,可以从一组未用的数字中选择:32-256(ioctl命令)。可以通过向LinusTorvalds提交本文件的补丁,以注册你选择的数字。

也可以给我发email(mec@shout.net),我来帮你注册。

       _IO,_IOW, _IOR, 或者_IOWR的第二个参数是每个ioctl都独有的序列号。第三个参数是从内核读取或向内核写的数据的数据类型(如int或structfoo)。注意,不要使用sizeof(arg)作为第三个参数。

       一些设备使用它们的主设备号作为标识符。只要主设备号是独特的,这就没有问题。但是一些设备是不规范的,没有遵循任何惯例。

       我们推荐下面的惯例:

       1)保证ioctl号在整个内核中是独一无二的。可以方便调试。

       2)strace能够自动发现_IO,_IOW, _IOR, 或者_IOWR定义的ioctl号。

       3)如果ioctl号是独特的,strace能够将此解码成可识别的名称。

       4)如果使用该惯例定义ioctl号,用户可用很方便的使用grep查找到相应的ioctl。

       5) 在遵循此惯例时,驱动程序可以使用通用的编码方式在用户空间与内核空间之间拷贝数据。

       下表中列举了Linux/X86中从用户的观点看到的ioctl。它包含了截至2.6.31内核中的大多数驱动。但是我也知道,肯定遗漏了一些。非X86体系结构的驱动以及drivers/staging/中的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

0x12      all   linux/fs.h

              linux/blkpg.h

0x1b      all   InfiniBand Subsystem      <http://infiniband.sourceforge.net/>

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     <linux/timepps.h>      PPS kit from Ulrich Windl

                                   <ftp://ftp.de.kernel.org/pub/linux/daemons/ntp/PPS/>

'2'    01-04     linux/i2o.h

'3'    00-0F     drivers/s390/char/raw3270.h    conflict!

'3'    00-1F     linux/suspend_ioctls.h       conflict!

              andkernel/power/user.c

'8'    all                        SNP8023 advanced NICcard

                                   <mailto:mcr@solidum.com>

'@'  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!

              anddrivers/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

                                   <mailto:maassen@uni-freiburg.de>

'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'   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'   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       <mailto:erazor_de@users.sourceforge.net>

'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        encrypteddisk device driver

                                   <http://linux01.gwdg.de/~alatham/ppdd.html>

'M'  all   linux/soundcard.h      conflict!

'M'  01-16     mtd/mtd-abi.h            conflict!

              anddrivers/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

'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!

'V'   C0-CF   drivers/media/video/mxb.h      conflict!

'W'  00-1F     linux/watchdog.h       conflict!

'W'  00-1F     linux/wanrouter.h       conflict!

'W'  00-3F     sound/asound.h          conflict!

'X'   all   fs/xfs/xfs_fs.h            conflict!

              andfs/xfs/linux-2.6/xfs_ioctl32.h

              andinclude/linux/falloc.h

              andlinux/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

                                   <mailto:gregkh@suse.de>

'a'    all   linux/atm*.h, linux/sonet.h       ATM on linux

                                   <http://lrcwww.epfl.ch/>

'b'    00-FF                         conflict! bit3 vme hostbridge

                                   <mailto:natalia@nikhefk.nikhef.nl>

'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'   10-3F     drivers/media/video/dabusb.h  conflict!

'd'   C0-CF   drivers/media/video/saa7191.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! Charonfilesystem

                                   <mailto:zapman@interlan.net>

'h'    00-1F     linux/hpet.h         conflict!

'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!

'l'     00-3F     linux/tcfs_fs.h            transparent cryptographic file system

                                   <http://web.archive.org/web/*/http://mikonos.dia.unisa.it/tcfs>

'l'     40-7F     linux/udf_fs_i.h  in development:

                                   <http://sourceforge.net/projects/linux-udf/>

'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

                                   <mailto:tim@cyberelk.net>

'p'    A1-A5   linux/pps.h           LinuxPPS

                                   <mailto:giometti@linux.it>

'q'    00-1F     linux/serio.h

'q'    80-FF    linux/telephony.h Internet PhoneJACK, Internet LineJACK

              linux/ixjuser.h             <http://web.archive.org/web/*/http://www.quicknet.net>

'r'    00-1F     linux/msdos_fs.h and fs/fat/dir.c

's'    all   linux/cdk.h

't'    00-7F     linux/if_ppp.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-DF   media/pwc-ioctl.h      conflict!

'v'    C0-FF    linux/meye.h        conflict!

'v'    D0-DF   drivers/media/video/cpia2/cpia2dev.h    conflict!

'w'   all                        CERN SCI driver

'y'    00-1F                          packet based userlevel 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     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            PROTOPRIVATErange

0x89      F0-FF    linux/sockios.h           SIOCDEVPRIVATE range

0x8B     all   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      all   fs/btrfs/ioctl.h

0x97      00-7F     fs/ceph/ioctl.h             Ceph file system

0x99      00-0F                          537-Addinboard driver

                                   <mailto:buk@buks.ipn.de>

0xA0     all   linux/sdp/sdp.h           Industrial Device Project

                                   <mailto:kenji@bitgate.com>

0xA3     80-8F     Port ACL            indevelopment:

                                   <mailto:tlewis@mindspring.com>

0xA3     90-9F     linux/dtlk.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     all   linux/kvm.h         Kernel-basedVirtual Machine

                                   <mailto:kvm@vger.kernel.org>

0xB0     all   RATIO devices          indevelopment:

                                   <mailto:vgo@ratio.de>

0xB1     00-1F     PPPoX                <mailto:mostrows@styx.uwaterloo.ca>

0xB3     00   linux/mmc/ioctl.h

0xC0     00-0F     linux/usb/iowarrior.h

0xCB     00-1F     CBM serial IEC bus   in development:

                                   <mailto:michael.klein@puffin.lb.shuttle.de>

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/

                                   <mailto:aherrman@de.ibm.com>

0xF3      00-3F     drivers/usb/misc/sisusbvga/sisusb.h sisfb (in development)

                                   <mailto:thomas@winischhofer.net>

0xF4      00-1F     video/mbxfb.h            mbxfb

                                   <mailto:raph@8d.com>

0xFD     all   linux/dm-ioctl.h

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值