在zynq开发中经常会修改设备树,每次遇到这种情况都有点发愁,今天把设备树相关的知识点总结一下,希望以后遇到设备树时,能够自如应对。

什么是设备树

设备树时描述硬件的数据结构,Linux系统可以通过设备树了解硬件结构,不需要进行编码。

设备树文件类型

  • DTSI: 设备树头文件,类似C语言中的.h文件,供DTS文件调用。
  • DTS:.dts文件是设备树的源文件。相当于C语言的.c文件。
  • DTC:DTC是将.dts编译为.dtb的工具,相当于gcc。
  • DTG:Xilinx设备树编译工具。
  • DTB:.dtb文件是 .dts 被 DTC 编译后的二进制格式的设备树文件,它可以被linux内核解析。

DTS语法介绍

每个module在设备树中被定义成node。在dts文件中,一个node被定义成

[label:]node-name[@unit-address]{[properties definitions][child nodes]
}
  • [lable:]: 设备树文件允许标签附加在任何节点或者属性上。
  • node-name:是指节点的名字。
  • [@unit-address]:是指节点所在的基地址。
  • [properties definitions]:是指相关属性的定义。
  • [child nodes]:是指相关的子节点

以如下设备树为例:

/ {compatible = "xlnx,zynqmp";#address-cells = <2>;#size-cells = <2>;cpus {#address-cells = <1>;#size-cells = <0>;cpu0: cpu@0 {compatible = "arm,cortexa53", "arm,armv8";device-type = "cpu";enable-method = "psci";operating-points-v2 = <&cpu_opp_table>;reg = <0x0>;cpu-idle-states = <&CPU_SLEEP_0>;};cpu1: cpu@1 {compatible = "arm,cortexa53", "arm,armv8";device-type = "cpu";enable-method = "psci";operating-points-v2 = <&cpu_opp_table>;reg = <0x1>;cpu-idle-states = <&CPU_SLEEP_0>;};};chosen {bootargs = "earlycon clk_ignore_unused";};memory {device-type = "memory";reg = <0x0 0x0 0x0 0x80000000>, <0x00000008 0x0 0x0 0x80000000>;};
  • “/”代表根节点;
  • “compatible”为平台兼容;
  • #address-cells是address的单板(32bit)
  • #size-cells”是length的单位(32bit)
  • ”chosen“是板级启动参数
  • "memory"是板级内存的信息。
  • “device_type":设备类型,寻找节点可以依据这个属性;

KV260中的设备树文件

在petalinux工程中设备主要在三个地方,其中为工程目录名。

1、/project-spec/meta-user/recipes-bsp/devicetree/files/:

  • system-user.dtsi
  • xen.dtsi
  • pl-custom.dtsi
  • openamp.dtsi
  • xen-qemu.dtsi

其中system-user.dtsi是主要修改的文件,该文件中的内容具有更好优先级。

例如要增加phy芯片信息,可以在system-user.dtsi增加如下内容。

/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>;};};
};

2、/project-spec/dts_dir/

我理解这个文件夹中的内容,需要添加到system-user.dtsi才会起作用。

3、/components/plnx_workspace/device-tree/device-tree/

文件夹的内容不建议修改。

重点看以下文件:

  • pl.dtsi: This is a file where all the memory mapped peripheral logic(PL) IP nodes will be available.
  • pcw.dtsi: This is a file where the dynamic properties where the PS peripheral needs.
  • system-top.dts: This is a file where it contains the memory information, early console and the boot arguments.
  • zynqmp.dtsi: This file contains all the PS peripheral information and also the cpu info.
  • zynqmp-clk-ccf.dtsi: This file contains all the clock information for the peripheral IPs.
  • zynqmp-smk-k26-reva.dtsi:It contains all the board specific properties。

system-top.dts中文件内容如下:

/dts-v1/;
#include "zynqmp.dtsi"
#include "zynqmp-smk-k26-reva.dtsi"
#include "zynqmp-clk-ccf.dtsi"
#include "pcw.dtsi"
/ {chosen {bootargs = "earlycon";stdout-path = "serial0:115200n8";};aliases {};memory {device_type = "memory";reg = <0x0 0x0 0x0 0x7ff00000>, <0x00000008 0x00000000 0x0 0x80000000>;};
};
#include "system-user.dtsi"

由文件内容可知,该文件为顶层文件,调用各个模块,最后调用system-user.dtsi,所以system-user.dtsi中内容优先级最高。该文件夹中没有调用/project-spec/dts_dir/中的文件,所以dts_dir文件夹中内容没有起作用。

Devicetree Generator (DTG)

Xilinx设备树生成工具DTG,帮助用户构建特定硬件的设备树。不用使用手动编译过程,直接从XSA文件获取和硬件信息。

Kernel Bootargs

“Kernel Bootargs”子菜单允许 PetaLinux 在 DTS 中自动生成内核启动命令行设置,或者传递 PetaLinux 用户定义的内核启动命令行设置。 以下是默认的 bootargs。

zynqmp -- earlycon clk_ignore_unused root=/dev/ram0 rw

