在zynq开发中经常会修改设备树,每次遇到这种情况都有点发愁,今天把设备树相关的知识点总结一下,希望以后遇到设备树时,能够自如应对。
什么是设备树
设备树时描述硬件的数据结构,Linux系统可以通过设备树了解硬件结构,不需要进行编码。
设备树文件类型
- DTSI: 设备树头文件,类似C语言中的.h文件,供DTS文件调用。
- DTS:.dts文件是设备树的源文件。相当于C语言的.c文件。
- DTC:DTC是将.dts编译为.dtb的工具,相当于gcc。
- DTG:Xilinx设备树编译工具。
- DTB:.dtb文件是 .dts 被 DTC 编译后的二进制格式的设备树文件,它可以被linux内核解析。
DTS语法介绍
每个module在设备树中被定义成node。在dts文件中,一个node被定义成
[label:]node-name[@unit-address]{
[properties definitions]
[child nodes]
}
- [lable:]: 设备树文件允许标签附加在任何节点或者属性上。
- node-name:是指节点的名字。
- [@unit-address]:是指节点所在的基地址。
- [properties definitions]:是指相关属性的定义。
- [child nodes]:是指相关的子节点
以如下设备树为例:
/ {
compatible = "xlnx,zynqmp";
#address-cells = <2>;
#size-cells = <2>;
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu0: cpu@0 {
compatible = "arm,cortexa53", "arm,armv8";
device-type = "cpu";
enable-method = "psci";
operating-points-v2 = <&cpu_opp_table>;
reg = <0x0>;
cpu-idle-states = <&CPU_SLEEP_0>;
};
cpu1: cpu@1 {
compatible = "arm,cortexa53", "arm,armv8";
device-type = "cpu";
enable-method = "psci";
operating-points-v2 = <&cpu_opp_table>;
reg = <0x1>;
cpu-idle-states = <&CPU_SLEEP_0>;
};
};
chosen {
bootargs = "earlycon clk_ignore_unused";
};
memory {
device-type = "memory";
reg = <0x0 0x0 0x0 0x80000000>, <0x00000008 0x0 0x0 0x80000000>;
};
- “/”代表根节点;
- “compatible”为平台兼容;
- #address-cells是address的单板(32bit)
- #size-cells”是length的单位(32bit)
- ”chosen“是板级启动参数
- "memory"是板级内存的信息。
- “device_type":设备类型,寻找节点可以依据这个属性;
KV260中的设备树文件
在petalinux工程中设备主要在三个地方,其中plnx-proj-root为工程目录名。
1、plnx-proj-root/project-spec/meta-user/recipes-bsp/devicetree/files/:
- 系统用户.dtsi
- xen.dtsi文件
- pl-custom.dtsi
- 打开放大器.dtsi
- xen-qemu.dtsi
其中system-user.dtsi是主要修改的文件,该文件中的内容具有更好优先级。
例如要增加phy芯片信息,可以在system-user.dtsi增加如下内容。
/dts-v1/;
/include/ "system-conf.dtsi"
/ {
};
&gem0 {
phy-handle = <&phy0>;
ps7_ethernet_0_mdio: mdio {
phy0: phy@7 {
compatible = "marvell,88e1116r";
device_type = "ethernet-phy";
reg = <7>;
};
};
};
plnx-proj-root/project-spec/dts_dir/
我理解这个文件夹中的内容,需要添加到system-user.dtsi才会起作用。
3、/组件/plnx_workspace/设备树/设备树/
文件夹的内容不建议修改。
重点看以下文件:
- pl.dtsi: 这是一个所有内存映射外设逻辑 (PL) IP 节点都可用的文件。
- pcw.dtsi: 这是一个文件,其中包含 PS 外设所需的动态属性。
- system-top.dts: 这是一个包含内存信息、早期控制台和引导参数的文件。
- zynqmp.dtsi: 此文件包含所有 PS 外设信息以及 cpu 信息。
- zynqmp-clk-ccf.dtsi: 该文件包含外设 IP 的所有时钟信息。
- zynqmp-smk-k26-reva.dtsi :它包含所有板特定的属性。
system-top.dts中文件内容如下:
/dts-v1/;
#include "zynqmp.dtsi"
#include "zynqmp-smk-k26-reva.dtsi"
#include "zynqmp-clk-ccf.dtsi"
#include "pcw.dtsi"
/ {
chosen {
bootargs = "earlycon";
stdout-path = "serial0:115200n8";
};
aliases {
};
memory {
device_type = "memory";
reg = <0x0 0x0 0x0 0x7ff00000>, <0x00000008 0x00000000 0x0 0x80000000>;
};
};
#include "system-user.dtsi"
由文件内容可知,该文件为顶层文件,调用各个模块,最后调用system-user.dtsi,所以system-user.dtsi中内容优先级最高。 该文件夹中没有调用plnx-proj-root/project-spec/dts_dir/中的文件,所以dts_dir文件夹中内容没有起作用。
Devicetree Generator (DTG)
Xilinx设备树生成工具DTG,帮助用户构建特定硬件的设备树。 不用使用手动编译过程,直接从XSA文件获取和硬件信息。
内核引导参数
“Kernel Bootargs”子菜单允许 PetaLinux 在 DTS 中自动生成内核启动命令行设置,或者传递 PetaLinux 用户定义的内核启动命令行设置。 以下是默认的 bootargs。
zynqmp -- earlycon clk_ignore_unused root=/dev/ram0 rw
如果希望在控制台上看到内核错误打印信息,system_user.dtsi 中添加
earlycon console= device,baud rate clk_ignore_unused root=/dev/ram rw
earlycon console=/dev/ttyPS0,115200 clk_ignore_unused root=/dev/ram rw
-
Linux
+关注
关注
87文章
11294浏览量
209343 -
Xilinx
+关注
关注
71文章
2167浏览量
121312 -
C语言
+关注
关注
180文章
7604浏览量
136701 -
Zynq
+关注
关注
10文章
609浏览量
47175 -
设备树
+关注
关注
0文章
38浏览量
3116
发布评论请先 登录
相关推荐
评论