
本文討論如何在構建時和運行時為處理器系統 (PS) 的各組成部分或各可編程邏輯 (PL) IP 添加或修改設備樹更改,以及如何調試與設備樹相關的問題。
1.為現有 PL 節點和自定義 PL 節點修改設備樹
1.1 了解設備樹結構
AMD Zynq? /ZynqMP/Versal? 的設備樹是使用 PetaLinux 工具從 .xsa 文件自動生成的。其中包括:
SoC 外設:UART、SPI、I2C 等
存儲器節點
PL 節點(如果在 .xsa 中存在)
1.2 設備樹文件的位置
在 PetaLinux 中:
project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi
在 Yocto 中:
<layer>/recipes-bsp/device-tree/files/*.dtsi
獨立設備樹倉庫:
從以下位置克隆:https://github.com/Xilinx/device-tree-xlnx
1.3 編輯現有節點示例
要修改 dwc3 節點,只需在 project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi 文件中添加以下節點。

1.4 添加自定義 PL 節點
如果您的 PL 中有自定義 IP 塊(例如 axi_gpio_0),其節點可能已經存在于從 .xsa 生成的 pl.dtsi 文件中。
要修改或添加屬性:
請勿直接編輯 pl.dtsi;它是從 .xsa 自動生成的。
在 system-user.dtsi 中覆蓋 PL 節點:

注釋:檢查是否在此路徑中自動生成該節點。僅限該節點存在時才從 system-user.dtsi 修改或添加節點,以避免構建錯誤。
要手動添加新的 PL 節點:

如何添加子節點:

注釋:在更新之前,檢查子節點的現有節點并將其用作參考。
刪除設備樹節點屬性
示例 1:您需要移除以下節點中的 phys:

解決方案:在 system-user.dtsi 中添加以下內容:

在設備樹中移除 iic_main 節點。
#pl.dtsi 內容

#system-top.dts 內容

解決方案:在 system-user.dtsi 中添加以下內容
注釋:在刪除該節點之前,請確保已刪除別名和其他引用。

2.在 U-Boot 和 Linux 中讀取/寫入設備樹屬性
U-Boot 使用扁平設備樹 (FDT)。您可以使用 fdt 命令對其進行操作。
讀取屬性
fdt addr ${fdtcontroladdr}
(fdt get value <var> <path> <property> )
例如:fdt get value val /axi/ethernet@ff0c0000 mac-address
寫入屬性
fdt set <path> <property> <value>
例如:fdt set /axi/ethernet@ff0c0000 mac-address [00 0a 35 00 01 02]
列出節點
fdt list /
fdt list /axi
使用 FDT 從 U-boot 更改存儲器節點。
存儲器配置設備樹:
方法 :在 <plnx-proj-root>/project-spec/meta-user/recipes-bsp/devcie-tree/files/system-user.dtsi 中添加以下內容:




從 Linux 讀取設備樹:
讀取屬性
cat /proc/device-tree/<node>/<property>
例如:cat /proc/device-tree/axi/ethernet@ff0c0000/mac-address
反編譯 dtb 用于調試
dtc -I dtb -O dts -o extracted.dts /proc/device-tree
注釋:/proc/device-tree 是當前設備樹的實時表示法。
3.設備樹問題的調試技巧
常見癥狀
器件節點不執行探測(未綁定任何驅動程序)。
內核 dmesg 顯示“OF: no match for compatible.”
/sys/class/、/dev/ 等中未出現器件2。
調試檢查表
1. 檢查節點中的 status 是否為“okay”。
2. 確保 compatible 字符串與驅動程序的 of_match_table 匹配。
3. 驗證 reg、interrupts 和 clocks 的值。
4. 確保節點未被覆蓋;后面的 include 可以覆蓋先前的定義。
5. 在內核中啟用 CONFIG_OF_ 選項。
6. 重新編譯 DTS 并更新 DTB。
反編譯并檢查 DTB
dtc -I dtb -O dts -o out.dts system.dtb
在 Linux 中檢查驅動程序綁定
dmesg | grep -i <compatible-string>
ls /sys/bus/platform/devices/
4. 通過 HSI 從 XSA 文件調試設備樹
hsi 用于從 .xsa 中提取硬件信息,以進行設備樹生成/調試。
使用 hsi 查詢 PL 地址映射、時鐘、外設:
open_hw_design design.xsa
get_cells -hier
report_property [get_cells axi_gpio_0]
有助于確保設備樹中地址和時鐘信息的準確性。
4.1 基本 HSI 腳本示例
打開 XSA:
open_hw_design <path_to_xsa_file>
set cpu [get_cells -hier -filter {IP_TYPE == "psu_cortexa53"}]
列出可用外設(列出 IP):
get_cells -hier
獲取 IP 屬性
get_property IP_NAME [hsi get_cells]
檢查 PL IP 的屬性
get_property CONFIG.PCW_FPGA0_PERIPHERAL_FREQMHZ [get_os]
4.2 導出設備樹

這樣會生成:
system.dts
pl.dtsi
pcw.dtsi
4.3 確認設備樹綁定
您可以編寫 Tcl 腳本來執行以下操作:
交叉檢查寄存器地址
檢查時鐘分配
列出存儲器映射
列出狀態為“disabled”的 IP
