将字符驱动程序进行编译,导入模块
1、编写Makefile文件
/***************************************************
*外部编译:将内核模块源文件放在内核源码外部进行编译
*动态编译:编译生成动态模块 xxx.ko
***************************************************/
-
进入终端查看当前系统的内核版本号
uname -r
-
进入系统modules目录查看
cd /lib/modules/4.15.0-107-generic/build
-
编写Makefile
KERNDIR = /lib/modules/4.15.0-107-generic/build
PWD = $(shell pwd)
obj-m:=demo.o
all:
make -C $(KERNDIR) M=$(PWD) modules
clean:
make -C $(KERNDIR) M=$(PWD) clean
Makefile文件
demo.c文件
demo.c文件
2、执行make
- 查看make以后生成的文件
3、导入模块
- 导入模块
sudo insmod demo.ko
- 查看模块
-lsmod
4、dmesg显示信息
dmesg
- 打印出了主设备号 major = 241
- 进入了demo_init函数,在demo.c的95行
5、卸载模块
sudo rmmod demo
6、dmesg显示信息
dmesg
-
进入了demo_exit函数,在demo.c的107行
====================================================================================== -
一开始打开dmesg会有很多信息,可以执行
dmesg | tail -1
-
或者可以先将dmesg信息清空
dmesg -c