嵌入式 globalmem虚拟字符设备驱动雏形

本文介绍了如何编写一个Linux内核模块,即globalmem字符设备驱动,它在内核中分配4KB的内存空间供用户空间进程进行读写和控制。驱动代码包括打开、关闭、读取、写入、定位和控制内存的函数。此外,还提供了一个简单的测试应用程序来演示如何与这个设备交互。
摘要由CSDN通过智能技术生成

 

一、 globalmem虚拟设备 简介

globalmem意味着“全局内存”,在globalmem字符设备驱动中会分配一片大小GLOBALMEM_SIZE(4KB)的内存空间,并在驱动中提供了对这片内存的读写、控制和定位函数,用户空间的进程能通过Linux系统调用访问这片内存。该设备驱动仅仅是为了讲解问题的方便而凭空制造出来的设备。但他也有用处,由于globalmem可被两个或以上的进程同时访问,其中的全局内存可作为用户空间进程进行通信一种蹩脚的手段。

二、编写驱动代码

1.头文件globalmem.h

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/interrupt.h>
#include <linux/dma-mapping.h>
#include <linux/fs.h>
#include <linux/platform_device.h>
#include <linux/miscdevice.h>
#include <linux/clk.h>
#include <linux/device.h>
#include <linux/cdev.h>
#include <asm/irq.h>
#include <asm/io.h>
#include <asm/uaccess.h>
#include <mach/hardware.h>
#include <asm/dma.h>
#include <asm/delay.h>
#include <linux/delay.h>

 

#define GLOBALMEM_SIZE0x1000

#define MEM_CLEAR0x01

#define GLOBALMEM_MAJOR250

static intglobalmem_major = GLOBALMEM_MAJOR;

structglobalmem_dev{

struct cdev cdev;

unsigned char mem[GLOBALMEM_SIZE];

};

2.驱动代码globalmem.c

#include"globalmem.h"

struct globalmem_dev*globalmem_devp;

 

intglobalmem_open(struct inode *inode,struct file *filp)

{

dev_t devno;

 

filp->private_data=globalmem_devp;

printk("inode->i_rdev=%dglobalmem->cdev->dev=%d\n",inode->i_ino,MAJOR(globalmem_devp->cdev.dev));

return 0;

}

 

intglobalmem_release(struct inode *inode,struct file*filp)

{

return 0;

}

 

static ssize_tglobalmem_read(struct file *filp,char __user *buf,size_tcount,loff_t *ppos)

{

unsigned long p = *ppos;

int ret = 0;

 

struct globalmem_dev *dev=filp->private_data;

 

if(p >= GLOBALMEM_SIZE - p)

return 0;

if(count > GLOBALMEM_SIZE - p)

count = GLOBALMEM_SIZE - p;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值