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

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

3天内不再提示

zynq开发中的设备树

CHANBAEK 来源:硬码农二毛哥 作者:硬码农二毛哥 2023-05-25 11:29 次阅读

在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工程中设备主要在三个地方,其中plnx-proj-root为工程目录名。

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

  • 系统用户.dtsi
  • xen.dtsi文件
  • pl-custom.dtsi
  • 打开放大器.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>;
};
};
};

plnx-proj-root/project-spec/dts_dir/

图片

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

3、/组件/plnx_workspace/设备树/设备树/

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

图片

重点看以下文件:

  • pl.dtsi: 这是一个所有内存映射外设逻辑 (PL) IP 节点都可用的文件。
  • pcw.dtsi: 这是一个文件,其中包含 PS 外设所需的动态属性。
  • system-top.dts: 这是一个包含内存信息、早期控制台和引导参数的文件。
  • zynqmp.dtsi: 此文件包含所有 PS 外设信息以及 cpu 信息。
  • zynqmp-clk-ccf.dtsi: 该文件包含外设 IP 的所有时钟信息。
  • zynqmp-smk-k26-reva.dtsi :它包含所有板特定的属性。

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中内容优先级最高。 该文件夹中没有调用plnx-proj-root/project-spec/dts_dir/中的文件,所以dts_dir文件夹中内容没有起作用。

Devicetree Generator (DTG)

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

内核引导参数

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

    关注

    87

    文章

    10990

    浏览量

    206733
  • Xilinx
    +关注

    关注

    70

    文章

    2121

    浏览量

    119373
  • C语言
    +关注

    关注

    180

    文章

    7530

    浏览量

    128535
  • Zynq
    +关注

    关注

    9

    文章

    600

    浏览量

    46620
  • 设备树
    +关注

    关注

    0

    文章

    35

    浏览量

    3045
收藏 人收藏

    评论

    相关推荐

    iMX6Q开发设备内核-注册驱动例程介绍

    `文档主要讲解在 iMX6Q/D/PLUS 开发板的设备内核(4.1.15)源码设备注册
    发表于 07-18 15:42

    iTOP-iMX6开发板-设备内核-注册驱动例程

    本文档主要讲解在迅为iTOP-iMX6Q/D/PLUS 开发板的设备内核(4.1.15)源码设备
    发表于 08-09 10:01

    【正点原子FPGA连载】第十八章Linux内核移植-领航者ZYNQ之linux开发指南

    zynq-zc702.dtb就是Xilinx官方的ZYNQ ZC702 EVK开发板对应的设备文件。至此我们得到两个文件:①Linux内核
    发表于 09-14 15:42

    【正点原子FPGA连载】第二十章另一种方式编译ZYNQ镜像-领航者ZYNQ之linux开发指南

    原子公众号,获取最新资料第二十章另一种方式编译ZYNQ镜像本篇是ARM Linux驱动开发的第一章,本章跟驱动开发并没有什么关系,由于前面我们一直都是使用xilinx的petali
    发表于 09-15 15:24

    【正点原子FPGA连载】第二十四章Linux设备-领航者ZYNQ之linux开发指南

    zynq_dt_match表的任何一个值相等,那么就表示Linux内核支持这个开发板、支持这个硬件平台。前面也跟大家说过了,我们使用的设备
    发表于 09-16 15:31

    【正点原子FPGA连载】第二十五章设备树下的LED驱动实验-领航者ZYNQ之linux开发指南

    完成,只是将其驱动开发改为设备树形式而已。25.1设备LED驱动原理在《第二十三章 新字符设备驱动实验》
    发表于 09-16 17:21

    迅为iMX6开发板- 设备内核-设备相关文件简要分析

    在支持设备的内核源码设备用来取代来老版本内核的平台文件。本文档主要介绍在 iMX6
    发表于 10-21 10:51

    迅为iMX6开发板-设备内核-注册设备例程

    本文档主要讲解在 iMX6Q/D/PLUS 开发板的设备内核(4.1.15)源码,注册设备需要在设备
    发表于 11-18 11:25

    iMX6开发设备文件分析

    在支持设备的内核源码设备用来取代来老版本内核的平台文件。本文档主要介绍在 iMX6
    发表于 12-30 07:29

    浅析嵌入式linuxARM板设备路径设备的信息

    嵌入式linuxARM板设备路径设备的信息——根节点cd /sys/firmware/devicetree/base/。platfor
    发表于 12-14 06:19

    设备开发的相关资料下载

    常用名词解释DT:Device Tree设备FDT: Flattened Device Tree展开设备开放固件,设备树起源于OF,所以
    发表于 12-24 06:40

    请问设备的gpio号怎么确定?

    我刚接触5718这个平台,找了飞凌提供的资料,但是没找到设备中提供的gpio号是怎么对应的。例如,led设备给出的是gpios = ;
    发表于 01-06 06:30

    设备iomux添加复用gpio引脚

    IMX6ULRM.pdf 手册对应寄存器。3.在设备 iomux 添加复用 gpio 引脚如下:同时修改
    发表于 01-12 08:30

    什么是设备?由什么组成?设备怎么使用?

    什么是设备?由什么组成?设备怎么使用?
    发表于 03-04 07:04

    【米尔-TIAM62开发板-接替335x-试用评测】+(三)手把手创建Uboot设备与内核设备实战

    (例如U-Boot和Linux内核)在引导过程获取和解析这些信息,以便正确地初始化和操作硬件。 (三)本人网名\"还没吃饭\"手把手设备实战(以米尔-TIAM62开发板为例
    发表于 11-28 09:54