Linux kernel 扁平化设备树Linux内核的用途是什么

Linux kernel 扁平化设备树Linux内核的用途是什么,linux-kernel,linux-device-driver,u-boot,device-tree,Linux Kernel,Linux Device Driver,U Boot,Device Tree,我正在经历Uboot和内核启动过程。FDT(平面设备树)的具体用途是什么 我读到的许多链接都指出uboot以FDT的形式将板和SOC配置信息传递给内核 为什么内核需要板配置信息 我问这个问题是因为当我们在linux中创建设备驱动程序时,我们使用probe()或module_init()调用初始化设备,并使用request_mem_region()和ioremap()函数获取地址范围 &然后设置驱动程序的时钟和其他寄存器。 现在,如果我的片上和片外设备驱动程序正在进行全板初始化。 那么,对于内

我正在经历Uboot和内核启动过程。FDT(平面设备树)的具体用途是什么

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

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

我问这个问题是因为当我们在linux中创建设备驱动程序时,我们使用probe()或module_init()调用初始化设备,并使用request_mem_region()和ioremap()函数获取地址范围 &然后设置驱动程序的时钟和其他寄存器。

现在,如果我的片上和片外设备驱动程序正在进行全板初始化。

那么,对于内核,
扁平化设备树
有什么用呢?

您正确地假设了文件和设备树是片内块和片外外围设备初始化所必需的

  • 启动时,需要“探测”SoC的所有片内块和与之接口的片外外围设备的相应驱动程序,即加载和调用。在USB和PCI等总线上,可以对外围设备进行物理检测和枚举,并探测其相应的驱动程序。然而,在其他总线(如I2C、SPI等)上的其他外围设备的情况下,通常不提供此类设施

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

  • 上述两类信息,即

    • 硬件的物理拓扑
    • 硬件的配置选项
    通常定义为“”文件中的
    结构

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

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


    在开发自己的设备驱动程序时,如果您的平台支持设备树,则鼓励您使用设备树存储设备驱动程序所需的“平台数据”。这将有助于您明确区分:

    • 文件中设备的通用驱动程序代码,以及

    • 将特定于此平台的设备配置选项放入设备树中


    一步一步的方法应该可以帮助您了解使用设备树所涉及的细微差别和优势。

    您关于如何配置设备驱动程序的一些概念现在已经与设备树过时。无意冒犯,但这里有一个使用设备树的意图。Thomas Petazzoni在@sawdust也有一些幻灯片演示,所以你的意思是说prob(0&module_init()或init_module())这些函数不用于驱动程序初始化…但我在我的RPi硬件上使用了相同的概念..意思是创建一个可加载的模块,用于在init_module()中执行其所有初始化函数…使用insmod()命令加载此模块并使用它…所以您想说现在我们在Linux内核中不使用可移植内核模块的概念…?请建议…!!“您的意思是说…”--我没有写或暗示任何与你推测的相近的东西。在前面提到的视频和幻灯片演示中,已经清楚地描述了板文件和平台数据与设备树的旧方法。因此,与其猜测和疯狂地曲解我写的简单句子,不如点击这些链接。是的,视频解释了每一个问题ing..有一件事我想知道..哪个版本的内核是第一个走向设备树实现的版本…?这些天所有的现代SOC都遵循扁平化的设备树来向内核传递信息,还是工业上使用的仍然旧的方法..对于ARM,设备树首先出现在Linux 3.1中。你的第二个问题是“或”的每一方都没有相互排斥的条款。