0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Petalinux工程中设备树的介绍

YCqV_FPGA_EETre 来源:XILINX嵌入式 作者:Terry Ni 2021-02-20 16:32 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

设备树是 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 的说明),那么会自动生成对应开发板相关的设备树信息。

b1c67ca2-71af-11eb-8b86-12bb97331649.png

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

如何修改设备树

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, 然后指定设备树的路径地址。

b209458c-71af-11eb-8b86-12bb97331649.png

怎么描述设备树

设备树中描述的信息都是要与 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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Xilinx
    +关注

    关注

    73

    文章

    2192

    浏览量

    129927

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何在AMD Vitis Unified IDE中使用系统设备

    您将在这篇博客中了解系统设备 (SDT) 以及如何在 AMD Vitis Unified IDE 中使用 SDT 维护来自 XSA 的硬件元数据。本文还讲述了如何对 SDT 进行操作,以便在 Vitis Unified IDE
    的头像 发表于 11-18 11:13 2813次阅读
    如何在AMD Vitis Unified IDE中使用系统<b class='flag-5'>设备</b><b class='flag-5'>树</b>

    电源工程师的核心技能体系

    电源工程师的核心技能体系需覆盖从基础理论到专业实践、工具应用及行业适配的全链条能力。以下是系统化的技能框架,按知识层级和应用场景展开,帮助从业者明确能力提升路径: 一、基础理论层:核心知识根基
    的头像 发表于 06-05 09:44 1737次阅读

    在任何平台上使用PetaLinux的先决条件

    本篇文章介绍了在任何平台上使用 PetaLinux 的先决条件。PetaLinux 是一种嵌入式 Linux 软件开发套件 (SDK),主要用于基于 FPGA 的系统级芯片 (SoC) 设计或 FPGA 设计。
    的头像 发表于 04-24 10:40 1206次阅读
    在任何平台上使用<b class='flag-5'>PetaLinux</b>的先决条件

    如何获取yocto build来构建对设备的更改?

    来自 NXP 的 Yocto 构建设置 我想为 imx8m nano 构建一个修改后的器件。我了解设备源文件(.dts、dtsi)的语法,但我不知道如何让 yocto 版本更新 DTB
    发表于 04-09 07:37

    求助,关于P2041设备的RGMII配置疑问求解

    ) 这些 DTSEC 在 u-boot 工作正常。 当我在 Linux 修改 Device Tree 时,我可以启用使用两个 SGMII 端口。 但是、RGMII 端口不适用于我在设备
    发表于 04-02 06:18

    从零开始驯服Linux(一):ZYNQ-Linux启动文件构建全解析

    设备,我们不用Petalinux编译的设备,只是解决错误。命令执行成功之后,会在当前Petalinu
    发表于 03-20 16:48

    请问stm32mp257如何修改设备并加载驱动?

    1、重新编译kernel容易报错,重新编译设备也会报错。 2、加载驱动,编译环境应该对应,加载不成功。 3、想知道整体比方说,修改下IO,修改下设备,加入一个应用程序。整体跑下
    发表于 03-07 08:05

    【技术分享】迅为RK3568开发板使用TFTP加载内核设备

    【技术分享】迅为RK3568开发板使用TFTP加载内核设备
    的头像 发表于 02-21 14:04 1122次阅读
    【技术分享】迅为RK3568开发板使用TFTP加载内核<b class='flag-5'>设备</b><b class='flag-5'>树</b>

    求解答,设备问题

    请问,rk3588j要再提取一个USB3.0接口设备怎么改
    发表于 02-20 11:22

    科技在物联网方面

    布局、人员位置等,在工业物联网场景监测生产设备的状态、检测产品质量等。 通信技术应用 远程控制与数据传输:宇科技的人形机器人H1等产品具备远程控制和数据传输功能,这依赖于先进的通信技术。在物联网
    发表于 02-04 06:48

    使用TFTP加载内核设备

    在嵌入式项目开发,为了适配新外设、调整硬件资源分配或修复驱动问题,需要频繁修改设备和内核。修改完成后,通常需要重新编译生成镜像,并将其烧录到开发板上进行测试。然而,传统的烧录方式不仅需要连接物理接口,还可能因为镜像体积较大而
    的头像 发表于 01-17 15:52 1857次阅读
    使用TFTP加载内核<b class='flag-5'>设备</b><b class='flag-5'>树</b>

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-初识设备之Makefile修改

    不同而新增加了dts,则需要在这个Makefile的这个位置添加上对应的.dtb文件名参与编译。ELF 1使用的设备命名为imx6ull-elf1-emmc.dts,是基于NXP官方evk板子的设备
    发表于 01-13 09:09

    飞凌嵌入式ElfBoard ELF 1板卡-初识设备之Makefile修改

    不同而新增加了dts,则需要在这个Makefile的这个位置添加上对应的.dtb文件名参与编译。ELF 1使用的设备命名为imx6ull-elf1-emmc.dts,是基于NXP官方evk板子的设备
    发表于 01-10 09:23

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-初识设备设备组成和结构

    前边讲解了内核编译选项的配置,这一节我们详细讲一下设备设备的知识是Linux驱动开发人员必备的技能,我们现在使用的Linux内核,绝大多数都是支持
    发表于 01-08 08:32

    飞凌嵌入式ElfBoard ELF 1板卡-初识设备设备组成和结构

    前边讲解了内核编译选项的配置,这一节我们详细讲一下设备设备的知识是Linux驱动开发人员必备的技能,我们现在使用的Linux内核,绝大多数都是支持
    发表于 01-07 09:16