Hello, world!是一個相當經典的入門教學範例,從這個範例的框架,使用者可以一探Linux Kernel的精簡之美,當然,它主要表達的目的,更多是對於操作環境的熟悉
main.c
#include <linux/init.h> #include <linux/device.h> #include <linux/module.h> MODULE_LICENSE("GPL"); MODULE_AUTHOR("Steward Fu"); MODULE_DESCRIPTION("Linux Driver"); int ldd_init(void) { printk("Hello, world!\n"); return 0; } void ldd_exit(void) { printk("Unload it\n"); } module_init(ldd_init); module_exit(ldd_exit);
ldd_init: 載入驅動程式時,系統會呼叫使用
ldd_exit: 卸載驅動程式時,系統會呼叫使用
Makefile
export ARCH=arm export CROSS_COMPILE=/opt/gcc-4.9/bin/arm-linux-gnueabihf- KERNEL=$(HOME)/kernel obj-m += main.o all: make -C $(KERNEL) M=$(PWD) modules clean: make -C $(KERNEL) M=$(PWD) clean
編譯
$ make make -C kernel M=hello modules make[1]: Entering directory 'kernel' CC [M] hello/main.o Building modules, stage 2. MODPOST 1 modules CC hello/main.mod.o LD [M] hello/main.ko make[1]: Leaving directory 'kernel'
把main.ko放到MicroSD第一分區,進入系統後,執行如下指令
# insmod /boot/main.ko Hello, world!
卸載驅動程式
# rmmod main Unload it