読者です 読者をやめる 読者になる 読者になる

Hello, kernel world!

Programming Linux

DebianとかUbuntuでカーネルモジュールを作ってみた

環境の準備

$ sudo aptitude build-dep linux-image-`uname -r`
$ sudo aptitude install linux-headers-`uname -r`

まけふぃれ

$ mkdir hello_ko
$ cd hello_ko
$ vim Makefile
obj-m := hello.o

KDIR := /usr/src/linux-headers-$(shell uname -r)
PWD := $(shell pwd)

all:
	$(MAKE) -C $(KDIR) M=$(PWD) modules

clean:
	$(MAKE) -C $(KDIR) M=$(PWD) clean

ソース

$ vim hello.c
#include <linux/module.h>
#include <linux/kernel.h>

static int __init hello_module_init( void )
{
    printk( KERN_INFO "Hello, kernel world!\n" );
    return 0;
}


static void __exit hello_module_exit( void )
{
    printk( KERN_INFO "Good-bye, kernel world!\n" );
}

module_init( hello_module_init );
module_exit( hello_module_exit );

MODULE_DESCRIPTION( "hello" );
MODULE_LICENSE( "GPL2" );

コンパイル

$ make

実行

$ sudo insmod hello.ko
$ sudo rmmod hello
$ dmesg | tail -n 2
[ 8683.550414] Hello, kernel world!
[ 8691.297834] Good-bye, kernel world!

思ったより簡単なんでびびった。