花了一下午的时间才搞清楚的,初学者真的是会被这个故意模糊掉的参数给搞晕,其实写教材完全没必要这样,从简单的最本质最核心的东西慢慢延伸开来才是正理,哪有一上来了就把人弄晕的。
struct scull_qset {
void **data;
struct scull_qset *next; /* 下一个链表节点(链表项) */
};
/* 我们自己的设备(包含了基本的cdev字符设备结构) */
struct scull_dev {
struct scull_qset *data; /* Pointer to first quantum set (链表的头)*/
int quantum; /* the current quantum size (当前quantum的大小)*/
int qset; /* the current array size 当前阵列数量*/
unsigned long size; /* amount of data stored here (保存在其中的数据总量)*/
unsigned int access_key; /* used by sculluid and scullpriv */
struct semaphore sem; /* mutual exclusion semaphore */
struct cdev cdev; /* Char device structure */
};
具体意义参见下图: