取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

Petalinux device-tree debug tips

yolanda
Moderator
Moderator
1 0 106

BY Chao Zhang

注意:本论坛博客所有内容皆来源于Xilinx工程师,如需转载,请写明出处作者及赛灵思论坛链接并发邮件至cncrc@xilinx.com,未经Xilinx及著作权人许可,禁止用作商业用途 


Hi 大家好,

今天和大家分享下如何在Petalinux下定位decice-tree错误的一些技巧。 

首先我们来了解下Petalinux工程中device-tree的文件位置:

工具自动生成的device-tree文件位于components/plnx_workspace/device-tree/device-tree, 该文件夹下的文件请勿自行修改,供用户编辑的device-tree文件位于project-spec/meta-user/recipes-bsp/device-tree/files。

对于大部分错误,通过petalinux工具的error log已经足够定位错误类型和位置。比如下面

Chao1.png

实际的log会非常冗长,我们在其中仔细找dtc的报错,其中提示“Duplicate label 'gem0' on /ethernet@ff0b0000 and /amba/ethernet@ff0b0000“,说明‘gem0’的label在多个地方重复定义了。而且报错也提示了错误的位置为“…/system-user.dtsi:3.31-15.9”,我们根据错误提示去删除重复的gem0 定义即可。

有时候通过petalinux的log无法定位到具体错误位置,这时候我们可以通过在Petalinux之外手动编译device tree文件的方式来获得更具体的错误信息。手动编译需要用到dtc (Devicetree Compiler), 如果你的机器上还没有dtc的话可以从linux-xlnx/scripts/dtc位置找到源码并执行make来编译生成dtc工具。

如前所述Petalinux下的device tree分布在两个位置,我们先把所有dts/dtsi文件都拷贝到单独工作目录中方便后续手动编译。

设备树的顶层为system-top.dts, 并引用了很多其它dtsi文件,类似c语言中的include机制。可以先利用gcc来进行预处理,将分立的dts/dtsi文件汇总到一个文件中,

gcc -I  <source repo> -E -nostdinc -undef -D__DTS__ -x assembler-with-cpp -o <output-file>.dts  <top-dts-file-input>.dts

再用dtc来编译设备树文件。

 dtc -I dts -O dtb -o out.dtb <output-file>.dts

接下来根据dtc的报错信息,就可以容易地定位到错误类型和位置。