トップ «前の日記(2007年01月21日) 最新 次の日記(2007年01月23日)» 編集
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|10|12|
2009|02|03|06|07|10|11|12|
2010|01|02|03|04|07|09|10|11|12|
2011|01|03|04|05|06|07|08|10|
2012|01|06|08|09|10|12|
2013|01|02|03|04|07|09|11|12|
2014|01|03|04|05|06|09|
2015|04|
2016|01|08|
ここは旧えびめもです。えびめも2に移行します(2016/12/1)

2007年01月22日

デバイスドライバを書かずにIOを読み書きする

/dev/mem を mmap() すると デバイスドライバを書かなくてもIOメモリーが直接読み書きできるよ。という話があるmlで流れていて、けれどもそれはあまりお勧めしないという話をしたのだけど、何人かの方からやり方を教えてという直メールが来たので解説ページを作りました。
CAT Wiki デバイスドライバを書かずにIOを読み書きする
書いているうちに調子に乗って ioperm() もどきを作ってしまいました。ioperm()を使っているお行儀の悪い i386用ソフトを移植するには便利かもしれません。
#include <stdio.h>
#include "bogoio.h"
int main(){
        // 使用開始 0xa4000000番地〜 0x400バイト分
        bogo_ioperm(0xa4000000,0x400,1);
 
        // 0xa4000130番地に 0x00 出力
        bogo_outb(0x00,0xa4000130);  // LED1, LED2を点灯
 
        // 閉める
        bogo_ioperm(0xa4000000,0x400,0);
 
        return 0;
}