カーネルオブジェクトのビルド

簡単なカーネルモジュールを作ってみる。

 

ソース、Makefile

・hello_module.c

 #include <linux/module.h>


MODULE_LICENSE("GPL v2");

static int hello_init(void)
{
     printk( KERN_ERR "Hello world\n");
     return 0;
}

static void hello_exit(void)
{
     /* none */
}

module_init(hello_init);
module_exit(hello_exit);

 

 

Makefile

obj-m := hello_module.o

all:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -C $(KERNEL) M=$(PWD) modules

 

ビルド

 カーネルソースの位置を相対的に指定する。ここでは、../kernel_src/kernel/kernel

make KERNEL=../kernel_src/kernel/kernel/

 ビルドが完了すると、hello_module.koが作成さる。

 

モジュールのインストール

作成されたkoファイルをBBBの起動SDへコピーして、BBBを起動する。

 

BBB起動後、作成されたモジュールをinsmodすると、読み込まれてhello worldが表示される。

insmod hello_module.ko

 

 

 

・参考

https://blukat29.github.io/2017/12/cross-compile-arm-kernel-module/

Linuxのカーネルモジュールを書いてみた - mcommit's message

カーネルモジュールの作成 | 組み込みLinuxのArmadilloサイト