2015/4/18

【樹莓派】編譯一個Hello Kernel Module(Driver)

  編譯Driver給RPi使用需要準備Toolchain與Kernel Source Tree,步驟可以參考【重編Kernel,客制化自己的核心】,以下範例目錄結構為
 /home/acos
--+ rpi
----+ linux: 存放Kernel Source
----+ tools: 存放Toolchain
----+ driver: 存放此範例檔案hello.c與Makefile

hello.c
#include <linux/module.h>
#include <linux/init.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
 printk(KERN_ALERT "Hello, RPi!\n");

 return 0;
}

static void hello_exit(void)
{
 printk(KERN_ALERT "Goodbye, RPi\n");
}

module_init(hello_init);
module_exit(hello_exit);

Makefile
obj-m := hello.o

all:
 make -C /home/acos/rpi/linux M=$(PWD) modules

clean:
 make -C /home/acos/rpi/linux M=$(PWD) clean

進到driver目錄下執行
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
結束後會在目錄中看到hello.ko,將這檔案複製到RPi上進行載入與卸除動作就會看到對應訊息
root@raspberrypi:~# insmod hello.ko
[ 5835.187137] Hello, RPi!
root@raspberrypi:~# rmmod hello
[ 5842.134762] Goodbye, RPi

沒有留言:

張貼留言