一般內核驅動都是在實體機上跑的,那有沒有方法在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.o
KERNELDIR:=/lib/modules/`uname -r`/build
PWD :=$(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *o *.mod.c *.order *.symvers
開始編譯
sudo make
輸出
make -C /lib/modules/`uname -r`/build M=/home/aldrich/work/hello modules
make[1]:Entering directory '/usr/src/linux-headers-4.4.0-31-generic'
CC [M]/home/aldrich/work/hello/hello.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/aldrich/work/hello/hello.mod.o
LD [M]/home/aldrich/work/hello/hello.ko
make[1]:Leaving directory '/usr/src/linux-headers-4.4.0-31-generic'
生成的文件
hello.c hello.mod.c hello.o modules.order
hello.ko hello.mod.o MakefileModule.symvers
加載模塊
sudo insmod hello.ko
會在/var/log/syslog文件中輸出該打印信息
查看加載模塊
sudo lsmod
.
Module Size Used by
hello 16384 0
刪除模塊
sudo rmmod hello
查看輸出的打印信息‘
cat /var/log/syslog |grep world
.
Feb2019:33:17 tom kernel:[3792.439223] aldrich Hello, world
Feb2019:33:50 tom kernel:[3824.708500] aldrich Goodbye,Hello world
至此。