Linux Kernel 2.2 Documentation:
/usr/src/linux/Documentation/ioctl-number.txt
ioctl-number.txt
Ioctl 番号の割当て方針及び割当て済み番号のリスト
[プレインテキスト版]
- 原著作者: Michael Chastain <mec@shout.net>
- 翻訳者: 早川 仁 <uv9h-hykw@asahi-net.or.jp> 川崎 貴彦 <takahiko@hakubi.co.jp>
- バージョン: 2.2.20
- 翻訳日時: 2002/02/08
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
Linux カーネル 2.2 付属文書一覧へ戻る