20

我要在我的开发板上启动一个 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

4 回答 4

26

看一下与您的开发板最相似的板的 dts。将其用作参考并根据参考板和开发板之间的差异对 dts 进行更改。

还可以查看以下内容:
- eLinux 上的设备树文档项目(有大量链接可供开始阅读)。
-设备树基础系列文章。
-迁移到设备树的演练

于 2013-07-22T08:44:22.567 回答
5

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

我们的示例会将以下设备树节点添加到versatilepbQEMU 将使用的设备树中,原因-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 功能:

  • 注册地址
  • 中断请求
  • 从驱动程序读取自定义属性

这些是示例的主要组件:

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

设备树还有很多我们没有介绍的特性,但是这个例子应该可以帮助你入门,并且可以很容易地让你尝试任何出现的新特性。

更多资源:

于 2017-07-09T09:31:40.123 回答
4

让我们举个例子,我将在下面解释它们中的每一个

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";
};

必需的属性:
- compatible:应该是“fsl,-auart”。支持的 SoC 包括 imx23 和 imx28。
- reg:设备寄存器集的地址和长度
- interrupts:应包含 auart 中断号
- dmas:DMA 说明符,由 DMA 控制器节点的 phandle 和 AUART DMA 通道 ID 组成。
- dma 名称:“rx”用于 RX 通道,“tx”用于 TX 通道。

注意:每个 auart 端口都应该有一个在“别名”节点中正确编号的别名。
更多高级属性请到此链接,非常有用的
设备树说明

希望能帮助到你!

于 2016-06-29T14:22:23.487 回答
0

补充其他答案:

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

于 2019-06-17T07:05:39.110 回答