1、什么是globalmem虚拟设备
(1)、globalmem字符设备驱动中,分配一片内存大小为GLOBALMEM_SIZE(4K)的空间
(2)、提供对该片内存的读写、控制和定位函数
(3)、用户进程能够通过linux系统调用访问这篇内存
- #include <linux/module.h>
- #include <linux/init.h>
- #include <linux/types.h>
- #include <linux/fs.h>
- #include <linux/errno.h>
- #include <linux/mm.h>
- #include <linux/sched.h>
- #include <linux/cdev.h>
- #include <asm/io.h>
- #include <asm/system.h>
- #include <asm/uaccess.h>
- #define GLOBALMEM_SIZE 0X1000 /*全局内存最大4KB*/
- #define MEM_CLEAR 0x1 /*清零全局内存*/
- #define GLOBALMEM_MAJOR 254 /* 预设的globalmem 的主设备号 */
- static globalmem_major = GLOBALMEM_MAJOR;/*预设的globalmem的主设备号*/
- /*globalmem的设备结构体:包含了对应于globalmem字符设备的cdev 和 使用内存mem[GLOBALMEM_SIZE]*/
- struct globalmem_dev
- {
- struct cdev cdev; //cdev结构体
- unsigned char mem[GLOBALMEM_SIZE); //全局内存
- };
- struct globalmem_dev *globalmem_devp; //设备结构体指针
- /*文件打开函数*/
- int globalmem_open(struct inode *inode,struct file *filp)
- {
- filp->private_data = globalmem_devp; //将设备结构体指针赋值给文件私有数据指针
- return 0
- }
- /*文件释放函数*/
- int globalmem_release(struct inode *inode,struct file *filp)
- {
- return 0;
- }