7

我正在经历 Uboot 和内核启动过程。FDT(平面设备树)到底有什么用?

我读过的许多链接都指出,uboot 以 FDT 的形式将板和 SOC 配置信息传递给内核

https://wiki.freebsd.org/FlattenedDeviceTree

为什么内核需要主板配置信息?

我问这个问题是因为当我们在 linux 中制作设备驱动程序时,我们使用在 probe() 或 module_init() 调用时初始化设备并使用 request_mem_region() 和 ioremap() 函数来获取地址范围然后设置时钟&其他司机登记。
request_mem_region() 实际做什么以及何时需要?

现在,如果我的片上和片外设备的设备驱动程序正在进行全板初始化。
那么flattened device tree内核有什么用呢?

4

1 回答 1

9

您假设文件和设备树是片上块和片外外围设备初始化所必需的,这是正确的。

  1. 在启动时,需要“探测”SoC 的所有片上模块和与其接口的片外外围设备的相应驱动程序,即加载和调用。在 USB 和 PCI 等总线上,可以物理检测和枚举外围设备并探测其相应的驱动程序。然而,一般来说,如果其他总线上的其他外围设备(如 I2C、SPI 等)上的其他外围设备不可用,那么这种设施是不可用的。

  2. 除了上述之外,当探测设备驱动程序时,还需要向它提供一些关于我们打算配置和使用硬件的方式的信息。这取决于用例。例如,我们希望操作 UART 端口的波特率。

上述两类信息,即

  • 硬件的物理拓扑。
  • 硬件的配置选项。

通常structs在“ board ”文件中定义。

然而,使用板文件方法需要重新构建内核,甚至在初始化期间简单地将可配置选项修改为不同的值。此外,当存在几个拓扑/配置略有不同的物理板时,“板”文件方法变得过于繁琐而无法维护。

因此,有兴趣在设备树中单独维护此信息。任何设备驱动程序都可以解析设备树的相关分支和叶子以获取所需的信息。


在开发自己的设备驱动程序时,如果您的平台支持设备树,那么鼓励您利用设备树来存储设备驱动程序所需的“平台数据”。这应该可以帮助您清楚地分开:

  • < driver.c > 文件中您设备的通用驱动程序代码和

  • 特定于该平台的设备配置选项到device-tree中。

将 Linux 内核移植到板/SoC的分步方法应该可以帮助您了解所涉及的细微差别以及使用设备树的优势。

于 2014-04-02T05:54:55.203 回答