Ioctl ֹ
1998 ǯ 2  18 
Michael Chastain
<mec@shout.net>

ͥ˿ ioctl ɲä硢<linux/ioctl.h> Ƥ _IO
ޥѤ褦ˤƤ

    _IO    an ioctl with no parameters
    _IOW   an ioctl with write parameters (from user's point of view)
    _IOR   an ioctl with read parameters (from user's point of view)
    _IOWR  an ioctl with both write and read parameters.

    _IO    ̵ ioctl
    _IOW   (桼鸫) Ѱդ ioctl
    _IOR   (桼鸫) ɹѰդ ioctl
    _IOWR  ɤ߽Ѱդ ioctl

''  'ɹ' ϥ桼λǤ 'write'  'read' 
ƥॳƱͤǤ㤨СSET_FOO ioctl ϼºݤˤϥͥ뤬桼ΰ
ǡɤ߹ळȤˤʤǤ礦 _IOW ѤǤ礦
GET_FOO ioctl ϼºݤˤϥͥ뤬桼ΰ˽񤭹ळȤˤʤǤ礦
_IOR ѤǤ礦

_IO, _IOW, _IOR, _IOWR ΰܤΰϡˤơ֥˺ܤäƤѿ
ǤǥХѤΥɥ饤С񤤤ƤơʸγƤɬ
פʻѤƤʤʸǤʸϿˤϤ
ե˵Ҥäƥѥå Linus Torvalds 뤫⤷
ϻ <mec@shout.net>  e-mail äƤ館ФϿޤ

_IO, _IOW, _IOR, _IOWR ܤΰϡ ioctl ̤뤿ν(Ϣ³)
ֹǤܤΰϥͥ뤬ɤ߽񤭤빽¤ΤΥǤ

᥸㡼ֹޥåʥСȤƻѤǥХ⤢ޤ
Ǥޤ󡣤ä§ŪǡˤޤäʤǥХ⤢ޤ

δ˽Ȥ򤪴ᤷޤͳȤƤ -

(1) ioctl Τǰդˤ뤳Ȥˤꡢ顼Υåڤˤʤ -
    ץबְä̤ΥǥХ ioctl ȯԤƤ⡢ͽ۳ư
    ˥顼ɽ롣

(2) 'strace' ӥɽ_IO, _IOW, _IOR, _IOWR 줿 ioctl ֹ
    ưŪ˸Ĥ (strace  make Ȥ linux/ioctlent.sh Ȥ
    ץȤμưôޤ)

(3) ֹ椬դǤС'strace' ֹͭѤ̾˥ǥɤǤ롣

(4) ioctl ֹΤ˴˽äƤСioctl õͤϤñ
    grep Ǥ롣

(5) ˽ȡɥ饤СΥɤͭǧΤˡverify_area
    ƤӽФŪʥɤѤǤ (verify_area  2.1.8 ʹߡ
    asm/uaccess.h  access_ok ˼äޤʤget_user 
    Υ桼ΰ襢ޥ¿ϡ access_ok ѤƤޤ)

Υơ֥ Linux/i386 ˤ桼ΰ褫鸫 ioctl ΰǤ
 Linux 2.1.15 ߤξ֤Ǥ

Code    Seq#    Include File        Comments
========================================================
0x00    01-02   linux/fs.h          conflict!
0x00    01-04   scsi/scsi_ioctl.h   conflict!
0x02    all     linux/fd.h
0x03    all     linux/hdreg.h
0x04    all     linux/umsdos_fs.h
0x06    all     linux/lp.h
0x09    all     linux/md.h
0x12    all     linux/fs.h
0x20    all     linux/cm206.h
0x22    all     scsi/sg.h
'A'     all     linux/apm_bios.h
'C'     all     linux/soundcard.h
'D'     all     asm-s390/dasd.h
'F'     all     linux/fb.h
'I'     all     linux/isdn.h
'K'     all     linux/kd.h
'L'     all     linux/loop.h
'M'     all     linux/soundcard.h
'P'     all     linux/soundcard.h
'Q'     all     linux/soundcard.h
'R'     all     linux/random.h
'S'     00-7F   linux/cdrom.h
'S'     80-81   scsi/scsi_ioctl.h
'S'     82-FF   scsi/scsi.h
'T'     all     linux/soundcard.h   conflict!
'T'     all     asm-i386/ioctls.h   conflict!
'V'     all     linux/vt.h
'W'     00-1F   linux/router.h      conflict [Please reallocate]
'W'     00-1F   linux/watchdog.h
'W'     20-27   linux/octal-relay.h in development
'W'     28-2F   linux/iso16-relay.h in development
'Y'     all     linux/cyclades.h
'Z'     all     linux/drivers/scsi/cpqfcTSioctl.h
'a'     all     various, see http://lrcwww.epfl.ch/linux-atm/magic.html
'b'     00-FF   bit3 vme host bridge    in development:
                    <mailto:natalia@nikhefk.nikhef.nl>
'c'     all     linux/comstats.h
'f'     all     linux/ext2_fs.h
'j'     00-3F   linux/joystick.h
'k'     all     asm-sparc/kbio.h, asm-sparc64/kbio.h
'l'     00-3F   linux/tcfs_fs.h     in development:
                    <http://mikonos.dia.unisa.it/tcfs>
'm'     all     linux/mtio.h        conflict!
'm'     all     linux/soundcard.h   conflict!
'n'     all     linux/ncp_fs.h
'p'     00-3F   linux/mc146818rtc.h
'p'     40-7F   linux/nvram.h
'p'     80-9F   user-space parport  in development:
                    <tim@cyberelk.net>
'r'     all     linux/msdos_fs.h
's'     all     linux/cdk.h
't'     00-7F   linux/if_ppp.h
't'     80-8F   linux/isdn_ppp.h
'u'     all     linux/smb_fs.h
'v'     all     linux/ext2_fs.h
'w'     all     CERN SCI driver     in development
'z'     00-3F   CAN bus card        in development:
                    <mailto:hdstich@connectu.ulm.circular.de>
'z'     40-7F   CAN bas card        in development:
                    <mailto:oe@port.de>
'6'     00-10   <asm-i386/processor.h>  Intel IA32 microcode update driver
                                        <mailto:tigran@veritas.com>
0x89    00-0F   asm-i386/sockios.h
0x89    10-DF   linux/sockios.h
0x89    E0-EF   linux/sockios.h     SIOCPROTOPRIVATE range
0x89    F0-FF   linux/sockios.h     SIOCDEVPRIVATE range
0x8B    all     linux/wireless.h
0x8C    00-3F   WiNRADiO driver     in development:
                    <http://www.proximity.com.au/~brian/winradio/>
0x90    00      linux/sbpcd.h
0x93    60-7F   linux/auto_fs.h
0x99    00-0F   537-Addinboard driver   in development:
                    <mailto:b.kohl@ipn-b.comlink.apc.org>
0xA0    all     Small Device Project    in development:
                    <mailto:khollis@northwest.com>
0xA3    80-8F   Port ACL        in development:
                    <mailto:tlewis@mindspring.com>
0xA3    90-9F   DoubleTalk driver   in development:
                    <mailto:jrv@vanzandt.mv.com>
0xAB    00-06   Network block device

