パステル実験室

アクセスカウンタ

zoom RSS Linuxデバイスドライバことはじめ

<<   作成日時 : 2012/11/24 17:28   >>

ブログ気持玉 0 / トラックバック 3 / コメント 0

さて、Linuxのデバイスドライバである。目的はRaspberry Pi用のドライバを書いてやりたいというところ。とりあえず、Linuxのデバイスドライバの解説本とくればLinux Device Driversが基本というところで、まずはこのチャプター2あたりがスタートアップということになる。もう少しお手ごろなところだとWriting device drivers in Linuxあたりがコンパクト。
とりあえず仮想マシンとしてUbuntuなLinux環境があるし、これならノートPCだけ持ち歩けばいいわけで、Raspberry Pi上で作る前にUbuntuの上で作成してみようということで、Writing・・・の方に従って試してみる。

さて、とりあえず最初は本当に何もしない、何も無いというもので、Writing・・の中では「nothing.c」という名前で作っている
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");

というヘッダ部分だけ。Makefileはこれまた単純で
obj-m := nothing.o

と、これだけだ。あとは、makeしてやればいいのだけど、先の2つのネタにあるサンプルでは駄目で
#include <linux/module.h>
$ make -C /usr/src/linux-headers-3.2.0-26-generic M=$PWD modules

で何とか無事make。makeするとnothing.koという具合に拡張子が.koのファイルが出来ているので、こいつを
insmod nothing.ko
などとして組み込んで、
lsmod | grep nothing
なんて具合にして組み込まれたのを見て、
rmmod nothing.ko
で外して、居なくなったのを確認するという具合。

さて、これでは本当に何も無い。普通、ドライバとしては
  1. ロード
  2. オープン
  3. ライト
  4. リード
  5. クローズ
  6. アンロード

てな調子になるわけだが、今はロード/アンロードはしてみたけど、ドライバ本体が何もないのでもちろん何もしない。当然普通のドライバならこの処理関数を用意する。この、ロード/アンロードのステップだけを実装してみたのが、Writing・・の中の「hello.c」で
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void) {
printk("<1> Hello world!\n");
return 0;
}

static void hello_exit(void) {
printk("<1> Bye, cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);

てな具合。要するに最後の「module_init」と「module_exit」でロード/アンロード時の関数を登録してやるということだ。printkしたものは、dmesgすると表示されるので、insmod、rmmodしてやってからdmesgすると、確かに動いたということが分かる。
Makefileはnothingの時と同じでいいし、makeの方法も同じでいい。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(3件)

タイトル (本文) ブログ名/日時
グッチ 2つ折り財布
Thanks , I have just been searching for information about this subject for a long time and yours is the best I've found out till now. But, what in regards to the bottom line? Are you sure about the supply? ...続きを見る
グッチ 2つ折り財布
2013/06/02 02:41
オークリー エックススクエアード/X SQUARED
You made some decent factors there. I looked on the web for the difficulty and located most people will associate with with your website. ...続きを見る
オークリー エックススクエアード/X S...
2013/06/03 01:17
プラダ バッグ
Linuxデバイスドライバことはじめ パステル実験室/ウェブリブログ ...続きを見る
プラダ バッグ
2013/07/07 02:38

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
Linuxデバイスドライバことはじめ パステル実験室/BIGLOBEウェブリブログ
文字サイズ:       閉じる