注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

学习笔记

正确的方法如同学习书法,开始的时候要临摹,临摹好了然后创造自己的风格。

 
 
 

日志

 
 

[Linux笔记]Device '%s' does not have a release() function  

2013-03-14 19:53:36|  分类: Linux |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

出现错误:Device '%s' does not have a release() function, it is broken and must be fixed.的解决办法。

首先追踪错误信息的来源,位于文件drivers/base/core.c的函数device_release中。当找不到release函数时,就会报错。

static void device_release(struct kobject *kobj)

{

       struct device *dev = to_dev(kobj);

       struct device_private *p = dev->p;

 

       if (dev->release)

              dev->release(dev);

       else if (dev->type && dev->type->release)

              dev->type->release(dev);

       else if (dev->class && dev->class->dev_release)

              dev->class->dev_release(dev);

       else

              WARN(1, KERN_ERR "Device '%s' does not have a release() "

                     "function, it is broken and must be fixed.\n",

                     dev_name(dev));

       kfree(p);

}

该函数被赋值给了kobj_type类型的结构体device_ktype中的release成员。

static struct kobj_type device_ktype = {

       .release    = device_release,

       .sysfs_ops       = &dev_sysfs_ops,

       .namespace     = device_namespace,

};

kobj_type类型的结构体device_ktype则会在函数device_initialize中被调用。

void device_initialize(struct device *dev)

{

       dev->kobj.kset = devices_kset;

       kobject_init(&dev->kobj, &device_ktype);

       INIT_LIST_HEAD(&dev->dma_pools);

       mutex_init(&dev->mutex);

       lockdep_set_novalidate_class(&dev->mutex);

       spin_lock_init(&dev->devres_lock);

       INIT_LIST_HEAD(&dev->devres_head);

       device_pm_init(dev);

       set_dev_node(dev, -1);

}

device_initialize则会在device_registerplatform_device_register等调用时被调用。因此使用这些函数来注册device结构时,应该实现相应的release函数,可以为空函数。比如:

static void xxxxx_device_release(struct device *dev)

{

}

 

  评论这张
 
阅读(1031)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017