设备树是 Petalinux kernel 的关键组件,接下来以 2020.1 版本为例,为大家介绍一下在Xilinx Petalinux 工程中的设备树是如何产生,配置以及修改的。

Petalinux 工程中设备树的位置

当我们创建了一个 petalinux 工程后(以zcu102为例),在编译的时候,会自动生成对应的设备树文件。这些设备树的描述信息通常在以下2个工程路径下。

第一个是在 components/plnx_workspace/device-tree/device-tree 路径下,这个路径下主要保存的都是基于你导入的hdf/xsa后,自动生成的设备树信息。通常包括PS的设备树,时钟的设备树,PL 部分 IP 的设备树(Xilinx发布的包含驱动的IP),以及设备树头文件。

。/components/plnx_workspace/device-tree/device-tree/zynqmp-clk-ccf.dtsi

。/components/plnx_workspace/device-tree/device-tree/zcu102-revc.dtsi

。/components/plnx_workspace/device-tree/device-tree/pl.dtsi

。/components/plnx_workspace/device-tree/device-tree/system-top.dts

。/components/plnx_workspace/device-tree/device-tree/zynqmp.dtsi

。/components/plnx_workspace/device-tree/device-tree/system-conf.dtsi

。/components/plnx_workspace/device-tree/device-tree/pcw.dtsi

另一个是在 project-spec/meta-user/recipes-bsp/device-tree/files路径下,这个路径下主要就是用户基于自动生成的设备树,自行添加和修改的部分。这部分可以查看 UG1144 第10章 Device Tree Configuration 节的内容。

。/project-spec/meta-user/recipes-bsp/device-tree/files/openamp.dtsi

。/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi

。/project-spec/meta-user/recipes-bsp/device-tree/files/pl-custom.dtsi

。/project-spec/meta-user/recipes-bsp/device-tree/files/xen-qemu.dtsi

。/project-spec/meta-user/recipes-bsp/device-tree/files/xen.dtsi

需要注意的是,如果 petalinux-config-》DTGsettings-》MACHINE_NAME 采用的是xilinx开发板预设的名称的话(UG1144DTG Settings 章节中的 Machine name 的说明),那么会自动生成对应开发板相关的设备树信息。

所以如果使用的是自己的硬件平台,那么尽量不要使用预设的名称,这样可以避免导入多余的设备树信息从而导致编译失败或者最终功能不正确。

如何修改设备树

1. 基于自动生成的设备树,添加和修改节点。

通过修改。/project-spec/meta-user/recipes-bsp/device-tree/files/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》;

};

};

};

gpio-leds {

compatible = “gpio-leds”;

led-ds23 {

label = “led-ds23”;

gpios = 《&ps7_gpio_0 10 0》;

default-state = “on”;

linux,default-trigger = “heartbeat”;

};

};

有时候为了方便设备树的管理,可以定义多个设备树文件,然后在 system-user.dtsi 中将这些设备树文件都包含进去,如下所示。

/include/ “system-conf.dtsi”

/include/ “system-user-1.dtsi”

/include/ “system-user-2.dtsi”

/include/ “system-user-3.dtsi”

/ {

};

当添加了其他的dtsi文件后,还需要修改。/project-spec/meta-user/recipes-bsp/device-tree/device-tree.bbappend 文件,将这些 dtsi 文件的路径信息包含进去。如下所示。

SRC_URI += “file://system-user.dtsi”

SRC_URI += “file://system-user-1.dtsi”

SRC_URI += “file://system-user-2.dtsi”

SRC_URI += “file://system-user-3.dtsi”

2. 完全使用自己的设备树

我们还可以更改 petalinux-config-》 Auto Config Settings 中的配置,直接使用自己编写好的设备树。

取消 Devicetree autoconfig,使能 Specify a manual device tree include directory, 然后指定设备树的路径地址。

怎么描述设备树

设备树中描述的信息都是要与 kernel中设备的驱动互相对应的。如果驱动中需要某个参数,但是设备树中并没有包含,很可能就会编译错误或者直接使用了默认值,从而导致工作异常。kernel 的设备驱动中,一般都会包含设备树的描述说明来保证设备树的正确。你可以在 git上的 kernel 源码中找到响应的设备树说明。以 GPIO 驱动为例。你可以找到相关的设备树描述信息如下。

https://github.com/Xilinx/linux-xlnx/blob/xlnx_rebase_v5.4_2020.1/Documentation/devicetree/bindings/gpio/gpio-zynq.txt

Example:

gpio@e000a000 {

#gpio-cells = 《2》;

compatible = “xlnx,zynq-gpio-1.0”;

clocks = 《&clkc 42》;

gpio-controller;

interrupt-parent = 《&intc》;

interrupts = 《0 20 4》;

interrupt-controller;

#interrupt-cells = 《2》;

reg = 《0xe000a000 0x1000》;

};

另外,你可以查看 xilinx wiki上 linux driver 的主题页面来获取所有 Xilinx 支持的设备驱动内容,其中包含有各个设备树的例子以及相关配置等说明。

https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841873/Linux+Drivers

反编译设备树

为了最终确认设备树是否正确,我们可以通过 dtc 这个小应用,将 dtb 文件反编译成 dts 设备树文件。这个设备树文件,从 system-top.dts 这个 top 文件开始,把所有包含的设备树内容都整合到了一个 dts 文件中,便于我们确认最终的设备树是否正确。其命令格式如下

