【问题标题】:How linux kernel get data from the Device tree?linux内核如何从设备树中获取数据?
【发布时间】:2015-01-27 01:25:43
【问题描述】:

我是 Linux 内核的初学者。
据我所知,在旧版本的内核中有一个特定于板的文件,其中注册了所有设备(通过使用一些 API,如 platform_get_register 等)。
在较新版本的内核中,设备所需的信息通过设备树传递。
我的问题是内核如何从设备树中获取驱动程序的信息? 设备如何通过设备树在内核中注册?

【问题讨论】:

标签: linux-kernel linux-device-driver device-tree


【解决方案1】:

如果您指的是 OpenFirmware 设备树,它们会被打包成一种特殊格式(dtb 映像)并由引导加载程序连同内核映像一起放入 RAM。然后,Bootloader 调用内核入口点,将 RAM 中 dtb 映像的地址作为参数之一传递。

然后,位于<kernel>/drivers/of 子目录中的内核子系统将遍历树,并且对于支持的每个设备条目,它将尝试通过device_add() 和朋友创建所需的设备(在 Linux 中创建设备的常用过程)。如果驱动子系统可以找到合适的驱动,那么该驱动的*_probe()回调将能够从传递给它的(可能是子类的)device对象获取在OF设备条目中找到的参数。

【讨论】:

  • 感谢您的回复。我还有一些疑问,1)如果我们通过设备树传递一个寄存器,那么我们如何访问驱动程序/内核中的寄存器? 2)还有其他类似device_add()的API吗?
  • 1.您可以使用 of_find_property()/of_get_child_by_name()/of_find_node_by_path()/etc 函数从 OF 树中挖掘任意数据。它只是一个树形结构的字符串集合,没有什么神奇之处。 2. 运行Linux实例的所有设备最终都是由device_add()和好友创建的。您可能还需要哪些其他 API?
猜你喜欢
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
  • 2015-10-20
  • 1970-01-01
  • 2014-05-26
  • 2011-05-28
  • 1970-01-01
相关资源
最近更新 更多