参考:宋宝华 Linux设备驱动开发详解 嵌入式Linux驱动开发教程
开发环境:ubuntu16.04
所需Makefile文件感谢网友,链接:https://www.cnblogs.com/guanguangreat/p/7920378.html
1- hello world 模块代码,名字取为hello.c。由于Makefile文件不会写,直接复制过来,人家用的就是hello.c,其他名字编不过。。。
#include<linux/init.h> //包含module_init module_exit
#include<linux/kernel.h> //包含printk函数声明
#include<linux/module.h> //
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT"hello world enter\n");
return 0;
}
static void helllo_exit(void)
{
printk(KERN_ALERT"hello world exit\n");
}
module_init(hello_init); //_init只会被调用一次
module_exit(helllo_exit);
MODULE_AUTHOR("lhk"); //作者
MODULE_DESCRIPTION("a simple hello world module"); //模块描述
MODULE_ALIAS("hello world module"); //模块别名
2- Makefile 文件
注意名字一定是Makefile!!!!并且注意TBL缩进。
ifneq ($(KERNELRELEASE),)
obj-m:=hello.o
else
KDIR := /lib/modules/$(shell uname -r)/build
PWD:=$(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.ko *.o *.symvers *.cmd *.cmd.o
endif
之后在目录执行make命令,编译出所需的ko文件
make
3- 模块加载 模块卸载 查看模块信息
在编好的ko目录下,执行模块加载命令,将模块加载到内核
insmode hello.ko
通过lsmod查看内核中模块,通过dmesg查看那内核加载信息;通过modinfo查看模块信息
lsmod
dmesg
modinfo hello.ko
模块加载成功后,通过lsmod查看是否加载成功,本质上是读取/proc/modules文件中的内容打印
另外模块加载成功后,在/sys/modules路径下也有该模块。进入到模块文件夹,tree -a可查看目录树(有什么用?)
模块卸载
rmmod hello
总结:
学会了简单模块的编写
了解了加载模块Makefile文件的编写,此方面还有待学习。听说有个《跟我一起写Makefile》的资料不错,看下啊
学习了模块加载卸载相关内容