如果希望在控制台上看到内核错误打印信息,system_user.dtsi 中添加

earlycon console=<device>,<baud rate> clk_ignore_unused root=/dev/ram rw
earlycon console=/dev/ttyPS0,115200 clk_ignore_unused root=/dev/ram rw

zynq开发中的设备树相关推荐

  1. Linux驱动开发中与设备树相关的6种debug方法

    整理出了6种驱动开发时与设备注册.设备树相关的调试方法,彼此间没有优先级之分,每种方法不一定是最优解,但可以作为一种debug查找问题的手段,快速定位问题原因.例如在芯片验证时,不同时钟频率下系统启动 ...

  2. 驱动开发基础知识——设备树

    BSP开发工程师[原来BSP就是那些被指臃肿的文件啊 BSP的出生 Linux经过不断的发展,原先嵌入式系统的三层结构逐步演化成为一种四层结构. 这个新增加的中间层次位于操作系统和硬件之间,包含了系统 ...

  3. 【Linux驱动开发】Linux设备树详解

    目录 一.设备树基础 1.概念 2.文件格式 3.编译工具 二.DTS语法 1..dtsi 头文件 2. 设备节点 3.标准属性 4.compatible 属性详解 5.修改设备树文件,增加或修改节点 ...

  4. 驱动程序开发:无设备树和有设备树的platform驱动

    1.Linux 驱动的分离与分层   对与对IO进行最简单的读写操作,无需考虑太多的怎么使它重用性强,而像I2C. SPI.LCD 等这些复杂外设的驱动,Linux 系统要考虑到驱动的可重用性,因此提 ...

  5. 5.3中断系统中的设备树——中断号的演变与irq_domain

    通过上一节我们知道,在内核中有一个irq_desc数组,数组里面的每一项对应一个中断,数组的下标就是对应中断的虚拟中断号(virq). 假设只有一个中断控制器,有32个中断,那么中断和irq_desc ...

  6. linux驱动开发学习2 设备树

    设备树 dtb板级信息文件,大势所趋,一定要学  如何确定要编译哪个DTS文件:查看linux下的arch/arm/boot/dts/Makefile  DTS语言有属于自己的语法:以树形来描述设备信 ...

  7. ZYNQ开发中SDK输出串口选择以及打印函数print、printf、xil_printf的差别

    ZYNQ开发系列--SDK输出串口选择以及打印函数print.printf.xil_printf的差别 前言 两个串口到底是谁在打印? print 和 printf 和 xil_printf 前言 在 ...

  8. Mtk android中的设备树,msm8909+android5.1 device tree(dt) 设备树组成和编译

    1.Device tree设备树概述 设备树包含DTC(device treecompiler),DTS(device treesource和DTB(device treeblob).其对应关系如图1 ...

  9. 驱动开发中platform设备驱动架构详解

    1.什么是platform总线 从Linux2.6开始Linux加入了一套驱动管理和注册机制-platform总线驱动模型.platform总线是一条虚拟总线(只有一条),这类总线没有对应的硬件结构. ...

最新文章

  1. 单元测试mock之mockito使用
  2. Microstation研发
  3. TMS320DM642学习----第一篇(硬件连接)
  4. Django省市区三级联动
  5. CentOS配置静态IP
  6. 开启WIN10的卓越性能模式
  7. 计算机sci审稿意见,【小木虫SCI秘籍】感悟之二——一个审稿意见的回复 - 论文投稿 - 小木虫 - 学术 科研 互动社区...
  8. 阿里平头哥首次交货——玄铁910是个啥?是芯片吗?
  9. 【三】rabbitmq消费者ACK机制message acknowledgment
  10. Redux:优点和缺点
  11. 【开发经验】java服务生产环境CPU使用过高解决思路
  12. 腕象谈表:V6卡地亚山度士后镶满钻评测
  13. 作战效能评估系统模型
  14. java二维数组的长度问题
  15. php无版权图库api,哪里有无版权php源码
  16. Swagger2生成在线接口文档并导出pdf文件
  17. 信用风险计量模型汇总
  18. 【agc012E】Camel and Oases
  19. 模型计算算力_8核人工智能开源主板_基于 BITMAIN AI 计算模组_3.5寸
  20. Downie 4 4.6.14 MAC上最新最好用的一款视频下载工具

热门文章

  1. 浏览器禁用cookie后session还能用吗?cookie与session区别
  2. nodejs.ReferenceError:window is not defined
  3. rt-thread物联网开发板mqtt实验
  4. 区块补习班 | 假酒害人屡禁不止?对不起我来晚了!
  5. unzip解压缩linux文件时出现error [Testing.zip]: start of central directory not found;zipfile corrupt——7z
  6. java实现将数据生成图表至excel导出(包括折线图,柱状图,饼状图)
  7. Vue3.0系列(一): VUE3.0的新特性
  8. Java程序员如何能进入阿里、大众点评这样的大型互联网公司?
  9. 英雄联盟7月23日维修服务器,lol维护到几点今天 英雄联盟7月23日停机维护多长时间...
  10. 2021年塔式起重机司机模拟考试题及塔式起重机司机作业考试题库