next up previous contents
Next: センサーからの入力 Up: パソコンインターフェース及びソフト(低レベル部) Previous: OS

FreeBSDでのI/O制御法

FreeBSDでのI/O制御の方法ですが、デバイスドライバを書かないで、/dev/ioを 利用すれば、比較的簡単にI/Oポートを叩くことができます。このやり方はあま り美しくありませんし、勉強にもならかったので、頑張ってデバイスドライバ を書いた方が勉強にもなって良かったかな、と後悔しています。

/dev/ioを利用したI/Oポートの叩き方ですが、主にFreeBSDの検索ページ

http://www.jp.freebsd.org/yuki/FreeBSD/search.html
で /dev/ioをキーワードにして得られた文章を参考にしました。 具体的には次のようにして行いました。
/* プリンター8bitOUTPUT制御プログラム */

#include <stdio.h>
#include <stdlib.h>
#include <machine/cpufunc.h>

#define  P_DATE                 0x40  /* プリンターデータOUT PORT address*/

main()
{
    int x;
    char s[100];

    if(open("/dev/io",000)<0){
        fprintf(stderr,"can't open /dev/io\n");
        exit(1);
    }

  
    while(1){
        fputs("input>",stdout);
        gets(s);
        x = atoi(s);

        if ( (x < 0) || (x >= 256) || (s[0] == NULL)) continue;
        if ( s[0] == 'q' ) exit(1);

        outb(P_DATE,x);
    }
}
これは入力された0から256までの数値をプリンターポートに出力するというも のです。見てもらえれば分かるように、DOSでI/O制御するのとほとんど変りま せん。違いと言えば一番始めに書かれている machine/cpufunc.h のインクルー ドと/dev/ioのオープンぐらいです。outbが指定したポートへの出力で、inbが 指定したポートの読み込です。

Takao NAKAI
1999年1月18日