コーディング規約 †
- タブ ... 8文字
- インデント ... 8文字
- 1行は80文字まで
- 80文字より長い行は分割して、次の行になるべく右の方に配置
- 関数はなるべく短くすべきで、長くても2画面(1画面は80x24)まで
ビルド †
Makefile †
obj-m += foobar.o
all:
make -C /lib/modules/$(shell uname -r)/build M=${PWD} modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=${PWD} clean
- obj-m ... 最終的に作りたい *.ko ファイルのもととなる .o ファイルを指定
- -C オプション ... Makefileがある場所を指定(別アーキテクチャ用の場合は、そのカーネルソースのパスなどを直接指定)
カーネルコンフィグレーションへの追加 †
コーディング †
ヘッダファイルのinclude †
#include <linux/module.h>
#include <linux/init.h>
ライセンス指定 †
printk() †
- printf() は使えない。代わりに pritk() を使う。
- printk() の出力先はカーネルバッファ
- カーネルバッファは dmesg コマンドで参照できるが、ラウンドロビン形式なので一定量を超えると古い方から上書きされていく
GPIO制御 †
制御関数 †
- int gpio_request(unsigned gpio, const char *label)
- int gpio_export(unsigned gpio, bool direction_may_change);
- 外部から制御可能な汎用GPIOとして使用できるようにする。
- int gpio_direction_output(unsigned gpio, int value)
- GPIOを出力に設定する。gpioはGPIO番号。valueは初期出力値(0 = low, 1 = high)
- int gpio_direction_input(unsigned gpio)
- void gpio_set_value(unsigned gpio, int value)
- GPIOに出力する。gpioはGPIO番号。valueは出力値(0 = low, 1 = high)
- int gpio_to_irq(unsigned gpio)
- int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev)
- 割り込みハンドラの登録をする。これはGPIOに限った関数ではありません
I2C †