/**
* cdev_init() - initialize a cdev structure
* @cdev: the structure to initialize
* @fops: the file_operations for this device
*
* Initializes @cdev, remembering @fops, making it ready to add to the
* system with cdev_add().
*/
//初始化cdev结构体
void cdev_init(struct cdev *cdev, const struct file_operations *fops)
{
memset(cdev, 0, sizeof *cdev); //将cdev设置为0
INIT_LIST_HEAD(&cdev->list); //初始化list前向指针和后向指针指向自己
kobject_init(&cdev->kobj, &ktype_cdev_default); //初始化kobj
cdev->ops = fops; //将文件结构体与字符结构体对接
}
void *memset(void *s,int c,size_t n)
将已开辟内存空间 s 的首 n 个字节的值设为值 c
cdev结构体的内容如下:
struct cdev {
struct kobject kobj; //每个cdev 都是一个 kobject
struct module *owner; //指向实现驱动的模块
const struct file_operations *ops; //操纵这个字符设备文件的方法
struct list_head list; //与cdev 对应的字符设备文件的 inode->i_devices 的链表头
dev_t dev; //设备号
unsigned