【无标题】

正点原子ZYNQ7010 Petalinux2019.2 问题

no label “phy1”

在进行petalinux-build时出现报错:没有“phy1”这一标签,经过查找发现其对应为ethernet1,该ip在vivado中被勾选,但是在设备树中未被调用,不知道为什么在使用petalinux2019.2编译时就会报错。(有大佬知道的话请指教TAT)
因此在vivado中取消ethernet1的勾选:
取消ethernet1勾选
再次进行在vivado中进行综合以及实现,生成.xsa文件(vivado2019.2中生成.xsa文件),进行petalinux-config以及petalinux-build编译成功。

PS:之前编译出现问题可以使用petalinux-build -x mrproper -f将之前编译结果清除

设备树

What is 设备树?

设备树DTS(Device Tree Source):一种描述硬件的数据结构,实现驱动代码与设备信息相分离。采用树形结构描述板级设备,例如CPU数量、内存地址、iic接口等。.dtsi文件类似于C语言中的.h头文件,可以使用include来包含.dtsi文件。
对于ZYNQ7010,描述文件为“arch/arm/boot/dts/system-top.dts”,由petalinux自动生成。除此之外还有pl.dtsi、pcw.dtsi以及zynq-7000.dsti。

设备树

  • zynq-7000.dtsi 文件中的内容是 zynq-7000 系列处理器相同的硬件外设配置信息(PS 端的);
  • pl.dtsi 的内容是我们在 vivado 当中添加的 pl 端外设对应的配置信息;
  • pcw.dtsi 表示我们在 vivado 当中已经使能的 PS 外设;

pl.dtsi 与 pcw.dtsi都是由 petalinux 根据 hdf 硬件描述自动生成的,不需要我们去编写。

dts语法

设备树简单结构

/{ // 根节点
 	node1{ // node1 节点
		property1=value1; // node1 节点的属性 property1
		property2=value2; // node1 节点的属性 property2
		...
	}; 
	
	node2{ // node2 节点
		property3=value3; // node2 节点的属性 property3
		...
		node3{ // node2 的子节点 node3
			property4=value4; // node3 节点的属性 property4
			...
		}; 
	}; 
}
  • “/” 表示设备树的根节点(root node);
  • node1 象征着SoC上的控制器,eg:I2C
  • node3 象征着挂载在控制器下的某个设备,eg:eeprom、RTC等

定义节点

[label:]node-name[@unit-address] {
[properties definitions]
[child nodes]
};
  • “node-name”是节点名字,为 ASCII 字符串,节点名字应该能够清晰的描述出节点的功能,比如“uart1”就表示这个节点是 UART1外设;
  • “unit-address”一般表示设备的地址或寄存基地址,如果某个节点没有地址或者寄存器的话“unit-address”可以不要,比如“cpu@0”、“interrup-tcontroller@00a01000”

属性的值的类型

  • 字符串 "arm,cortex-a9"
  • 32 位无符号整形数据 <1000>
  • 二进制数据 [00 0a 35 00 1e 53]
  • 字符串数组 "n25q512a","micron,m25p80";
  • 混合值 "a string", [0x01 0x23 0x45 0x67], <0x12345678>
  • 节点引用 <&clkc 3>表示引用”clkc”这个节点,clkc为”label”

标准属性

  • compatible 属性
    “兼容性”属性,值可以是一个字符串,也可以是一个字符串列表;一般该字符串使用”<制造商>,<型号>”这样的形式进行命名,目的是为了指定一个确切的设备,并且包括制造商的名字,以避免命名空间冲突
compatible = "xlnx,zynq-7000";
compatible = "xlnx,xuartps", "cdns,uart-r1p8";
  • model 属性
    一个字符串描述信息,它指定制造商的设备型号,model 属性一般定义在根节点下,一般就是对板子的描述信息
  • status 属性
    和设备状态有关
描述
okay表明设备是可操作的。启动设备(默认)
disabled表明设备当前是不可操作的,但是在未来可以变为可操作的,比如热插拔设备插入以后。至于 disabled 的具体含义还要看设备的绑定文档。
fail表明设备不可操作,设备检测到了一系列的错误,而且设备也不大可能变得可操作。
fail-sss含义和“fail”相同,后面的 sss 部分是检测到的错误内容。
  • #address-cells 和#size-cells 属性
    是无符号 32 位整形,#address-cells #size-cells可以用在任何拥有子节点的设备节点中,用于描述子节点的地址信息。#address-cells用来描述子节点"reg"属性的地址表中首地址 cell 的数量;#size-cells,用来描述子节点"reg"属性的地址表中地址长度 cell 的数量。
    reg = <address1 length1 address2 length2 address3 length3……> 为reg属性,每个“address length”组合表示一个地址范围,其中 address 是起始地址,length 是地址长度,#address-cells 表明 address 字段占用的字长,#size-cells 表明 length 这个字段所占用的字长
  • reg 属性:ug585-Zynq-7000-TRM.pdf
    一般是(address,length)对,用于描述设备地址空间资源信息,一般都是描述某个外设的寄存器地址范围信息、flash 设备的分区信息等。ranges 属性值可以为空或者按照(child-bus-address,parent-bus-address,length)格式编写的数字矩阵。
    child-bus-address : 子 总 线 地 址 空 间 的 物 理 地 址 , 由 ranges 属 性 所 在 节 点 的#address-cells 属性确定此物理地址占用的字长。
    parent-bus-address:父总线地址空间的物理地址,由 ranges 属性所在节点的父节点#address-cells 属性确定此物理地址所占用的字长。
    length:子地址空间的长度,由 ranges 属性所在节点的#address-cells 属性确定此地址长度所占用的字长。
  • ranges 属性
    地址转换表,其中的每个项目是一个子地址、父地址以及在子地址空间的大小的映射
  • device_type 属性
    字符串,表示节点的类型。一般用于 cpu 节点或者 memory 节点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值