linux 驱动创建多个设备

这篇博客介绍了如何在Linux环境下编写驱动程序,特别是全球内存驱动(globalmem),包括globalmem.c和Makefile的实现细节。同时,文章还涉及到驱动测试部分,详细阐述了Android.mk和driver_test.c的使用,用于验证驱动功能。
摘要由CSDN通过智能技术生成

linux 驱动中创建一个设备的例子很多,以下例子是创建多个字符设备的例子,包括驱动部分和测试部分

驱动部分包括 globalmem.c  Makefile两个文件:

globalmem.c file:

#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 <linux/device.h>
#include <linux/slab.h>

#include <asm/io.h>
#include <asm/system.h>
#include <asm/uaccess.h>

#define GLOBALMEM_SIZE 0x1000 //global memory size 4KB
#define MEM_CLEAR 0x1         //clear all the mem
#define GLOBALMEM_MAJOR 350   //globalmem major number

static struct class* globalmem_class0;
static struct class* globalmem_class1;

static int globalmem_major = GLOBALMEM_MAJOR;

struct globalmem_dev{
    struct cdev cdev; //cdev struct
    unsigned char mem[GLOBALMEM_SIZE]; //global mem
};

struct globalmem_dev* globalmem_devp;

void globalmem_setup_cdev(struct globalmem_dev * dev, int index);

int globalmem_init(void){
    int result;
    dev_t devno = MKDEV(globalmem_major, 0); 

    if(globalmem_major){
        result = register_chrdev_region(devno, 2, "globalmem");
    }else{
        result = alloc_chrdev_region(&devno, 0, 2, "globalmem");
        globalmem_major = MAJOR(devno);
    }   
        if(result < 0){
        return result;
    }

    globalmem_devp = kmalloc(2 * sizeof(struct globalmem_dev), GFP_KERNEL);
    if(!globalmem_devp){
        result = -ENOMEM;
        goto fail_malloc;
    }
    memset(globalmem_devp, 0, 2 * sizeof(struct globalmem_dev));
    globalmem_setup_cdev(&globalmem_devp[0], 0);
    globalmem_setup_cdev(&globalmem_devp[1], 1);

    globalmem_class0 = class_create(THIS_MODULE, "globalmem0"); //create file under /sys/class
    device_create(globalmem_class0, NULL, MKDEV(globalmem_major, 0), NULL, "globalmem_0"); //globalmem_0 is the name under /dev/
    globalmem_class1 = class_create(THIS_MODULE, "globalmem1"); //create fil
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值