device_register()分析.docx

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
device_register()分析

这篇文章也是从别的地方转载的,我的目的是搞清楚:当调用device_register()函数向系统注册一个设备的时候,我注册进去的设备是如何和他父设备关联起来的,以及如何加入到他所在的总线设备中的,但针对这个问题,好像通过这篇文章了解的并不透彻。但具体到代码分析的最后关于设备和驱动是如何绑定的,这并不是我这篇文章的重点,但大概看了一下,有点类型i2c总线上设备和驱动的匹配过程。看下图:?在分析程序的过程中看到了把kobj-kset赋值为(kset)device_kset(即图中黑线实现的部分),但没有看到什么时候把dev-kobj-parent赋值为device_kset-kobj(图中的红线实现的部分),在调用函数setup_parent()中是对dev-kobject-parent赋值了,但不明白在setup_parent()函数中是怎么找到device_kset的。说实在话,对setup_parent()函数不明白,也没分析清楚。(在此补充一下,分析了一下setup_parent()函数,实现了红线的部分)?这篇文章将那个3个注册函数说说,把整个设备模型框架搭建起来,当然,是重点部分了。在这之前希望你已经懂得总线、设备、驱动的数据结构及其里面的有关数据结构。关于调用的函数,如果显示为粗体,那么在下面我有分析。?转载于:/space.php?uid=111596do=blogid=56043/space.php?uid=111596do=blogid=56043来自:drivers/base/core.cint device_register(struct device *dev){??device_initialize(dev);???????????????? //初始化设备 return?device_add(dev);????????????? //添加设备}void device_initialize(struct device *dev){??//图中的黑线实现部分的代码??dev-kobj.kset = devices_kset;?//设置设备的kobject所属集合,devices_kset其实在第一层,sys/devices/ kobject_init(dev-kobj, device_ktype);?????? //初始化设备的kobject INIT_LIST_HEAD(dev-dma_pools);?????????? //初始化设备的DMA池,用于传递/base/20大数据 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);}int device_add(struct device *dev){ struct device *parent = NULL; struct class_interface *class_intf; int error = -EINVAL; dev = get_device(dev);???????? //增加设备的kobject的引用计数 if (!dev) goto done; if (!dev-p) {? error =?device_private_init(dev);???????????? //初始化设备的私有成员 if (error) goto done; } /*?* for statically allocated devices, which should all be converted?* some day, we need to initialize the name. We prevent reading back?* the name, and force the use of dev_name()?*/ if (dev-init_name) { dev_set_name(dev, %s, dev-init_name);???????? //设置设备kobject的名称 dev-init_name = NULL; } if (!dev_name(dev)) { error = -EINVAL; goto name_error; } pr_debug(device: %s:

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档