memdev设备驱动

本文深入探讨了memdev设备驱动的原理与应用,包括其在内核中的实现、用户空间的交互方式以及如何进行设备注册和操作。通过实例解析,读者将能够理解memdev如何作为内存设备提供服务,并了解其在特定场景下的优势。
摘要由CSDN通过智能技术生成

  memdev.h如下:

#ifndef _MEMDEV_H_
#define _MEMDEV_H_

#ifndef MEMDEV_MAJOR
    #define MEMDEV_MAJOR 251 /* 预设的mem的主设备号 */
#endif

#ifndef MEMDEV_NR_DEVS
    #define MEMDEV_NR_DEVS 2 /* 设备数 */
#endif

#ifndef MEMDEV_SIZE
    #define MEMDEV_SIZE 4096
#endif

struct mem_dev {
    /* mem设备描述结构体 */
    char *data;
    unsigned long size;
};

#endif /* _MEMDEV_H_ */

  memdev.c如下:

#include <linux/module.h>
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/mm.h>
#include <linux/sched.h>
#include <linux/init.h>
#include <linux/cdev.h>
#include <asm/io.h>
#include <asm/system.h>
#include <asm/uaccess.h>
#include "memdev.h"

static int mem_major = MEMDEV_MAJOR;
module_param ( mem_major, int, S_IRUGO );

struct mem_dev *mem_devp; /* 设备结构体指针 */
struct cdev cdev;

int mem_open ( struct inode *inode, struct file *filp ) {
    /* 文件打开函数 */
    struct mem_dev *dev;
    int num = MINOR ( inode->i_rdev ); /* 获取次设备号 */

    if ( num >= MEMDEV_NR_DEVS ) {
   
        return -ENODEV;
    }

    dev = &mem_devp[num];
    filp->private_data = dev; /* 将设备描述结构指针赋值给文件私有数据指针 */
    return 0;
}

int mem_release ( struct inode *inode
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值