2024年6月9日发(作者:)
一)驱动注册open函数都干了些什么?
二)register_chrdev -> cdev_add -> kobj_map
三)file: fs/char_dev.c
四)int register_chrdev(unsigned int major, const char *name,
五)const struct file_operations *fops)
六){
七)struct char_device_struct *cd;
八)struct cdev *cdev;
九)char *s;
十)int err = -ENOMEM;
十一)cd = __register_chrdev_region(major, 0, 256, name);
十二)if (IS_ERR(cd))
十三)return PTR_ERR(cd);
十四)cdev = cdev_alloc();
十五)if (!cdev)
十六)goto out2;
十七)cdev->owner = fops->owner;
十八)cdev->ops = fops; // 注意,在后面的 chrdev_open会从cdev再得到
fops
十九)...
二十)}
二十一)file: fs/char_dev.c
二十二)int cdev_add(struct cdev *p, dev_t dev, unsigned count)
二十三){
二十四)p->dev = dev;
二十五)p->count = count;
二十六)return kobj_map(cdev_map, dev, count, NULL, exact_match, exact_lock, p);
二十七)}
二十八)file: fs/char_dev.c
二十九)static struct kobject *exact_match(dev_t dev, int *part, void *data)


发布评论