//任务:写一简单的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驱动程序测试完成
HelloWorld模块
本文介绍了一个简单的HelloWorld模块的创建过程,包括准备工具、编写代码、编译模块、加载及卸载模块等步骤。
1124

被折叠的 条评论
为什么被折叠?