dtc-I dtb -O dts -o system.dts system.dtb

原文标题:开发者分享 | Petalinux 工程中设备树的介绍

文章出处:【微信公众号:FPGA开发圈】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

使用错误的设备树导致linux,Petalinux工程中设备树的介绍相关推荐

  1. linux字符设备驱动架构,linux驱动开发--字符设备:cdd_cdev结构中private_data使用

    private_data改进 为设备驱动支持多个设备个体做准备,针对private_data进行改进 在设备打开操作中通过inode中保存的i_cdev获取代表当前设备的cdev对象 通过代表当前设备 ...

  2. linux raw设备格式化,SUSE Linux 10配置裸设备(raw devices)

    SUSE Linux 10配置裸设备(raw devices) 裸设备,是没有经过格式化的分区或磁盘,也叫裸分区(原始分区),不被Unix通过文件系统来读取的特殊字符设备.它由应用程序负责对它进行读写 ...

  3. linux 设备数 of,linux下devicetree中惯用的of函数

    linux下devicetree中常用的of函数 从device_node中获取信息: int of_property_read_u8_array(const struct device_node * ...

  4. linux裸设备大小,SUSE Linux 十 配置裸设备(raw devices)

    SUSE Linux 10 配置裸设备(raw devices) 裸设备,是没有经过格式化的分区或磁盘,也叫裸分区(原始分区),不被Unix通过文件系统来读取的特殊字符设备.它由应用程序负责对 它进行 ...

  5. linux黑洞设备的路径,linux dev 常见特殊设备介绍与应用(loop,null,zero,full,random)

    linux是文件型系统,所有硬件如软件都会在对于的目录下面有相应的文件表示.对于dev这个目录,我们知道它下面的文件,表示的是linux的设备.在windows系统中,设备大家很好理解,象硬盘,磁盘指 ...

  6. linux查看pci设备c语言,linux 系统 查看pci设备的命令lspci

    lspci 应该是根据bus id那些和读取 pci的设备的寄存器内容,查找相应的数据库,把认出爱的设备显示出来,自己man lspci看一下. 不过有的时候比如自己作的pci设备可能认不出来,需要用 ...

  7. 在 Linux 命令行中查找 IP 地址介绍

    几年前,ifconfig 是 Linux 中最受欢迎的查询本机 IP 地址的方法.但是现如今 ifconfig 命令已经被启用了.在某些 Linux 发行版上已经不用了.那么,除此以外还有什么别的方式 ...

  8. linux什么命令查设备型号,在Linux命令行中查看系统硬件制造商、型号与序列号的六种方法...

    下面的六种方法都可以获取到 Linux 中的系统硬件制造商.型号与序列号,它们分别是 dmidecode.inxi.lshw./sys.dmesg.hwinfo 命令. 前言 对于 Linux 图形界 ...

  9. linux 扫描mipi设备,VS-RK3399 在linux系统下面调试Mipi camera接口介绍

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 debian系统目前支持Usb camera是没有问题,走UVC功能接口.那么mipi 接口camera和并口接口的camera,在Debian系统怎么设 ...

最新文章

  1. pytorch argsort
  2. 关于神经网络分类特征平移不变性的实验
  3. WatchOS系统开发大全(6)-WKInterfaceLabel
  4. PHP3d地球,three.js绘制地球、飞机与轨迹的效果示例
  5. 蓝桥杯 基础练习 特殊的数字
  6. 新华三模拟器Telnet/远程登录
  7. HTTP协议中POST方法和GET方法有那些区别?
  8. 软件测试用例(全面)
  9. 计算机质保试题及答案,质量体系、国军标体系试卷(质保部出)
  10. 提示框插件toastr
  11. 实数系的基本定理_初中数学:重点公式定理集合,中学生应该看一看
  12. php订阅号如何吸粉,公众号如何快速吸粉,一周内吸粉7000+的6个技巧
  13. 网站接口被恶意攻击怎么办
  14. 针对传感网的数据管理系统结构有_2010年自考管理信息系统模拟试题及答案(三)...
  15. 2020阿里巴巴社招面试题
  16. 2018已经很冷,2019年Android工作或更难找—,30分钟轻松入门flutter
  17. 查看并 redis慢日志
  18. 英伟达显卡【NVIDIA GeForece RTX3060 laptop GPU】装深度学习环境,学习框架为Pytorch
  19. 玩转spring boot——结合docker
  20. 2019南航计算机学院夏令营,2019南航年度人物宣讲丨计算机学院开展线上宣讲活动...

热门文章

  1. labview 多位组合成1个字、1个字拆成多位
  2. 什么是静态资源服务器?
  3. MySQL-复杂问题记录和解决
  4. 《武林外传》之(二) 佟掌柜的三板斧
  5. java简体字繁体字互相转换(附jar包下载资源~)
  6. CAD图层文件(DWG)转矢量图层处理
  7. JSP----An internal error occurred during: Requesting JavaScript AST from selection
  8. 2022-01-14:深度学习中关于显卡的设置
  9. php中双引号配合{},PHP中的双引号和单引号的应用
  10. ping服务器地址加时间显示,如何对IP地址进行Ping测试