Adolph两边

 

LDD 第三章 (一.重要的结构和实现)

一.重要的结构和实现

设备描述结构

struct scull_dev {
struct scull_qset *data;
int quantum;
int qset;
unsigned long size;
unsigned int access_key;
struct semaphore sem;
struct cdev cdev;
};

设备量子集

struct scull_qset {
void **data;
struct scull_qset *next;
};


起初看了上面的图有一些不明白,当看了scull_trim的代码以后,就很清晰了.

很多地方的指针被申明为void *,主要是为了让你在使用之前转换类型.

int scull_trim(struct scull_dev *dev)
{
struct scull_qset *next, *dptr;
int qset = dev->qset;
int i;
for (dptr = dev->data; dptr; dptr = next)
{
if (dptr->data) {
for (i = 0; i < qset; i++)
kfree(dptr->data[i]); //这里是循环释放量子指针
kfree(dptr->data); //这里是释放整个量子集队列指针
dptr->data = NULL;
}

next = dptr->next;
kfree(dptr); //这里是释放量子集结构指针
}
dev->size = 0; //清空设备数据计数
dev->quantum = scull_quantum; //设置为内核预定义的量子大小
dev->qset = scull_qset; //设置为内核预定义的量子集大小
dev->data = NULL;
return 0;
}

 

posted on 2011-12-02 15:19  Adolph两边  阅读(265)  评论(0编辑  收藏  举报

导航