パソコンをつくろう!(パソコン自作のすすめ)
組み立てキットを使って自作に挑戦!
[第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;
}
|
