在zynq開發(fā)中經(jīng)常會(huì)修改設(shè)備樹,每次遇到這種情況都有點(diǎn)發(fā)愁,今天把設(shè)備樹相關(guān)的知識(shí)點(diǎn)總結(jié)一下,希望以后遇到設(shè)備樹時(shí),能夠自如應(yīng)對(duì)。
什么是設(shè)備樹
設(shè)備樹時(shí)描述硬件的數(shù)據(jù)結(jié)構(gòu),Linux系統(tǒng)可以通過設(shè)備樹了解硬件結(jié)構(gòu),不需要進(jìn)行編碼。
設(shè)備樹文件類型
- DTSI: 設(shè)備樹頭文件,類似C語言中的.h文件,供DTS文件調(diào)用。
- DTS:.dts文件是設(shè)備樹的源文件。相當(dāng)于C語言的.c文件。
- DTC:DTC是將.dts編譯為.dtb的工具,相當(dāng)于gcc。
- DTG:Xilinx設(shè)備樹編譯工具。
- DTB:.dtb文件是 .dts 被 DTC 編譯后的二進(jìn)制格式的設(shè)備樹文件,它可以被linux內(nèi)核解析。
DTS語法介紹
每個(gè)module在設(shè)備樹中被定義成node。在dts文件中,一個(gè)node被定義成
[label:]node-name[@unit-address]{
[properties definitions]
[child nodes]
}
- [lable:]: 設(shè)備樹文件允許標(biāo)簽附加在任何節(jié)點(diǎn)或者屬性上。
- node-name:是指節(jié)點(diǎn)的名字。
- [@unit-address]:是指節(jié)點(diǎn)所在的基地址。
- [properties definitions]:是指相關(guān)屬性的定義。
- [child nodes]:是指相關(guān)的子節(jié)點(diǎn)
以如下設(shè)備樹為例:
/ {
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>;
};
- “/”代表根節(jié)點(diǎn);
- “compatible”為平臺(tái)兼容;
- #address-cells是address的單板(32bit)
- #size-cells”是length的單位(32bit)
- ”chosen“是板級(jí)啟動(dòng)參數(shù)
- "memory"是板級(jí)內(nèi)存的信息。
- “device_type":設(shè)備類型,尋找節(jié)點(diǎn)可以依據(jù)這個(gè)屬性;
KV260中的設(shè)備樹文件
在petalinux工程中設(shè)備主要在三個(gè)地方,其中plnx-proj-root為工程目錄名。
1、plnx-proj-root/project-spec/meta-user/recipes-bsp/devicetree/files/:
- 系統(tǒng)用戶.dtsi
- xen.dtsi文件
- pl-custom.dtsi
- 打開放大器.dtsi
- xen-qemu.dtsi
其中system-user.dtsi是主要修改的文件,該文件中的內(nèi)容具有更好優(yōu)先級(jí)。
例如要增加phy芯片信息,可以在system-user.dtsi增加如下內(nèi)容。
/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/

我理解這個(gè)文件夾中的內(nèi)容,需要添加到system-user.dtsi才會(huì)起作用。
3、/組件/plnx_workspace/設(shè)備樹/設(shè)備樹/
文件夾的內(nèi)容不建議修改。

重點(diǎn)看以下文件:
- pl.dtsi: 這是一個(gè)所有內(nèi)存映射外設(shè)邏輯 (PL) IP 節(jié)點(diǎn)都可用的文件。
- pcw.dtsi: 這是一個(gè)文件,其中包含 PS 外設(shè)所需的動(dòng)態(tài)屬性。
- system-top.dts: 這是一個(gè)包含內(nèi)存信息、早期控制臺(tái)和引導(dǎo)參數(shù)的文件。
- zynqmp.dtsi: 此文件包含所有 PS 外設(shè)信息以及 cpu 信息。
- zynqmp-clk-ccf.dtsi: 該文件包含外設(shè) IP 的所有時(shí)鐘信息。
- zynqmp-smk-k26-reva.dtsi :它包含所有板特定的屬性。
system-top.dts中文件內(nèi)容如下:
/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"
由文件內(nèi)容可知,該文件為頂層文件,調(diào)用各個(gè)模塊,最后調(diào)用system-user.dtsi,所以system-user.dtsi中內(nèi)容優(yōu)先級(jí)最高。 該文件夾中沒有調(diào)用plnx-proj-root/project-spec/dts_dir/中的文件,所以dts_dir文件夾中內(nèi)容沒有起作用。
Devicetree Generator (DTG)
Xilinx設(shè)備樹生成工具DTG,幫助用戶構(gòu)建特定硬件的設(shè)備樹。 不用使用手動(dòng)編譯過程,直接從XSA文件獲取和硬件信息。
內(nèi)核引導(dǎo)參數(shù)
“Kernel Bootargs”子菜單允許 PetaLinux 在 DTS 中自動(dòng)生成內(nèi)核啟動(dòng)命令行設(shè)置,或者傳遞 PetaLinux 用戶定義的內(nèi)核啟動(dòng)命令行設(shè)置。 以下是默認(rèn)的 bootargs。
zynqmp -- earlycon clk_ignore_unused root=/dev/ram0 rw
如果希望在控制臺(tái)上看到內(nèi)核錯(cuò)誤打印信息,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
+關(guān)注
關(guān)注
88文章
11622瀏覽量
217822 -
Xilinx
+關(guān)注
關(guān)注
73文章
2192瀏覽量
129823 -
C語言
+關(guān)注
關(guān)注
183文章
7642瀏覽量
144525 -
Zynq
+關(guān)注
關(guān)注
10文章
625瀏覽量
49207 -
設(shè)備樹
+關(guān)注
關(guān)注
0文章
40瀏覽量
3525
發(fā)布評(píng)論請(qǐng)先 登錄
iTOP-iMX6開發(fā)板-設(shè)備樹內(nèi)核-注冊(cè)驅(qū)動(dòng)例程
【正點(diǎn)原子FPGA連載】第二十章另一種方式編譯ZYNQ鏡像-領(lǐng)航者ZYNQ之linux開發(fā)指南
【正點(diǎn)原子FPGA連載】第二十四章Linux設(shè)備樹-領(lǐng)航者ZYNQ之linux開發(fā)指南
迅為iMX6開發(fā)板- 設(shè)備樹內(nèi)核-設(shè)備樹相關(guān)文件簡(jiǎn)要分析
迅為iMX6開發(fā)板-設(shè)備樹內(nèi)核-注冊(cè)設(shè)備例程
iMX6開發(fā)板設(shè)備樹文件分析
淺析嵌入式linux中ARM板設(shè)備樹路徑設(shè)備樹的信息
設(shè)備樹開發(fā)的相關(guān)資料下載
請(qǐng)問設(shè)備樹中的gpio號(hào)怎么確定?
【米爾-TIAM62開發(fā)板-接替335x-試用評(píng)測(cè)】+(三)手把手創(chuàng)建Uboot設(shè)備樹與內(nèi)核設(shè)備樹實(shí)戰(zhàn)
以Xilinx Zynq-7000為例說明設(shè)備樹的運(yùn)用
Petalinux工程中設(shè)備樹的介紹
設(shè)備樹的傳遞及kernel 對(duì)設(shè)備樹的解析
Linu設(shè)備樹及其語法介紹

zynq開發(fā)中的設(shè)備樹
評(píng)論