内核模块常见的回调函数(代码2.1上 DriverRead 读设备函数,动态注册 1应用调用read函数读设备时,会触发该函数 DriverWrite 写设备函数,动态注册 应用调用write函数写设备时,会触发该函数 DriverIOControl 设备控制函数,动态注册 应用调用ioctl函数操作设备时,会触发该函数 DriverMMap 设备内存映射函数,动态注册 应用调用mmap函数时,会触发该函数
内核模块常见的回调函数(代码2.1) ◼ DriverRead ◼ 读设备函数,动态注册 ◼ 应用调用read函数读设备时,会触发该函数 ◼ DriverWrite ◼ 写设备函数,动态注册 ◼ 应用调用write函数写设备时,会触发该函数 ◼ DriverIOControl ◼ 设备控制函数,动态注册 ◼ 应用调用ioctl函数操作设备时,会触发该函数 ◼ DriverMMap ◼ 设备内存映射函数,动态注册 ◼ 应用调用mmap函数时,会触发该函数
内核模块模型 代码2.1 .输出调试信息的函数printk #include<linux/kernel.h> int printk (const char fmt,...) #dmesg命令查看调试信息 包裹宏DEBUG PRINT 参考资料: 《Linux设备驱动程序》
内核模块模型 ◼ 代码2.1 ◼ 输出调试信息的函数printk ◼ #include<linux/kernel.h> ◼ int printk(const char * fmt, …) ◼ #dmesg命令查看调试信息 ◼ 包裹宏DEBUG_PRINT ◼ 参考资料: ◼ 《Linux设备驱动程序》
Makefile文件 ifneq ($(KERNELRELEASE),) obj-m PrintModule.o PrintModule-obis:DriverMain.o DriverFileOperations.o EXTRA CFLAGS:=-DTEST_DEBUG-ggdb-00 else KERNELDIR ?=/lib/modules/$(shell uname -r)/build PWD :$(shell pwd) default: $(MAKE)-C $(KERNELDIR)M=$(PWD)modules endif
Makefile文件 ifneq ($(KERNELRELEASE),) obj-m := PrintModule.o PrintModule-objs := DriverMain.o DriverFileOperations.o EXTRA_CFLAGS := -DTEST_DEBUG -ggdb -O0 else KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules endif
Makefile文件 ifneq ($(KERNELRELEASE),) obj-m :PrintModule.o tModule-obis :DriverMain.o DriverFileOperations.o EXTRA CH GS:=-DTEST_DEBUG-ggdb-00 else KERNELL (lib/modules/$(shell uname -r)/build PWD:=$(sh default: 检查Makefile中是否定义了 $(MAKE KERNELRELEASE; nodules endif 当前未定义
Makefile文件 ifneq ($(KERNELRELEASE),) obj-m := PrintModule.o PrintModule-objs := DriverMain.o DriverFileOperations.o EXTRA_CFLAGS := -DTEST_DEBUG -ggdb -O0 else KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules endif 检查Makefile中是否定义了 KERNELRELEASE; 当前未定义
Makefile文件 ifneq ($(KERNELRELEASE),) obj-m PrintModule.o PrintModule-obis DriverMain.o DriverFileOperations.o EXTRA CFLAGS :=-DTEST_DEBUG-ggdb-00 else KERNELDIR ?=/lib/modules/$(shell uname -r)/build PWD$(shell pwd) default: $(MAKE)-C AELDIR)M=$(PWD)modules endif 执行else子句;
Makefile文件 ifneq ($(KERNELRELEASE),) obj-m := PrintModule.o PrintModule-objs := DriverMain.o DriverFileOperations.o EXTRA_CFLAGS := -DTEST_DEBUG -ggdb -O0 else KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules endif 执行else子句;