Flattened设备树有什么用 - Linux Kernel

Kat*_*och 7 linux-device-driver linux-kernel u-boot device-tree

我正在经历Uboot和内核启动过程.FDT(平面设备树)的用途究竟是什么?

许多链接我已经读过他们声明uboot以FDT的形式将板和SOC配置信息传递给内核

https://wiki.freebsd.org/FlattenedDeviceTree

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

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

现在,如果我的片上和片上器件的设备驱动程序正在进行全板初始化.
那么flattened device tree内核的用途是什么?

The*_*ist 9

您是正确的,假设板上文件和设备树是片上模块和片外外设初始化所必需的.

  1. 在启动时,SoC的所有片上模块和与其连接的片外外设的相应驱动器需要被"探测",即加载和调用.在USB和PCI等总线上,可以物理地检测外设并枚举它们并探测相应的驱动程序.但是一般情况下这样的设备是不可用的,其余的总线上的其余外设如I2C,SPI等.

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

以上两类信息即

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

通常被定义为structs" board "文件.

但是,使用board-file方法需要重新构建内核,甚至在初始化期间简单地将可配置选项修改为不同的值.此外,当存在几个物理板的拓扑/配置略有不同时,"板"文件方法变得太难以维护.

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


在开发自己的设备驱动程序时,如果您的平台支持设备树,则建议您使用设备树来存储设备驱动程序所需的"平台数据".这应该可以帮助您明确区分:

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

  • 设备的特定于此平台的配置选项进入设备树.

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