Linuxデバイスドライバプログラミングを読みつつRaspberry Piでデバドラ開発(4章)

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つのファイルが出てくる。