2025
01
18
2012
02
25
複数のデバイスドライバソースをコンパイルする
main.c
/* main.c */ #include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); extern void sub(void); static int hello_init(void) { printk(KERN_ALERT "[%s] driver loaded.\n", __func__); sub(); return 0; } static void hello_exit(void) { printk(KERN_ALERT "[%s] driver unloaded.\n", __func__); } module_init(hello_init); module_exit(hello_exit);
sub.c
/* sub.c */ #include <linux/module.h> void sub(void) { printk("[%s] sub() called\n", __func__); }
Makefile
CFILES = main.c sub.c obj-m += hello.o hello-objs := $(CFILES:.c=.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 ※タブ注意
コマンド
以下コピペ用 make insmod hello.ko lsmod | grep hello dmesg | tail -5 rmmod hello dmesg | tail -5 ※ su じゃないとダメかも (sudo付き版) make sudo insmod hello.ko lsmod | grep hello dmesg | tail -5 sudo rmmod hello dmesg | tail -5 実行環境 Ubuntu10.04 64bit Linux 2.6.32-33-generic #70-Ubuntu SMP x86_64 GNU/Linux (uname -aで確認)
makeで失敗する or insmodで失敗する
前者:Linuxのソースコードが入っていなかったり、パスが間違っている 後者:起動したLinuxカーネルとコンパイル時のソースでconfigが異なっていてモジュールを組み 込めない sudo付け忘れ insmodする権限がない などの原因が考えられます。 そんなときはこちらのページへ
検索用タグ C言語 Linuxドライバ デバイスドライバ
PR
2012/02/25 (Sat.) Comment(0) Linuxデバイスドライバ
Comments