[linux device driver] Chapter 14:kobject_init的理解
2015-02-23 15:59
405 查看
文章描述了好几个步骤,首先是清空kobject,这通常是使用memset清零包含kobject的结构体,比如:
而scullc_devices就包含了kobject.
第二步是使用kobject_init设置内部变量,这个过程是scullc_setup_cdev调用cdev_init实现的:
从上面来看,是将kobject的引用计数设置为1,
其他相关的问题,可以参照这篇文章,相当完整:设备模型-kobject详解
memset(scullc_devices, 0, scullc_devs*sizeof (struct scullc_dev)); for (i = 0; i < scullc_devs; i++) { scullc_devices[i].quantum = scullc_quantum; scullc_devices[i].qset = scullc_qset; sema_init (&scullc_devices[i].sem, 1); scullc_setup_cdev(scullc_devices + i, i); }
而scullc_devices就包含了kobject.
第二步是使用kobject_init设置内部变量,这个过程是scullc_setup_cdev调用cdev_init实现的:
void cdev_init(struct cdev *cdev, struct file_operations *fops) { memset(cdev, 0, sizeof *cdev); INIT_LIST_HEAD(&cdev->list); cdev->kobj.ktype = &ktype_cdev_default; kobject_init(&cdev->kobj); cdev->ops = fops; }然后深入分析kboject_init:
void kobject_init(struct kobject * kobj) { kref_init(&kobj->kref);//将引用计数设置为1 INIT_LIST_HEAD(&kobj->entry);//初始化list kobj->kset = kset_get(kobj->kset);//设置kobj } void kref_init(struct kref *kref) { atomic_set(&kref->refcount,1); } static inline struct kset * to_kset(struct kobject * kobj) { return kobj ? container_of(kobj,struct kset,kobj) : NULL; } static inline struct kset * kset_get(struct kset * k) { return k ? to_kset(kobject_get(&k->kobj)) : NULL; }
从上面来看,是将kobject的引用计数设置为1,
其他相关的问题,可以参照这篇文章,相当完整:设备模型-kobject详解
相关文章推荐
- [linux device driver] Chapter 03:IS_ERR的理解
- [linux device driver] Chapter 03:scull_load脚本理解
- [linux device driver] Chapter 03:scullc_open理解
- [linux device driver] Chapter 03:以scull_load为例,讲解bash中反单引号`、双引号等的作用
- [linux device driver]Chapter 03:scull_load中涉及到的bash命令 exit
- [linux device driver] Chapter 04:使用/proc文件系统查询调试
- [linux device driver] Chapter 03:make输出重定向
- linux 启动过程以及 /etc/rc.d/init.d/目录的一点理解
- 理解Linux系统:/etc/init.d/目录
- [转]linux 启动过程以及 /etc/rc.d/init.d/目录的一点理解
- [linux device driver] Chapter 03:从scull_load学习小括号,中括号,和大括号的区别
- linux 启动过程以及 /etc/rc.d/init.d/目录的一点理解
- linux 启动过程以及 /etc/rc.d/init.d/目录的一点理解
- chapter14:Linux帐号管理之(1)身份切换
- 深入理解Linux内核 Chapter1 introduction
- [linux device driver] Chapter 03:从scull_load了解awk
- Understanding Unix/Linux Programming 笔记:chapter 14:线程机制:并发函数的使用
- [学习指导] linux 启动过程以及 /etc/rc.d/init.d/目录的一点理解
- linux初始化对/etc/rc.d/init.d的理解
- linux 中shutdown init 0 halt poweroff命令之间的关系理解