Tiny 6410簡単なデバイス駆動helloworld_driver


転載は出典を明記してください:走るカタツムリ(袁方の技術ブログ)http://blog.csdn.net/yf210yf/article/details/7355905
自分の作業ディレクトリの下にhelloworldを作成します.driver.c
#include <linux/init.h>
#include <linux/module.h>

//     license:BSD GPL
MODULE_LICENSE("Dual BSD/GPL");

//      
MODULE_AUTHOR("yf210yf");

//     
static int __init hello_init(void)
{
	printk(KERN_ALERT "Hello world!
"); return 0; } // static void __exit hello_exit(void) { printk(KERN_ALERT "Goodbye world!
"); } module_init(hello_init); module_exit(hello_exit);

補足:
1.printk出力は出力のログレベルと関係があり、出力ログレベルがコンソールのレベルより高い場合はコンソールに表示され、コンソールより低い場合は/var/log/messageに記録されます.
2.printk()はユーザーと対話するように設計されているわけではありませんが、hello-1ではこのような目的で使用されています.実際には、カーネルにログ機能を提供したり、カーネル情報を記録したり、警告を与えたりします.したがって
個のprintk()宣言は、<1>とKERN_のように優先順位を付けます.ALERT通りです.カーネルは合計8つの優先順位のマクロを定義しているので、難解なデジタルコードを使用する必要はありません.
件linux/kernel.hこれらのマクロとそれらの意味を表示します.優先度を指定しない場合は、デフォルトの優先度DEFAULT_MESSAGE_LOGLEVELが採用される.
#define KERN_EMERG     "<0>"#define KERN_ALERT    "<1>"#define KERN_CRIT      "<2>"#define KERN_ERR       "<3>"#define KERN_WARNING   "<4>"#define KERN_NOTICE    "<5>"#define KERN_INFO      "<6>"#define KERN_DEBUG     "<7>"
同じディレクトリの下にMakefileを作成する
KERNELDIR :=/home/workdir/kernel/linux-2.6.38

PWD :=$(shell pwd)

modules:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

modules_install:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install	

obj-m:=helloworld_driver.o

clean:
	rm -rf *.o *~core .depend .*.cmd *.ko *.mod.c .tmp_versions *.order *.symvers

make modules生成helloworld_の実行driver.koファイル.
Tiny6410 简单的设备驱动helloworld_driver_第1张图片
ハローワールドをdriver.koは開発ボードファイルシステムにダウンロードしinsmod helloworld_を実行driver.koはドライバモジュールをロードし、シリアルポートには次の情報が印刷されます.
Tiny6410 简单的设备驱动helloworld_driver_第2张图片
成功!
ハローワードをアンインストールdriver.ko
成功!
これは最も簡単なデバイス駆動の例です!
補足:
insmod——ロードモジュール
insmodはinstall moduleの略です
機能説明:モジュールをロードします.
構文:insmod[-fkmpsvxX][-o<モジュール名>][モジュールファイル][シンボル名=シンボル値]
説明:Linuxにはモジュールを介してkernelをロードする機能がたくさんあります.これによりkernelを簡素化し、効率を向上させ、より大きな弾力性を保つことができる.このようなロード可能なモジュールは、通常、デバイスドライバです.
パラメータ-fは、現在のkernelバージョンとモジュールコンパイル時のkernelバージョンが一致しているかどうかを確認せず、モジュールを強制的にロードします.
-kモジュールを自動取り外しに設定します.
-m出力モジュールのロード情報.
-o<モジュール名>モジュールの名前を指定します.モジュールファイルのファイル名を使用できます.
-pモジュールがkernelを正しくロードできるかどうかをテストします.
-sは、すべての情報をシステム記録ファイルに記録する.
-v実行時に詳細を表示します.
-xはモジュールの外部シンボルをまとめないでください.
-Xモジュールのすべての外部シンボルをアセンブリします.これはプリセット値です.
rmmod-不要なモジュールの削除
rmmodすなわちremove moduleの略称
機能説明:モジュールを削除します.
構文:rmmod[-as][モジュール名...]
説明:rmmodコマンドを実行し、不要なモジュールを削除します.Linuxオペレーティングシステムのコアはモジュール化された特性を持っているため、コアをコンパイルする際には、すべての機能をコアに入れる必要があります.これらの機能を個別のモジュールにコンパイルし、必要に応じて別々にロードすることができます.
パラメータ:
-a現在不要なすべてのモジュールを削除します.
−sは、端末インタフェースではなくsyslog常駐サービスに情報を出力する.
lsmod-システムにロードされたモジュールを表示
lsmodはlist modulesの略であり、すべてのモジュールをリストする.
機能説明:システムにロードされているモジュールを表示します.
構文:lsmod
説明:lsmodコマンドを実行すると、システムにロードされているすべてのモジュールがリストされます.Linuxオペレーティングシステムのコアはモジュール化された特性を持っているため、コアをコンパイルする際に、すべての機能をコアに入れる必要はありません.これらの機能を個別のモジュールにコンパイルし、必要に応じて別々にロードすることができます.