Linuxドライバ開発のubuntuでのドライバコンパイル

2626 ワード

Linuxドライバ開発のubuntuでのドライバコンパイル
Linuxの駆動開発もずっと道中で、以前はずっと単板の上で実験を行って、今日ubuntuの下で1つの簡単な駆動をコンパイルすることを試みて、いくつかの駆動実験は自然にubuntuの上で行うことができて、同時に学習コストを減らすことができて、1台のPCだけでいいです.Linuxドライバは自然にカーネルバージョンと密接に関連しており、現在使用されているカーネルバージョンを次のコマンドで表示できます.
uneme -r

私はubuntu 12.04を使用しています.カーネルバージョンは3.8.0-29-genericです.また、cdから/usr/srcディレクトリの下で確認することもできます./usr/srcディレクトリの下にlinux-headers-3.8..0-29-genericのフォルダがあり、名前の意味からカーネル関連プログラムをコンパイルするためにヘッダファイルを提供する場所であることがわかります.Googleではubuntuのドライバをコンパイルするにはカーネルをコンパイルする必要があるとよく言われていますが、その後、あなたが自機のためにコンパイル駆動している限り、このステップは必要ではありません.ubuntuのインストール時に自然カーネルをコンパイルした場合、/usr/srcディレクトリでも見ました.だから以下は直接駆動の作成を行うことができて、ここでまず最も簡単な駆動“hello world”に来ます.
/* hello.c */
#include 
#include 
MODULE_LICENSE("leo BSD/GPL");
static int hello_init(void)
{
    printk(KERN_ALERT "Hello, world
"
); return 0; } static void hello_exit(void) { printk(KERN_ALERT "Goodbye, Hello world
"
); } module_init(hello_init); module_exit(hello_exit);

次に、ドライバをコンパイルするにはMakefileが必要です.
obj-m += hello.o
    CURRENT_PATH:=$(shell pwd)
    LINUX_KERNEL_PATH:=/lib/modules/$(shell uname -r)/build
all:
    $(MAKE) -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:
    rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions

準備が整う前にmakeを実行するだけで目的の.koファイルを得ることができます.insmodコマンドでシステムにドライバをインストールし、lsmodコマンドでインストールしたドライバを確認し、rmmodコマンドでドライバをアンインストールすることができます.奇妙なドライバで手配された印刷情報はどこへ行きますか.カーネルログに属してシステムログファイルに格納されていたのです.このファイル/var/log/syslogを表示することで、私たちが手配した印刷情報を以下のように見ることができます.
cat /var/log/syslog | grep Hello

これでubuntuでのドライバコンパイル作業がスムーズに進み、次は思う存分発揮する時です.