2025
11
09
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
