Ubuntu下编译Hello World驱动并运行全过程
一般内核驱动都是在实体机上跑的,那有没有方法在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
至此。

浙公网安备 33010602011771号