我正在浏览Uboot&内核启动过程。 FDT(平面设备树)的用途究竟是什么?
许多链接我已经读过他们说uboot通过了电路板& SOC配置信息以FDT的形式提供给内核
https://wiki.freebsd.org/FlattenedDeviceTree
为什么内核需要板配置信息?
我问这个问题,因为当我们在linux中创建设备驱动程序时,我们使用probe()或module_init()调用&amp ;;来初始化设备。使用request_mem_region()& ioremap()函数获取地址范围 &安培;然后设置时钟&其他司机登记 What does request_mem_region() actually do and when it is needed?
现在,如果我的设备驱动器为onchip& offchip设备正在进行全板初始化
那么flattened device tree
对内核有什么用?
答案 0 :(得分:9)
您认为片上模块和片外外设初始化需要板文件和设备树,这是正确的。
启动时,SoC的所有片上模块的各个驱动器和与其连接的片外外设都需要“探测”即加载和调用。在USB和PCI等总线上,可以物理地检测外设并枚举它们并探测相应的驱动程序。但是一般情况下,这样的设施是不可用的,其余部分外围设备的情况如I2C,SPI等。
除此之外,当探测设备驱动程序时,还需要向其提供有关我们打算配置和使用硬件的方式的一些信息。这取决于用例。例如,我们想要操作UART端口的波特率。
以上两类信息,即
通常在“主板”文件中定义为structs
。
然而,使用board-file方法需要重新构建内核,甚至在初始化期间简单地将可配置选项修改为不同的值。此外,当存在多个物理板的拓扑/配置略有不同时,“板”文件方法变得太难以维护。
因此,有兴趣在设备树中单独维护此信息。任何设备驱动程序都可以解析设备树的相关分支和叶子,以获取所需的信息。
在开发自己的设备驱动程序时,如果您的平台支持设备树,则建议您使用设备树来存储设备驱动程序所需的“平台数据”。这应该可以帮助您明确分开:
< driver.c >中设备的通用驱动程序代码文件和
特定于此平台的设备配置选项进入 设备树 。
porting the Linux kernel to a board/SoC的逐步方法应该有助于您了解所涉及的细微差别以及使用设备树的优势。