上へ

Kylix 対応 I/Oポートアクセスドライバ


===============================================================================
		I/O Port Access Driver for Linux 2.2
		programmed by kuma@webj.net 2001
===============================================================================

□概要
	I/O ポートアクセス機能を提供します。
	・デバイスID、ベンダーID から PCIベースアドレス取得
	・バイト単位、ワード(16bit)単位 I/O ポートアクセス

□注意事項
	ハードに直接アクセスするプログラムのため、使用には危険が伴いま
	す、使用したいボードの、ベンダーID、デバイスID、I/Oポートアサ
	インが調べられて、意味が分かる方以外は使用しないでください。
	使用にあたっては各自の責任で使用してください。

□動作環境
	Linux 2.2系列

	以下の環境で動作を確認しています。
	Laser5 Linux 6.4
	Red Hat Linux 7.0

□インストール
	1.アーカイブの展開
	  tar xzvf iolib000.tar.gz
	
	2.インストール
	  %make
	  #make install
	  
	  以下のファイルを作成します
	  ./iolib.o
	  ./iotest
	  /usr/local/lib/iolib.o
	  /etc/rc.d/init.d/iolib
	  /etc/rc.d/rc3.d/S99iolib
	  /etc/rc.d/rc5.d/S99iolib
	  /dev/iolib

□アンインストール
	root で
	#make clean

□動作確認
	1.モジュール組込み
	  再起動、または
	  #/etc/rc.d/init.d/iolib
	  でモジュールを組込み、

	  #/sbin/lsmod
	  でモジュール組込みを確認します。
	  Module                  Size  Used by
	  iolib                   1384   0  (unused)
	  のように表示されれば組込み成功です。

	2.テスト(PCIベースアドレス取得テスト)
	  制御したいボードの PCI ベースアドレスは機器構成によって
	  変わるため、ベンダーID、デバイスIDから取得する必要があります。
	  (現在の構成での PCIベースアドレスは、/proc/pci から取得
	  することもできます)

	  2.1.ベンダーID、デバイスIDの取得
	  ボードのベンダーに問い合わせるか、
	  %cat /proc/pci
	  でベンダーID、デバイスIDを取得します。

	  I/O ベースアドレスを持っている機器は、
	  以下のように表示されます。
	  |Bus  0, device  11, function  1:
	  |  Serial controller: Unknown vendor Unknown device (rev 0).
	  |    Vendor id=VVVV. Device id=DD.
	  |    Medium devsel.  
	  |    I/O at 0x1010 [0x1011].

	  2.2.PCIベースアドレス取得
	  ここでは 2.2. で取得した、VVVV, DD を持つボードの I/O ポート
	  アドレス 0x1010 を取得します。

	  %./iotest 0xVVVV 0xDD
	  VENDOR ID: VVVVh
	  DEVICE ID: 00DDh
	  ADDRESS0 : 1010h  

	  となれば、成功です。

□使用方法
	・C言語
	  #include "iolib.h"
	  address_info ai;
	  io_info ii;

	  int fd = open("/dev/iolib", O_RDWR);

	  // PCI ベースアドレス取得
	  ai.vendor_id = VVVV;	   // VENDOR ID
	  ai.device_id = DDDD;	   // DEVICE ID
	  ai.board_no = 0;	   // ボード番号同じボードを
				   // 複数使う時(最初のボードが0)
	  ai.base_address_no = 0;  // 取得 PCI ベースアドレス番号0 〜 5(通常0)
	  ioctl(fd, IOLIB_GET_BASE_ADDRESS, &ai);
	  printf("%04xh", ai.base_address);

	  // I/Oポート入力(BYTE単位)
	  ii.port_address = ADDRESS;  
	  ioctl(fd, IOLIB_IN_BYTE, &ii);
	  printf("%04xh: %0x02xh\n", ii.port_address, ii.data);

	  // I/Oポート出力(BYTE単位)
	  ii.port_address = ADDRESS;  
	  ii.data = DATA;  
	  ioctl(fd, IOLIB_OUT_BYTE, &ii);
	  printf("%04xh: %0x02xh\n", ii.port_address, ii.data);

	  close(fd);

	・Kylix
	  uses
	    IoPort;  

	  GetPciAddress	PCI ベースアドレス取得
	  InpB, OutpB	BYTE 単位入出力
	  InpW, OutpW	WORD(16bit)単位入出力 
	
	詳細は付属テストプログラム、付属 Kylix プログラムを参照のこと。

□仕様・既知のバグ
	・構造体のアライメント指定を手抜き。
	・ファイル配置、用語、解説などで変なところがあるかも。

□トラブルシューティング
	1.モジュール組込み時に、「シンボルが見つかりません」のような
	  エラーが表示される場合(例えば printk)
	  %nm iolib.o | grep printk
	     U printk_R1b7d4074
	  %grep printk /proc/ksyms
	  c01140bc printk_R1b7d4074

	でプログラム中のシンボルと、カーネル中のシンボルが一致している
	か確認してください、一致していない場合カーネルの再構築が必要で
	す。(他に良い方法があれば教えてください)

	2.デバイスファイルがオープンできない場合、
	  %lsmod
	  でモジュールが組み込まれているか、
	  %ls /dev/iolib
	  でデバイスファイルが作成されているか
	確認してください。作成されていない場合は、インストールを
	やり直してください。

	3.printk メッセージが表示されない
	  X 上の terminal では printk メッセージは表示されません。
	  X を終了させるか、[CTRL]+[ALT]+[F2]などで、コンソールに戻っ
	  て実行してください。

	4.デバイスメジャー番号を 60 から変更したい場合
	  iolib.h の
	  |#define IOLIB_MAJOR     60
	  を変更して、再コンパイル、再インストールしてください。

	  デバイスメジャー番号は
	  /usr/src/linux/Documentation/devices.txt
	  を参照して、重ならないように割り当てる建前になっていますが、
	  世の中の 1/255 を割り当てて良いようなプログラムではないので、

	  %cat /proc/devices
	  で他の機器が使用しているメジャー番号を確認して、重ならないよ
	  うに変更してください。	  

□著作権・免責
	本ソフトウェアは LGPL2(not 2.1) で配布されています。

	・無保証
	  変更者は本ソフトウェアの使用に起因するあらゆる損害・障害につ
	  いてその責任を一切負わないものとします。またバグ修正の義務を
	  負わないものとします。
	・使用条件
	  商用、非商用を問わず自由に使用してかまいません。使用表示も必
	  要ありません。
	・アーカイブの変更
	  独自アーカイブに含めて再配布してもかまいません。許可を得る必
	  要もありません。
	・引用条件
	  本ソフトウェアの一部、または全文を独自のプログラムに取り込ん
	  でかまいません、また、作成したプログラムは本ソフトウェアとは
	  無関係として商用、非商用を問わず、自由に配布してかまいません。
	・改編版を配布する条件
	  本ソフトウェアの引用ではなく、改編する場合は、以下の[変更履
	  歴]に変更点、変更者を記入の上 LGPL2 で配布してください。

□謝辞
	作成にあたって、以下の URL を参考にさせて頂きました。
	感謝いたします。
	http://www.mechatronics.mech.tohoku.ac.jp/~kumagai/
	東北大学 熊谷正朗

[変更履歴]
r1.4	2001/07/22 kuma@webj.net(http://kuma.webj.net)
	・新規作成

						2001/07/22 kuma@webj.net
===============================================================================