//任务:写一简单的helloword模块
Step1:准备编译工具,内核源码等,确认内核版本
Step2:准备好模块文件(C文件)以及makefile,放在同一个目录hello_world下
//helloworld.c
//头文件,必不可少的部分 #include <linux/init.h> #include <linux/module.h>
//模块加载函数 static int hello_init(void) { printk("hello, world!\n"); return 0; } //模块卸载函数 static void hello_exit(void) { printk("good-bye, world!\n"); }
//加载 module_init(hello_init); //卸载 module_exit(hello_exit); //许可 MODULE_LICENSE("Dual BSP/GPL");
|
//makefile
#/usr/src/linux-headers-4.4.0-142-generic #/home/bill/linuxSource/linux-3.5
ifeq ($(KERNELRELEASE),) KERNELDIR ?= /usr/src/linux-headers-4.4.0-142-generic PWD := $(shell pwd) modules: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules modules_install: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install clean: rm -rf *.o *~core.depend .*.cmd *.ko *.mod.c .tmp_versions
else obj-m := hello_world.o endif |
//Makefile文件前两条路径,一条是本虚拟机的内核路径,另一条路径内核版本为3.5
//如果要在自己虚拟机上进行insmod,请使用自己虚拟机内核路径,更改KERNELDIR即可
//ubuntu内核路径 /usr/src/….
Step3:在文件目录下进行make
//编译之后该目录下.ko为模块文件
Step4:加载模块,并观察发生变化的目录
//sudo insmod hello_world.ko
//查看 /var/log/messages文件
//查看 /proc/modules文件
//或者查看 /sys/module/目录
Step5 卸载模块
//rmmod hello_world.ko
Step6 观察日志
// 查看/var/log/kern.log 观察最后几行 内核产生的日志
至此,helloworld驱动程序测试完成