Linux Kernel 2.6 Documentation:
/usr/src/linux/Documentation/ioctl-number.txt
ioctl-number.txt
Ioctl 番号の割当て方針及び割当て済み番号のリスト
[プレインテキスト版]
- 原著作者: Michael Chastain <mec@shout.net>
- 翻訳者: 早川 仁 <uv9h-hykw(a)asahi-net.or.jp> 川崎 貴彦 <takahiko(a)hakubi.co.jp>
- バージョン: 2.6.7
- 翻訳日時: 2004/06/29
ioctl 番号
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 コマンドを用意できるような十分な拡張性のある、利用されて
いない文字を選んでください。このファイルに対するパッチを作成し、そのパッ
チを Linus Torvalds に提出することで、ブロックを登録できます。または、私
<mec@shout.net> にメールしてもらえれば、私が代わりに登録します。
_IO, _IOW, _IOR, _IOWR の二番目の引数は、各 ioctl を区別するためのシー
ケンス番号です。_IOW, _IOR, _IOWR の三番目の引数は、カーネルに渡したり、
カーネルから渡されたりするデータの型です (例えば 'int' や 'struct foo')。
ioctl が size_t 型の引数を渡されたと思ってしまうので、sizeof(arg) を
三番目の引数として渡すことがないよう、注意してください!
メジャー番号を識別子として使うデバイスもありますが、それが一意である
限り、大丈夫です。変則的で、慣習にまったく従わないデバイスもあります。
この慣習に従うことは良いことです。理由は次のとおりです。
(1) ioctl を全体で一意にすることにより、エラーのチェックが楽になります。
プログラムが間違って別のデバイスに ioctl を発行しても、予想外の動作
が起こるのではなく、エラーを受け取れます。
(2) 'strace' ビルド処理が、_IO, _IOW, _IOR, _IOWR で定義された ioctl
番号を自動的に見つけます (訳注:strace を make するとき linux/
ioctlent.sh というスクリプトがこの自動処理を担当します)。
(3) 番号が一意であれば、'strace' が、番号をより有用な名前にデコード
できます。
(4) ioctl 番号を定義する際にこの慣習が使われていれば、ioctl を探す人が
より簡単に grep できます。
(5) 慣習に従っていれば、ユーザ空間とカーネル空間のあいだでパラメータの
コピーをおこなう汎用コードを、ドライバで使用できるようになります。
このテーブルは、Linux/i386 のユーザ空間から見える ioctl の一覧です。
2.3.14 までのほとんどのドライバが含まれていますが、幾つか欠けている
ことが分かっています。
Code 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 全て linux/umsdos_fs.h
0x06 全て linux/lp.h
0x09 全て linux/md.h
0x12 全て linux/fs.h
linux/blkpg.h
0x20 全て drivers/cdrom/cm206.h
0x22 全て scsi/sg.h
'#' 00-3F IEEE 1394 サブシステム サブシステム全体用のブロック
'1' 00-1F <linux/timepps.h> Ulrich Windl の PPS キット
< ftp://ftp.de.kernel.org/pub/linux/daemons/ntp/PPS/ >
'6' 00-10 <asm-i386/processor.h> Intel IA32 マイクロコード更新ドライバ
<mailto:tigran@veritas.com>
'8' 全て SNP8023 アドバンスト NIC カード
<mailto:mcr@solidum.com>
'A' 00-1F linux/apm_bios.h
'B' C0-FF アドバンスト bbus
<mailto:maassen@uni-freiburg.de>
'C' 全て linux/soundcard.h
'D' 全て asm-s390/dasd.h
'F' 全て linux/fb.h
'I' 全て linux/isdn.h
'J' 00-1F drivers/scsi/gdth_ioctl.h
'K' 全て linux/kd.h
'L' 00-1F linux/loop.h
'L' E0-FF linux/ppdd.h 暗号化ディスクデバイスドライバ
< http://linux01.gwdg.de/~alatham/ppdd.html >
'M' 全て linux/soundcard.h 競合!
'M' 00-1F linux/isicom.h 競合!
'N' 00-1F drivers/sub/scanner.h
'P' 全て linux/soundcard.h
'Q' 全て linux/soundcard.h
'R' 00-1F linux/random.h
'S' 全て linux/cdrom.h 競合!
'S' 80-81 scsi/scsi_ioctl.h 競合!
'S' 82-FF scsi/scsi.h 競合!
'T' 全て linux/soundcard.h 競合!
'T' 全て asm-i386/ioctls.h 競合!
'U' 00-EF linux/drivers/usb/usb.h
'U' F0-FF drivers/usb/auerswald.c
'V' 全て linux/vt.h
'W' 00-1F linux/watchdog.h 競合!
'W' 00-1F linux/wanrouter.h 競合!
'X' 全て linux/xfs_fs.h 競合!
'Y' 全て linux/cyclades.h
'a' 全て ATM on Linux
< http://lrcwww.epfl.ch/linux-atm/magic.html >
'b' 00-FF bit3 vme ホストブリッジ
<mailto:natalia@nikhefk.nikhef.nl>
'c' 00-7F linux/comstats.h 競合!
'c' 00-7F linux/coda.h 競合!
'd' 00-1F linux/devfs_fs.h 競合!
'd' 00-DF linux/video_decoder.h 競合!
'd' F0-FF linux/digi1.h
'e' 全て linux/digi1.h 競合!
'e' 00-1F linux/video_encoder.h 競合!
'e' 00-1F net/irda/irtty.h 競合!
'f' 00-1F linux/ext2_fs.h
'h' 00-7F Charon ファイルシステム
<mailto:zapman@interlan.net>
'i' 00-3F linux/i2o.h
'j' 00-3F linux/joystick.h
'k' 全て asm-sparc/kbio.h
asm-sparc64/kbio.h
'l' 00-3F linux/tcfs_fs.h 透過的暗号化ファイルシステム
< http://mikonos.dia.unisa.it/tcfs >
'l' 40-7F linux/udf_fs_i.h 開発中:
< http://www.trylinux.com/projects/udf/ >
'm' 全て linux/mtio.h 競合!
'm' 全て linux/soundcard.h 競合!
'm' 全て linux/synclink.h 競合!
'm' 00-1F net/irda/irmod.h 競合!
'n' 00-7F linux/ncp_fs.h
'n' E0-FF video/matrox.h matroxfb
'p' 00-3F linux/mc146818rtc.h
'p' 40-7F linux/nvram.h
'p' 80-9F ユーザ空間 parport
<mailto:tim@cyberelk.net>
'q' 00-1F linux/videotext.h 競合!
'q' 80-FF Internet PhoneJACK, Internet LineJACK
< http://www.quicknet.net >
'r' 00-1F linux/msdos_fs.h
's' 全て linux/cdk.h
't' 00-7F linux/if_ppp.h
't' 80-8F linux/isdn_ppp.h
'u' 00-1F linux/smb_fs.h
'v' 00-1F linux/ext2_fs.h 競合!
'v' 全て linux/videodev.h 競合!
'w' 全て CERN SCI ドライバ
'y' 00-1F パケットベースユーザレベル通信
<mailto:zapman@interlan.net>
'z' 00-3F CAN バスカード
<mailto:hdstich@connectu.ulm.circular.de>
'z' 40-7F CAN バスカード
<mailto:oe@port.de>
0x80 00-1F linux/fb.h
0x89 00-06 asm-i386/sockios.h
0x89 0B-DF linux/sockios.h
0x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE 範囲
0x89 F0-FF linux/sockios.h SIOCDEVPRIVATE 範囲
0x8B 全て linux/wireless.h
0x8C 00-3F WiNRADiO ドライバ
< http://www.proximity.com.au/~brian/winradio/ >
0x90 00 drivers/cdrom/sbpcd.h
0x93 60-7F linux/auto_fs.h
0x99 00-0F 537-Addinboard ドライバ
<mailto:buk@buks.ipn.de>
0xA0 全て linux/sdp/sdp.h Industrial Device Project
<mailto:kenji@bitgate.com>
0xA3 80-8F Port ACL 開発中:
<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 デバイス 開発中:
<mailto:rusty@rustcorp.com.au>
0xB0 全て RATIO デバイス 開発中:
<mailto:vgo@ratio.de>
0xB1 00-1F PPPoX <mailto:mostrows@styx.uwaterloo.ca>
0xCB 00-1F CBM シリアル IEC バス 開発中:
<mailto:michael.klein@puffin.lb.shuttle.de>
0xDD 00-3F ZFCP デバイスドライバ drivers/s390/scsi/ 参照
<mailto:aherrman@de.ibm.com>
Linux カーネル 2.6 付属文書一覧へ戻る