如何编写Linux.dts设备树文件?
我将在我的开发板上启动一个Linux,我需要一个dts文件(设备树文件)来描述整个硬件。但是我对这个文件的语法知之甚少,这还不足以在主板上正确运行Linux 我现在只知道如何描述单元的中断号、频率、地址、父单元及其兼容的驱动程序类型(如下所述):如何编写Linux.dts设备树文件?,linux,linux-kernel,device-tree,Linux,Linux Kernel,Device Tree,我将在我的开发板上启动一个Linux,我需要一个dts文件(设备树文件)来描述整个硬件。但是我对这个文件的语法知之甚少,这还不足以在主板上正确运行Linux 我现在只知道如何描述单元的中断号、频率、地址、父单元及其兼容的驱动程序类型(如下所述): ps7\u scuwdt\u 0:ps7-scuwdt@f8f00620 { compatible=“xlnx,ps7-scuwdt-1.00.a”; 设备类型=“看门狗”; 中断父项=; 中断=; reg=; } ; 其他高级用法或语法对我来说并不
ps7\u scuwdt\u 0:ps7-scuwdt@f8f00620 {
compatible=“xlnx,ps7-scuwdt-1.00.a”;
设备类型=“看门狗”;
中断父项=;
中断=<114769>;
reg=<0xf8f00620 0xe0>;
} ;
其他高级用法或语法对我来说并不熟悉。看看与开发板最相似的开发板的dts。将其用作参考,并根据参考板和开发板之间的差异对dts进行更改 同时检查以下内容:
-在eLinux(有大量链接可供阅读)。
-在设备树的基础上。
-迁移到设备树的方法。让我们举一个例子,我将在下面解释其中的每一个
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";
};
auart0:serial@8006a000 {
compatible=“fsl,imx28 auart”,“fsl,imx23 auart”;
reg=;
中断=;
dmas=;
dma名称=“接收”、“发送”;
};
所需属性:-兼容:应为“fsl,-auart”。受支持的SOC包括 imx23和imx28。
-reg:为设备设置的寄存器的地址和长度
-中断:应包含auart中断编号
-dmas:DMA说明符,由一个到DMA控制器节点的幻影组成 和AUART DMA信道ID。
-dma名称:rx信道为“rx”,tx信道为“tx”。
注意:每个auart端口都应该有一个在“别名”中正确编号的别名 节点。
有关更多高级属性,请访问此链接,它非常有用
希望有帮助 最小
reg
+中断
使用QEMU虚拟设备的示例
我们的示例将以下设备树节点添加到versatilepb
设备树中,QEMU将使用该设备树,因为-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>;
};
lkmc_平台_device@101e9000 {
compatible=“lkmc\u平台\u设备”;
reg=;
中断=;
中断控制器;
#中断单元=;
时钟=;
时钟名称=“apb_pclk”;
lkmc-asdf=;
};
然后,通过使用Linux内核模块与设备交互,我们将测试以下DTS功能:
- 注册地址
- IRQ
- 从驱动程序读取自定义属性
-
和reg
匹配QEMU多功能机器(代表SoC)中硬编码的数字中断
匹配内核模块中的compatible
,并通知内核哪个模块将处理此设备平台驱动程序.name
- 我们还将一个自定义属性传递给驱动程序:
lkmcasdf=代码>,使用属性的
读取
- 设备树通过
参数传递给QEMU的固件-dtb
- QEMU叉子:
- 它读取寄存器并生成中断
- 写入探测器上的内存以进行测试,这也会生成IRQ
- elinux教程:
- 使用
解决纯粹的语法问题。例如,它显示了如何通过路径简单地合并节点:dtc
请记住,在官方内核源代码的
根目录/Documentation/devicetree
()下还有一个关于devicetree的部分。非常感谢您的参考。不幸的是,第一个坏了。有合适的替代品吗?@rbrito谢谢你指出了死链接。移除它。使用过去几个月增长的更全面的来源更新link1。
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>;
};