对于scull设备的理解

昨天完成了第三章,但是脑子里总是感觉对scull还达不到透彻的理解。昨天睡觉前又想了想这个设备,现在试试以下的理解看可不可以。
1)scull是一个设备;
2)这个设备通过一个结构体scull_dev描述。
3)scull_dev有7个成员,其中
    struct qset *data,指向一个用来存储数据的链表,我们把这个链表的每一个节点称为一个量子集,那么data就是这个由n个量子集构成的链表的头指针;
    int quantum,描述量子集中每个量子的大小,通常默认为4000字节;
    int qset,描述量子集中量子的数量,通常默认为1000个;
    unsigned long size,保存在其中的数据总量;//没理解透
    unsigned int access_key;由sculluid和scullpriv使用;//没理解透
    struct semaphore sem;互斥信号量;//没理解透
    struct cdev cdev,一个字符设备,用来描述该设备。

struct qset
{
  void **data;    //指向量子集的首元素,因为量子是一个存储空间,需要void *描述;所以指向量子集需要类型void **
  struct qset *next;    //下一个节点
};

//在<linux/cdev.h>中描述
struct cdev {
    struct kobject kobj;
    struct module *owner;
    const struct file_operations *ops;
    struct list_head list;
    dev_t dev;
    unsigned int count;
};
void cdev_init(struct cdev *, const struct file_operations *);//使用struct file_operations结构的常量来初始化cdev结构体.
struct cdev *cdev_alloc(void);//为cdev指针分配一个结构体空间
void cdev_put(struct cdev *p);//
int cdev_add(struct cdev *, dev_t, unsigned); //将你的设备模块关联到内核上。设备被激活了.参数:设备结构体,设备号,有多少设备会使用这个驱动。
void cdev_del(struct cdev *);//从系统内核上除去设备模块。
void cd_forget(struct inode *);//

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

damo王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值