サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
linux-dvr.biz
デバイスドライバをビルドするためには、カーネルバージョンと同一バージョンの、kernel-develとkernel-headersパッケージが必要です。 そのため、まずは自身の環境のカーネルバージョンと上記2つのパッケージがインストールされているかどうかを調べます。 # uname -r 2.6.18-238.el5 # rpm -aq | grep kernel kernel-headers-2.6.18-238.el5 kernel-devel-2.6.18-238.el5 上記例では、カーネルのバージョンが「2.6.18-238.el5」であり、同バージョンのkernel-develとkernel-headersパッケージがインストールされています。 もし、インストールされていないのであれば、yumなどを使いインストールします。 # yum install kernel-devel
新しいプログラミング言語を覚えるとき、一番初めに書くプログラムは大抵「HelloWorld」だと思います。それはデバイスドライバ開発でも例外ではありません。 まずは新しいディレクトリを作成し、その中に、下記コードを記述した「hello.c」という名前のファイルを作成してください。 #include <linux/module.h> #include <linux/init.h> MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { printk(KERN_ALERT "driver loaded\n"); printk(KERN_ALERT "Hello World\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT "driver unlo
ドライバをビルドしただけでは、まだそのドライバは使えません。 使えるようにするためには、ドライバをロードしてやる必要があります。 ドライバのロードはinsmodコマンドにより行います。 koファイルがあるディレクトリに移動し、下記コマンドを実行します。 # insmod hello.ko ドライバのロードはランレベル3以降でも行えます。 それはつまり、OSの再起動なしにドライバのロード・アンロードができるということです。 ただし、insmodコマンドはroot権限で実行する必要があります。 ドライバが正常にロードされたかどうかの確認はlsmodコマンドで行えます。 # lsmod Module Size Used by hello 5504 0 ~以下省略~ lsmodコマンドは現在ロードされているカーネルモジュールを出力します。 ドライバはカーネルモジュールに含まれるので、正常にロードで
Linuxデバイスドライバを開発するために 必要なLinuxに関する概念や サンプルコードを示しながらの プログラミング解説などを行っています。
デバイスドライバを開発する場合、ユーザー空間とカーネル空間について理解しておく必要があります。 一般的なアプリケーション開発の場合、カーネル空間を意識したプログラミングは必要ありません。 しかし、デバイスドライバはカーネルの一部であるため、カーネル空間を意識したプログラミングを行わなくてはなりません。 では、ユーザー空間、カーネル空間とはそれぞれ何なのでしょう。 ユーザー空間とは、アプリケーション(OS上で動作するソフトウェア)が使用するメモリ領域のことであり、 カーネル空間とは、カーネルが使用するメモリ領域のことを指します。 つまり両者の違いは使用するメモリ領域の違いと言えます。 例えば、パソコンに4Gバイトのメモリが搭載されていたとします。 このときLinuxは、3Gバイトをユーザー空間としてアプリケーションに割り当て、残りの1Gバイトをカーネル空間としてカーネルに割り当てます。 ユー
このページを最初にブックマークしてみませんか?
『Linuxデバイスドライバ開発入門』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く