表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
10/16

マイドライバ

#include <asm/uaccess.h>

#include <linux/uaccess.h>


 上記コードの上側がraw_copy_to_userコールを呼び出し下のほうがcopy_to_userを呼び出せる。

 今回は上の行をコメントアウトして使用した。


static struct file_operations fops = {

.read=dev_read,

.write=dev_write,

.open=dev_open,

.release=dev_release,

};

 ここでwriteとreadを登録している。

 皆さんの予想通り読み込み関数は自由に付けられdev_readになっている。


 ではdev_readを見る。

static ssize_t dev_read(struct file* file, char* buf,size_t len, loff_t* off){

char greeting[6] = "hello";

int j;

for(j = 0; j < 7;j++){

copy_to_user(&buf[j], &greeting[j], 1);

}

copy_to_user(&buf,&ret,1);

return 7;

}

 上記コードでcopy_to_userを呼び出しているのが読み込みの本体だ。


 copy_to_userからメモリアドレス一文字ずつをbufにコピーしている。

 bufって何? といえばここにコピーしておくと読み出しができるくらいに考えている。

 見ればわかると思うがhelloをメモリに書き込んでいる。

 読み出しのソースは以下だ。

#include <stdio.h>

int main(){

FILE *fp;

fp = fopen("/dev/myzero","r");

int *ch[8];

fread(ch,1,8,fp);

printf("%s\n",ch);

return 0;

}

 /dev/myzeroが何なのかだが、これは任意に付けたデバイス名だ。

 なぜcatコマンドで読み込まないかといえば現状無限ループになるからだ。

cat /dev/myzero

 を実行した場合画面がhelloを埋められる、ここは現状改善の余地が大いにある。

 デバイス名がmyzeroなのははじめはzeroを書き出す実装を考えていたからだ、正直に言えばMakefileでインストールするときにデバイス名を決めるのに変更を面倒臭がった結果なのでデバイス名については触れないでもらいたい。

 以上、現状の解説だ。現在はFATを読んでいる、ファイルシステムとしては非常に原始的なものでコードが少ないのでありがたい。

 では、お読みいただきありがとうございます!

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