4章
ここからはラズパイ上で簡単なカーネルモジュールを作成する
ドライバのビルドに必要なパッケージ
sudo apt-get install raspberypi-kernel-headers
これによりヘッダとビルド用Makefileがインストールされる.
簡単なカーネルモジュールとMakefile
#include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { printk(KERN_ALERT "driver loaded\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT "driver unloaded\n"); } module_init(hello_init); module_exit(hello_exit);
- MODULE_LICENSEマクロによるライセンス指定が必要。ない場合はドライバのロード時に警告が表示される。
- module_initやmodule_exitマクロでロード時・アンロード時に呼ばれるエントリポイントの指定を行う。
- printf()はドライバでは使えないのでprintk()を使う。
obj-m := hello.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) V=1 modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
makeすると5つのファイルが出てくる。