09-头文件、宏及设备结构体
6.3.1 头文件、宏及设备结构体
在globalmem字符设备驱动中,应包含它要使用的头文件,并定义globalmem设备结构体及相关宏。
代码清单6.8 globalmem设备结构体和宏
1 #include <linux/module.h>
2 #include <linux/types.h>
3 #include <linux/fs.h>
4 #include <linux/errno.h>
5 #include <linux/mm.h>
6 #include <linux/sched.h>
7 #include <linux/init.h>
8 #include <linux/cdev.h>
9 #include <asm/io.h>
10 #include <asm/system.h>
11 #include <asm/uaccess.h>
12
13 #define GLOBALMEM_SIZE 0x1000 /全局内存大小:4KB/
14 #define MEM_CLEAR 0x1 /清零全局内存/
15 #define GLOBALMEM_MAJOR 250 /预设的globalmem的主设备号/
16
17 static int globalmem_major = GLOBALMEM_MAJOR;
18 /globalmem设备结构体/
19 struct globalmem_dev {
20 struct cdev cdev; /cdev结构体/
21 unsigned char mem[GLOBALMEM_SIZE]; /全局内存/
22 };
23
24 struct globalmem_dev dev; /设备结构体实例/
从第19~22行代码可以看出,定义的globalmem_dev设备结构体包含了对应于globalmem字符设备的cdev、使用的内存mem[GLOBALMEM_SIZE]。当然,程序中并不一定要把mem[GLOBALMEM_SIZE]和cdev包含在一个设备结构体中,但这样定义的好处在于,它借用了面向对象程序设计中“封装”的思想,体现了一种良好的编程习惯。