如何编写Linux .dts设备树文件?

时间:2013-07-05 11:54:50

标签: linux linux-kernel device-tree

我要在我的开发板上启动Linux,我需要一个dts文件(设备树文件)来描述整个硬件。但我对这个文件的语法知之甚少,这还不足以在主板上正确运行Linux。

我现在知道的只是如何描述一个单元的中断号,频率,地址,父单元及其兼容的驱动程序类型(如下所述):

ps7_scuwdt_0: ps7-scuwdt@f8f00620 {
                        compatible = "xlnx,ps7-scuwdt-1.00.a";
                        device_type = "watchdog";
                        interrupt-parent = <&ps7_scugic_0>;
                        interrupts = < 1 14 769 >;
                        reg = < 0xf8f00620 0xe0 >;
                } ;

我不熟悉其他高级用法或语法。

4 个答案:

答案 0 :(得分:16)

看看董事会的dts,它与你的开发板非常相似。使用它作为参考,并根据参考板和开发板之间的差异对dts进行更改。

同时检查以下内容:
  - Device-tree Documentation project在eLinux(有很多链接可以开始阅读)   - Series of articles关于设备树的基础知识   - Walkthrough迁移到设备树。

答案 1 :(得分:4)

使用QEMU虚拟设备的最小reg + interrupt示例

我们的示例将以下设备树节点添加到QEMU将使用的versatilepb设备树-M versatilepb

lkmc_platform_device@101e9000 {
    compatible = "lkmc_platform_device";
    reg = <0x101e9000 0x1000>;
    interrupts = <18>;
    interrupt-controller;
    #interrupt-cells = <2>;
    clocks = <&pclk>;
    clock-names = "apb_pclk";
    lkmc-asdf = <0x12345678>;
};

然后,通过使用Linux内核模块与设备进行交互,我们将测试以下DTS功能:

  • 注册地址
  • 的IRQ
  • 从驱动程序中读取自定义属性

这些是示例的主要组成部分:

  • Linux versatile .dts patch on Linux fork
    • reginterrupt匹配QEMU多功能机器(代表SoC)中硬编码的数字
    • compatible匹配内核模块中的platform_driver.name,并通知内核哪个模块将处理此设备
    • 我们还将自定义属性传递给驱动程序:lkmc-asdf = <0x12345678>;,使用of_property_read_u32
    • 读取
    • 设备树通过-dtb参数
    • 传递给QEMU的固件
  • QEMU fork:
  • kernel module在探测器上写入内存以进行测试,这也会生成IRQ。

设备树还有许多我们尚未涉及的功能,但是这个示例应该让您入门,并且可以轻松地让您使用任何新功能。

更多资源:

答案 2 :(得分:3)

让我们举一个例子,我将解释其中的每一个如下

auart0: serial@8006a000 {
compatible = "fsl,imx28-auart", "fsl,imx23-auart";
reg = <0x8006a000 0x2000>;
interrupts = <112>;
dmas = <&dma_apbx 8>, <&dma_apbx 9>;
dma-names = "rx", "tx";
};

所需属性:
- 兼容:应该是“fsl,-auart”。支持的SoC包括 imx23和imx28。
- reg:为设备设置的寄存器的地址和长度
- 中断:应包含auart中断号码
- dmas:DMA说明符,由一个到DMA控制器节点的phandle组成 和AUART DMA通道ID - dma-names:RX通道的“rx”,TX通道的“tx”。

注意:每个auart端口都应该在“别名”中正确编号别名 节点。
如需更多高级属性,请转到此链接,非常有用 Device Tree Explanation

希望它有所帮助!

答案 3 :(得分:0)

与其他答案互补:

请记住,官方内核源代码中的root/Documentation/devicetreehttps://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree?h=v5.2-rc5)下还有一个设备树部分。