5

我需要获得一个指向在 linux 中注册的特定设备的指针。简而言之,这个设备代表一个mii_bus对象。问题是这个设备似乎不属于总线(它dev->busNULL)所以我不能使用例如功能bus_for_each_dev。但是,该设备已由 Open Firmware 层注册,我可以of_device/sys/bus/of_platform. 我的设备也在 a 中注册,class所以我可以在/sys/class/mdio_bus. 现在的问题:

  1. of_device可以使用指向我们想要的设备的父设备的指针来获取指针吗?

  2. 我怎样才能通过仅使用名称来获得指向已经实例化的类的指针?如果可能的话,我可以迭代该类的设备。

任何其他建议都会非常有用!谢谢你们。

4

1 回答 1

7

我找到了方法。我简要解释一下,也许它可能有用。我们可以使用的方法是device_find_child. 该方法将指针作为第三个参数,该指针指向实现比较逻辑的函数。如果函数在使用特定设备作为第一个参数调用时返回不为零,device_find_child则将返回该指针。

#include <linux/device.h>
#include <linux/of_platform.h>

static int custom_match_dev(struct device *dev, void *data)
{
  /* this function implements the comaparison logic. Return not zero if device
     pointed by dev is the device you are searching for.
   */
}

static struct device *find_dev()
{
  struct device *ofdev = bus_find_device_by_name(&of_platform_bus_type,
                                                 NULL, "OF_device_name");
  if (ofdev)
  {
    /* of device is the parent of device we are interested in */

    struct device *real_dev = device_find_child(ofdev,
                                                NULL, /* passed in the second param to custom_match_dev */
                                                custom_match_dev);
    if (real_dev)
      return real_dev;
  }
  return NULL;
}
于 2011-10-04T07:51:43.620 回答