今天邀請(qǐng)到賽靈思專家和大家分享下如何在Petalinux下定位decice-tree錯(cuò)誤的一些技巧。
首先我們來(lái)了解下 Petalinux 工程中 device-tree 的文件位置:
工具自動(dòng)生成的device-tree文件位于
components/plnx_workspace/device-tree/device-tree,
該文件夾下的文件請(qǐng)勿自行修改,供用戶編輯的 device-tree 文件位于
project-spec/meta-user/recipes-bsp/device-tree/files
對(duì)于大部分錯(cuò)誤,通過(guò) petalinux 工具的 error log 已經(jīng)足夠定位錯(cuò)誤類型和位置。比如下面,
ERROR: device-tree-xilinx-v2020.1+gitAUTOINC+f725aaecff-r0do_compile: Error executing a python function inexec_python_func() autogenerated:
The stack trace of python calls that resulted in this exception/failure was
……
Subprocess output:
/tmp/xilinx-zcu102-2020.2-2021.02.08-01.47.20-87H/work/zynqmp_generic-xilinx-linux/device-tree/xilinx-v2020.1+gitAUTOINC+f725aaecff-r0/system-user.dtsi ERROR (duplicate_label): /ethernet@ff0b0000: Duplicate label 'gem0' on /ethernet@ff0b0000 and /amba/ethernet@ff0b0000
ERROR: Input tree has errors, aborting (use -f to force output)
ERROR: Logfile of failure stored in: /tmp/xilinx-zcu102-2020.2-2021.02.08-01.47.20-87H/work/zynqmp_generic-xilinx-linux/device-tree/xilinx-v2020.1+gitAUTOINC+f725aaecff-r0/temp/log.do_compile.62492
ERROR: Task (/group/bcapps/chaoz/plnx_zcu102_bsp_2020p2/xilinx-zcu102-2020.2/components/yocto/layers/meta-xilinx/meta-xilinx-bsp/recipes-bsp/device-tree/device-tree.bb:do_compile) failed with exit code '1'
NOTE: Tasks Summary: Attempted 3410 tasks of which 3402 didn't need to be rerun and 1 failed.
……
ERROR: Failed to build project
實(shí)際的 log 會(huì)非常冗長(zhǎng),我們?cè)谄渲凶屑?xì)找 dtc 的報(bào)錯(cuò),其中提示 “Duplicate label 'gem0' on /ethernet@ff0b0000 and /amba/ethernet@ff0b0000“,說(shuō)明 ‘gem0’ 的 label 在多個(gè)地方重復(fù)定義了。而且報(bào)錯(cuò)也提示了錯(cuò)誤的位置為“…/system-user.dtsi:3.31-15.9”,我們根據(jù)錯(cuò)誤提示去刪除重復(fù)的 gem0定義即可。
有時(shí)候通過(guò) petalinux 的 log 無(wú)法定位到具體錯(cuò)誤位置,這時(shí)候我們可以通過(guò)在 Petalinux 之外手動(dòng)編譯 device tree文件的方式來(lái)獲得更具體的錯(cuò)誤信息。手動(dòng)編譯需要用到dtc (Devicetree Compiler), 如果你的機(jī)器上還沒(méi)有 dtc 的話可以從 linux-xlnx/scripts/dtc 位置找到源碼并執(zhí)行 make 來(lái)編譯生成 dtc 工具。
如前所述 Petalinux 下的 device tree 分布在兩個(gè)位置,我們先把所有 dts/dtsi 文件都拷貝到單獨(dú)工作目錄中方便后續(xù)手動(dòng)編譯。
設(shè)備樹(shù)的頂層為 system-top.dts, 并引用了很多其它 dtsi 文件,類似 C 語(yǔ)言中的 include 機(jī)制。可以先利用 gcc 來(lái)進(jìn)行預(yù)處理,將分立的 dts/dtsi 文件匯總到一個(gè)文件中,
gcc-I
再用 dtc 來(lái)編譯設(shè)備樹(shù)文件。
dtc-Idts-Odtb-oout.dtb
接下來(lái)根據(jù) dtc 的報(bào)錯(cuò)信息,就可以容易地定位到錯(cuò)誤類型和位置。
原文標(biāo)題:開(kāi)發(fā)者分享 | 如何在 Petalinux 下定位 decice-tree 錯(cuò)誤
文章出處:【微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
設(shè)備
+關(guān)注
關(guān)注
2文章
4526瀏覽量
70725 -
源碼
+關(guān)注
關(guān)注
8文章
647瀏覽量
29281 -
編譯
+關(guān)注
關(guān)注
0文章
659瀏覽量
32906
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
GPIO錯(cuò)誤排查與解決
RTOS中的錯(cuò)誤檢查機(jī)制
如何在Petalinux下Patch u-boot源碼
![如<b class='flag-5'>何在</b><b class='flag-5'>Petalinux</b>下Patch u-boot源碼](https://file1.elecfans.com/web3/M00/01/09/wKgZPGdQEpOAD0O1AAAZK-Pd-YI839.png)
SQL錯(cuò)誤代碼及解決方案
socket編程中的錯(cuò)誤處理技巧
TPA3128的PBTL模式做定壓功放使用,請(qǐng)問(wèn)PBTL模式下定壓功放的額定輸出電壓是多少呢?
網(wǎng)關(guān)錯(cuò)誤是什么意思
SRAM中的錯(cuò)誤檢測(cè)
![SRAM中的<b class='flag-5'>錯(cuò)誤</b>檢測(cè)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
在VSCODE終端make時(shí)遇到錯(cuò)誤要一行一行看然后定位,可以直接跳轉(zhuǎn)點(diǎn)擊或者VSCODE定位錯(cuò)誤嗎?
一文讀懂CAN通訊錯(cuò)誤幀
![一文讀懂CAN通訊<b class='flag-5'>錯(cuò)誤</b>幀](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
一文讀懂CAN控制器錯(cuò)誤處理的原理
![一文讀懂CAN控制器<b class='flag-5'>錯(cuò)誤</b>處理的原理](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
如何在CYGWIN的IFX環(huán)境中安裝cysecuretool?
Aurix pFlash內(nèi)存部分是如何在微控制器級(jí)別上創(chuàng)建ECC寫(xiě)入錯(cuò)誤的?
盤點(diǎn)PCB設(shè)計(jì)中的常見(jiàn)錯(cuò)誤
![盤點(diǎn)PCB設(shè)計(jì)中的常見(jiàn)<b class='flag-5'>錯(cuò)誤</b>](https://file1.elecfans.com/web2/M00/BD/23/wKgaomWgnKSAJC89AAA8Qsfl2BU983.png)
評(píng)論