パソコンをつくろう!(パソコン自作のすすめ)
組み立てキットを使って自作に挑戦!
[第270回]
●ioperm (2)
前回からの続きです。
リナックスのマニュアルを見ますと、iopermの書式
int ioperm(unsigned long from, unsigned long num, int turn_on);
で、「許可ビットをturn_onに設定する」と書いてあります。
そこのところがよくわからなくて、あれこれ探った結果、多分turn_on=0のときアクセス不可でturn_on≠0のときアクセス可になる、ということだろうと見当をつけました。
それでいいのかどうか、実際にプログラムを書いて試してみましょう、というところで前回は終わってしまいました。
これがもとのプログラムです。
turn_on=1にしています。
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/io.h> #define OUT_PORT 0x378 int main(void){ int i; ioperm(OUT_PORT, 4, 1); for(i = 0; i < 10; i++){ outb(0xff, OUT_PORT); sleep(1); outb(0x00, OUT_PORT); sleep(1); } return 0; } |
/* outtest2.c */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/io.h> #define OUT_PORT 0x378 int main(void){ int i; ioperm(OUT_PORT, 4, 0xff00); for(i = 0; i < 10; i++){ outb(0xff, OUT_PORT); sleep(1); outb(0x00, OUT_PORT); sleep(1); } return 0; } |
/* outtest0.c */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/io.h> #define OUT_PORT 0x378 int main(void){ int i; ioperm(OUT_PORT, 4, 0); for(i = 0; i < 10; i++){ outb(0xff, OUT_PORT); sleep(1); outb(0x00, OUT_PORT); sleep(1); } return 0; } |
/* outtest0_2.c */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/io.h> #define OUT_PORT 0x378 int main(void){ int i; ioperm(OUT_PORT, 4, 0); for(i = 0; i < 10; i++){ /* outb(0xff, OUT_PORT); */ sleep(1); /* outb(0x00, OUT_PORT); */ sleep(1); } return 0; } |