一般內核驅動都是在實體機上跑的,那有沒有方法在ubuntu直接編譯並運行呢?帶着這個問題在網上查了一些資料,之后就實現了。
運行
hello.c
#include<linux/init.h> //初始換函數#include<linux/kernel.h> //內核頭文件#include<linux/module.h> //模塊的頭文件static int hello_init(void){printk("aldrich Hello, world\n");return0;}staticvoid hello_exit(void){printk("aldrich Goodbye,Hello world\n");}module_init(hello_init);module_exit(hello_exit);MODULE_LICENSE("BSD/GPL");
Makefile
obj-m:=hello.oKERNELDIR:=/lib/modules/`uname -r`/buildPWD :=$(shell pwd)modules:$(MAKE) -C $(KERNELDIR) M=$(PWD) modulesclean:rm -rf *o *.mod.c *.order *.symvers
開始編譯
sudo make
輸出
make -C /lib/modules/`uname -r`/build M=/home/aldrich/work/hello modulesmake[1]:Entering directory '/usr/src/linux-headers-4.4.0-31-generic'CC [M]/home/aldrich/work/hello/hello.oBuilding modules, stage 2.MODPOST 1 modulesCC /home/aldrich/work/hello/hello.mod.oLD [M]/home/aldrich/work/hello/hello.komake[1]:Leaving directory '/usr/src/linux-headers-4.4.0-31-generic'
生成的文件
hello.c hello.mod.c hello.o modules.orderhello.ko hello.mod.o MakefileModule.symvers
加載模塊
sudo insmod hello.ko
會在/var/log/syslog文件中輸出該打印信息
查看加載模塊
sudo lsmod
.
Module Size Used byhello 16384 0
刪除模塊
sudo rmmod hello
查看輸出的打印信息‘
cat /var/log/syslog |grep world
.
Feb2019:33:17 tom kernel:[3792.439223] aldrich Hello, worldFeb2019:33:50 tom kernel:[3824.708500] aldrich Goodbye,Hello world
至此。
