設(shè)備樹是 Petalinux kernel 的關(guān)鍵組件,接下來以 2020.1 版本為例,為大家介紹一下在Xilinx Petalinux 工程中的設(shè)備樹是如何產(chǎn)生,配置以及修改的。
Petalinux 工程中設(shè)備樹的位置
當(dāng)我們創(chuàng)建了一個(gè) petalinux 工程后(以zcu102為例),在編譯的時(shí)候,會(huì)自動(dòng)生成對(duì)應(yīng)的設(shè)備樹文件。這些設(shè)備樹的描述信息通常在以下2個(gè)工程路徑下。
第一個(gè)是在 components/plnx_workspace/device-tree/device-tree 路徑下,這個(gè)路徑下主要保存的都是基于你導(dǎo)入的hdf/xsa后,自動(dòng)生成的設(shè)備樹信息。通常包括PS的設(shè)備樹,時(shí)鐘的設(shè)備樹,PL 部分 IP 的設(shè)備樹(Xilinx發(fā)布的包含驅(qū)動(dòng)的IP),以及設(shè)備樹頭文件。
。/components/plnx_workspace/device-tree/device-tree/zynqmp-clk-ccf.dtsi
。/components/plnx_workspace/device-tree/device-tree/zcu102-revc.dtsi
。/components/plnx_workspace/device-tree/device-tree/pl.dtsi
。/components/plnx_workspace/device-tree/device-tree/system-top.dts
。/components/plnx_workspace/device-tree/device-tree/zynqmp.dtsi
。/components/plnx_workspace/device-tree/device-tree/system-conf.dtsi
。/components/plnx_workspace/device-tree/device-tree/pcw.dtsi
另一個(gè)是在 project-spec/meta-user/recipes-bsp/device-tree/files路徑下,這個(gè)路徑下主要就是用戶基于自動(dòng)生成的設(shè)備樹,自行添加和修改的部分。這部分可以查看 UG1144 第10章 Device Tree Configuration 節(jié)的內(nèi)容。
。/project-spec/meta-user/recipes-bsp/device-tree/files/openamp.dtsi
。/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi
。/project-spec/meta-user/recipes-bsp/device-tree/files/pl-custom.dtsi
。/project-spec/meta-user/recipes-bsp/device-tree/files/xen-qemu.dtsi
。/project-spec/meta-user/recipes-bsp/device-tree/files/xen.dtsi
需要注意的是,如果 petalinux-config-》DTGsettings-》MACHINE_NAME 采用的是xilinx開發(fā)板預(yù)設(shè)的名稱的話(UG1144DTG Settings 章節(jié)中的 Machine name 的說明),那么會(huì)自動(dòng)生成對(duì)應(yīng)開發(fā)板相關(guān)的設(shè)備樹信息。
所以如果使用的是自己的硬件平臺(tái),那么盡量不要使用預(yù)設(shè)的名稱,這樣可以避免導(dǎo)入多余的設(shè)備樹信息從而導(dǎo)致編譯失敗或者最終功能不正確。
如何修改設(shè)備樹
1. 基于自動(dòng)生成的設(shè)備樹,添加和修改節(jié)點(diǎn)。
通過修改。/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi,來實(shí)現(xiàn)對(duì)之前已經(jīng)定義的設(shè)備樹節(jié)點(diǎn)中的屬性進(jìn)行變更,也可以添加沒有自動(dòng)生成的設(shè)備樹節(jié)點(diǎn)。
/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》;
};
};
};
gpio-leds {
compatible = “gpio-leds”;
led-ds23 {
label = “l(fā)ed-ds23”;
gpios = 《&ps7_gpio_0 10 0》;
default-state = “on”;
linux,default-trigger = “heartbeat”;
};
};
有時(shí)候?yàn)榱朔奖阍O(shè)備樹的管理,可以定義多個(gè)設(shè)備樹文件,然后在 system-user.dtsi 中將這些設(shè)備樹文件都包含進(jìn)去,如下所示。
/include/ “system-conf.dtsi”
/include/ “system-user-1.dtsi”
/include/ “system-user-2.dtsi”
/include/ “system-user-3.dtsi”
/ {
};
當(dāng)添加了其他的dtsi文件后,還需要修改。/project-spec/meta-user/recipes-bsp/device-tree/device-tree.bbappend 文件,將這些 dtsi 文件的路徑信息包含進(jìn)去。如下所示。
SRC_URI += “file://system-user.dtsi”
SRC_URI += “file://system-user-1.dtsi”
SRC_URI += “file://system-user-2.dtsi”
SRC_URI += “file://system-user-3.dtsi”
2. 完全使用自己的設(shè)備樹
我們還可以更改 petalinux-config-》 Auto Config Settings 中的配置,直接使用自己編寫好的設(shè)備樹。
取消 Devicetree autoconfig,使能 Specify a manual device tree include directory, 然后指定設(shè)備樹的路徑地址。
怎么描述設(shè)備樹
設(shè)備樹中描述的信息都是要與 kernel中設(shè)備的驅(qū)動(dòng)互相對(duì)應(yīng)的。如果驅(qū)動(dòng)中需要某個(gè)參數(shù),但是設(shè)備樹中并沒有包含,很可能就會(huì)編譯錯(cuò)誤或者直接使用了默認(rèn)值,從而導(dǎo)致工作異常。kernel 的設(shè)備驅(qū)動(dòng)中,一般都會(huì)包含設(shè)備樹的描述說明來保證設(shè)備樹的正確。你可以在 git上的 kernel 源碼中找到響應(yīng)的設(shè)備樹說明。以 GPIO 驅(qū)動(dòng)為例。你可以找到相關(guān)的設(shè)備樹描述信息如下。
https://github.com/Xilinx/linux-xlnx/blob/xlnx_rebase_v5.4_2020.1/Documentation/devicetree/bindings/gpio/gpio-zynq.txt
Example:
gpio@e000a000 {
#gpio-cells = 《2》;
compatible = “xlnx,zynq-gpio-1.0”;
clocks = 《&clkc 42》;
gpio-controller;
interrupt-parent = 《&intc》;
interrupts = 《0 20 4》;
interrupt-controller;
#interrupt-cells = 《2》;
reg = 《0xe000a000 0x1000》;
};
另外,你可以查看 xilinx wiki上 linux driver 的主題頁(yè)面來獲取所有 Xilinx 支持的設(shè)備驅(qū)動(dòng)內(nèi)容,其中包含有各個(gè)設(shè)備樹的例子以及相關(guān)配置等說明。
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841873/Linux+Drivers
反編譯設(shè)備樹
為了最終確認(rèn)設(shè)備樹是否正確,我們可以通過 dtc 這個(gè)小應(yīng)用,將 dtb 文件反編譯成 dts 設(shè)備樹文件。這個(gè)設(shè)備樹文件,從 system-top.dts 這個(gè) top 文件開始,把所有包含的設(shè)備樹內(nèi)容都整合到了一個(gè) dts 文件中,便于我們確認(rèn)最終的設(shè)備樹是否正確。其命令格式如下
dtc-I dtb -O dts -o system.dts system.dtb
原文標(biāo)題:開發(fā)者分享 | Petalinux 工程中設(shè)備樹的介紹
文章出處:【微信公眾號(hào):FPGA開發(fā)圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
責(zé)任編輯:haq
-
Xilinx
+關(guān)注
關(guān)注
71文章
2171瀏覽量
122142
原文標(biāo)題:開發(fā)者分享 | Petalinux 工程中設(shè)備樹的介紹
文章出處:【微信號(hào):FPGA-EETrend,微信公眾號(hào):FPGA開發(fā)圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
宇樹科技在物聯(lián)網(wǎng)方面
使用TFTP加載內(nèi)核設(shè)備樹
![使用TFTP加載內(nèi)核<b class='flag-5'>設(shè)備</b><b class='flag-5'>樹</b>](https://file1.elecfans.com/web3/M00/06/60/wKgZPGeKDGuAchTsAABJEsNyvP8799.png)
嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-初識(shí)設(shè)備樹之Makefile修改
飛凌嵌入式ElfBoard ELF 1板卡-初識(shí)設(shè)備樹之Makefile修改
飛凌嵌入式ElfBoard ELF 1板卡-初識(shí)設(shè)備樹之設(shè)備組織架構(gòu)
嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-初識(shí)設(shè)備樹之設(shè)備樹組成和結(jié)構(gòu)
飛凌嵌入式ElfBoard ELF 1板卡-初識(shí)設(shè)備樹之設(shè)備樹組成和結(jié)構(gòu)
如何在Petalinux下Patch u-boot源碼
![如何在<b class='flag-5'>Petalinux</b>下Patch u-boot源碼](https://file1.elecfans.com/web3/M00/01/09/wKgZPGdQEpOAD0O1AAAZK-Pd-YI839.png)
請(qǐng)問PCM1864的驅(qū)動(dòng)在設(shè)備樹該如何描述?
Multi-Scaler IP的Linux示例以及Debug(下)
![Multi-Scaler IP的Linux示例以及Debug(下)](https://file1.elecfans.com/web2/M00/06/B5/wKgZombqNYuASpxIAAFNyjoMqHk394.jpg)
使用CYUSB3014將電路連接到PC時(shí),它沒有出現(xiàn)在設(shè)備管理器中,為什么?
如何使用CubeMX生成的設(shè)備樹編譯鏡像?
原理圖設(shè)計(jì)里兩顆重要的樹(國(guó)產(chǎn)EDA)
![原理圖設(shè)計(jì)里兩顆重要的<b class='flag-5'>樹</b>(國(guó)產(chǎn)EDA)](https://file1.elecfans.com/web2/M00/EA/28/wKgZomZW-TCANr6AAAAy3VBHw70435.png)
評(píng)論