void kobject_put(struct kobject *kobj); kobj:要减少引用计数的 kobject 的指针。 使用kobject_put()函数可以减少kobject的引用计数,当引用计数减为零时,表示没有代码再需要该kobject,并且可以安全地释放其占用的内存。通常每个kobject_get()都应该有对应的kobject_put()来减少引用计数,以确保在不再需要时能...
kobject_put是内核对象的释放函数,对应于kref的kref_put。可以看到,kobject_put仅仅是对kref_put的一个封装而已,向kref机制注册了kobject_release函数。 663staticvoidkobject_release(structkref*kref)664{665structkobject*kobj=container_of(kref,structkobject,kref);666#ifdefCONFIG_DEBUG_KOBJECT_RELEASE667unsign...
kobject_put是内核对象的释放函数,对应于kref的kref_put。可以看到,kobject_put仅仅是对kref_put的一个封装而已,向kref机制注册了kobject_release函数。 663staticvoidkobject_release(structkref *kref)664 {665structkobject*kobj=container_of(kref,structkobject, kref);666#ifdefCONFIG_DEBUG_KOBJECT_RELEASE667...
引用被释放时调用 kobject_put 减少引用计数,并在可能情况下释放对象。调用kref_put函数减少引用计数,注意与kref_get的区别,此时参数二为kobject_release,表示在引用计数为0时调用该函数。 图13kobjec_put函数结构 lib/kobject.c voidkobject_put(struct kobject *kobj) { if(kobj) { if(!kobj->state_initia...
kobject_put(kobj); kobj = NULL; } return kobj; } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. kobject_create:内部自动关联dynamic_kobj_type,有代码可以看出,sysfs_ops的show/store函数会将动态将attribute转换成kobj_attribute。并找到show/store方法运行,方便调用用户...
增加一个引用计数可通过kobject_get()函数完成: struct kobject * kobject_get(struct kobject *kobj); 该函数正常情况下返回一个指向kobject的指针,如果失败,则返回NULL指针。 减少引用计数通过kobject_put()完成: void kobject_put(struct kobject *kobj); ...
void kobject_put(struct kobject *kobj); 成功调用kobject_get()函数会增加kobject的引用计数,并且返回kobject的指针。当一个对象的引用被释放时时,将会调用kobject_put函数来减小引用计数,并且有可能会释放这个对象。 记住,kobject_init将会将引用计数设置为1,因此当你创建一个kobject时,你应当确保在释放引用的...
还有一个kobj的删除函数: [cpp]view plaincopyprint?voidkobject_del(structkobject *kobj){if(!kobj)return;sysfs_remove_dir(kobj);//删除sys目录相关文件kobj->state_in_sysfs = 0;kobj_kset_leave(kobj);//kset链表中删除kobj成员kobject_put(kobj->parent);//减少parent计数kobj->parent = NULL;} ...
void kobject_unregister(struct kobject * kobj);kobject注销函数。与kobject register()相反,它首先调用kobject del从设备层次中删除该对象,再调用kobject put()减少该对象的引用计数,如果引用计数降为0,则释放kobject对象。 2)Kobj type struct kobj_type { ...
*/voidkobject_put(struct kobject*kobj){if(kobj){if(!kobj->state_initialized)//如果没有初始化,调用put函数,打印logWARN(1,KERN_WARNING"kobject: '%s' (%p): is not ""initialized, yet kobject_put() is being ""called.\n",kobject_name(kobj),kobj);kref_put(&kobj->kref,kobject_release...