zynq开发中的设备树
在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开发中的设备树相关推荐
- Linux驱动开发中与设备树相关的6种debug方法
整理出了6种驱动开发时与设备注册.设备树相关的调试方法,彼此间没有优先级之分,每种方法不一定是最优解,但可以作为一种debug查找问题的手段,快速定位问题原因.例如在芯片验证时,不同时钟频率下系统启动 ...
- 驱动开发基础知识——设备树
BSP开发工程师[原来BSP就是那些被指臃肿的文件啊 BSP的出生 Linux经过不断的发展,原先嵌入式系统的三层结构逐步演化成为一种四层结构. 这个新增加的中间层次位于操作系统和硬件之间,包含了系统 ...
- 【Linux驱动开发】Linux设备树详解
目录 一.设备树基础 1.概念 2.文件格式 3.编译工具 二.DTS语法 1..dtsi 头文件 2. 设备节点 3.标准属性 4.compatible 属性详解 5.修改设备树文件,增加或修改节点 ...
- 驱动程序开发:无设备树和有设备树的platform驱动
1.Linux 驱动的分离与分层 对与对IO进行最简单的读写操作,无需考虑太多的怎么使它重用性强,而像I2C. SPI.LCD 等这些复杂外设的驱动,Linux 系统要考虑到驱动的可重用性,因此提 ...
- 5.3中断系统中的设备树——中断号的演变与irq_domain
通过上一节我们知道,在内核中有一个irq_desc数组,数组里面的每一项对应一个中断,数组的下标就是对应中断的虚拟中断号(virq). 假设只有一个中断控制器,有32个中断,那么中断和irq_desc ...
- linux驱动开发学习2 设备树
设备树 dtb板级信息文件,大势所趋,一定要学 如何确定要编译哪个DTS文件:查看linux下的arch/arm/boot/dts/Makefile DTS语言有属于自己的语法:以树形来描述设备信 ...
- ZYNQ开发中SDK输出串口选择以及打印函数print、printf、xil_printf的差别
ZYNQ开发系列--SDK输出串口选择以及打印函数print.printf.xil_printf的差别 前言 两个串口到底是谁在打印? print 和 printf 和 xil_printf 前言 在 ...
- Mtk android中的设备树,msm8909+android5.1 device tree(dt) 设备树组成和编译
1.Device tree设备树概述 设备树包含DTC(device treecompiler),DTS(device treesource和DTB(device treeblob).其对应关系如图1 ...
- 驱动开发中platform设备驱动架构详解
1.什么是platform总线 从Linux2.6开始Linux加入了一套驱动管理和注册机制-platform总线驱动模型.platform总线是一条虚拟总线(只有一条),这类总线没有对应的硬件结构. ...
最新文章
- 单元测试mock之mockito使用
- Microstation研发
- TMS320DM642学习----第一篇(硬件连接)
- Django省市区三级联动
- CentOS配置静态IP
- 开启WIN10的卓越性能模式
- 计算机sci审稿意见,【小木虫SCI秘籍】感悟之二——一个审稿意见的回复 - 论文投稿 - 小木虫 - 学术 科研 互动社区...
- 阿里平头哥首次交货——玄铁910是个啥?是芯片吗?
- 【三】rabbitmq消费者ACK机制message acknowledgment
- Redux:优点和缺点
- 【开发经验】java服务生产环境CPU使用过高解决思路
- 腕象谈表:V6卡地亚山度士后镶满钻评测
- 作战效能评估系统模型
- java二维数组的长度问题
- php无版权图库api,哪里有无版权php源码
- Swagger2生成在线接口文档并导出pdf文件
- 信用风险计量模型汇总
- 【agc012E】Camel and Oases
- 模型计算算力_8核人工智能开源主板_基于 BITMAIN AI 计算模组_3.5寸
- Downie 4 4.6.14 MAC上最新最好用的一款视频下载工具
热门文章
- 浏览器禁用cookie后session还能用吗?cookie与session区别
- nodejs.ReferenceError:window is not defined
- rt-thread物联网开发板mqtt实验
- 区块补习班 | 假酒害人屡禁不止?对不起我来晚了!
- unzip解压缩linux文件时出现error [Testing.zip]: start of central directory not found;zipfile corrupt——7z
- java实现将数据生成图表至excel导出(包括折线图,柱状图,饼状图)
- Vue3.0系列(一): VUE3.0的新特性
- Java程序员如何能进入阿里、大众点评这样的大型互联网公司?
- 英雄联盟7月23日维修服务器,lol维护到几点今天 英雄联盟7月23日停机维护多长时间...
- 2021年塔式起重机司机模拟考试题及塔式起重机司机作业考试题库