0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

zynq開(kāi)發(fā)中的設(shè)備樹(shù)

CHANBAEK ? 來(lái)源:硬碼農(nóng)二毛哥 ? 作者:硬碼農(nóng)二毛哥 ? 2023-05-25 11:29 ? 次閱讀

在zynq開(kāi)發(fā)中經(jīng)常會(huì)修改設(shè)備樹(shù),每次遇到這種情況都有點(diǎn)發(fā)愁,今天把設(shè)備樹(shù)相關(guān)的知識(shí)點(diǎn)總結(jié)一下,希望以后遇到設(shè)備樹(shù)時(shí),能夠自如應(yīng)對(duì)。

什么是設(shè)備樹(shù)

設(shè)備樹(shù)時(shí)描述硬件的數(shù)據(jù)結(jié)構(gòu),Linux系統(tǒng)可以通過(guò)設(shè)備樹(shù)了解硬件結(jié)構(gòu),不需要進(jìn)行編碼。

設(shè)備樹(shù)文件類(lèi)型

  • DTSI: 設(shè)備樹(shù)頭文件,類(lèi)似C語(yǔ)言中的.h文件,供DTS文件調(diào)用。
  • DTS:.dts文件是設(shè)備樹(shù)的源文件。相當(dāng)于C語(yǔ)言的.c文件。
  • DTC:DTC是將.dts編譯為.dtb的工具,相當(dāng)于gcc。
  • DTG:Xilinx設(shè)備樹(shù)編譯工具。
  • DTB:.dtb文件是 .dts 被 DTC 編譯后的二進(jìn)制格式的設(shè)備樹(shù)文件,它可以被linux內(nèi)核解析。

DTS語(yǔ)法介紹

每個(gè)module在設(shè)備樹(shù)中被定義成node。在dts文件中,一個(gè)node被定義成

[label:]node-name[@unit-address]{
  [properties definitions]
  [child nodes]
}
  • [lable:]: 設(shè)備樹(shù)文件允許標(biāo)簽附加在任何節(jié)點(diǎn)或者屬性上。
  • node-name:是指節(jié)點(diǎn)的名字。
  • [@unit-address]:是指節(jié)點(diǎn)所在的基地址。
  • [properties definitions]:是指相關(guān)屬性的定義。
  • [child nodes]:是指相關(guān)的子節(jié)點(diǎn)

以如下設(shè)備樹(shù)為例:

/ {
  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>;
};
  • “/”代表根節(jié)點(diǎn);
  • “compatible”為平臺(tái)兼容;
  • #address-cells是address的單板(32bit)
  • #size-cells”是length的單位(32bit)
  • ”chosen“是板級(jí)啟動(dòng)參數(shù)
  • "memory"是板級(jí)內(nèi)存的信息。
  • “device_type":設(shè)備類(lèi)型,尋找節(jié)點(diǎn)可以依據(jù)這個(gè)屬性;

KV260中的設(shè)備樹(shù)文件

在petalinux工程中設(shè)備主要在三個(gè)地方,其中plnx-proj-root為工程目錄名。

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

  • 系統(tǒng)用戶(hù).dtsi
  • xen.dtsi文件
  • pl-custom.dtsi
  • 打開(kāi)放大器.dtsi
  • xen-qemu.dtsi

其中system-user.dtsi是主要修改的文件,該文件中的內(nèi)容具有更好優(yōu)先級(jí)。

例如要增加phy芯片信息,可以在system-user.dtsi增加如下內(nèi)容。

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

圖片

我理解這個(gè)文件夾中的內(nèi)容,需要添加到system-user.dtsi才會(huì)起作用。

3、/組件/plnx_workspace/設(shè)備樹(shù)/設(shè)備樹(shù)/

文件夾的內(nèi)容不建議修改。

圖片

重點(diǎn)看以下文件:

  • pl.dtsi: 這是一個(gè)所有內(nèi)存映射外設(shè)邏輯 (PL) IP 節(jié)點(diǎn)都可用的文件。
  • pcw.dtsi: 這是一個(gè)文件,其中包含 PS 外設(shè)所需的動(dòng)態(tài)屬性。
  • system-top.dts: 這是一個(gè)包含內(nèi)存信息、早期控制臺(tái)和引導(dǎo)參數(shù)的文件。
  • zynqmp.dtsi: 此文件包含所有 PS 外設(shè)信息以及 cpu 信息。
  • zynqmp-clk-ccf.dtsi: 該文件包含外設(shè) IP 的所有時(shí)鐘信息。
  • zynqmp-smk-k26-reva.dtsi :它包含所有板特定的屬性。

system-top.dts中文件內(nèi)容如下:

/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"

由文件內(nèi)容可知,該文件為頂層文件,調(diào)用各個(gè)模塊,最后調(diào)用system-user.dtsi,所以system-user.dtsi中內(nèi)容優(yōu)先級(jí)最高。 該文件夾中沒(méi)有調(diào)用plnx-proj-root/project-spec/dts_dir/中的文件,所以dts_dir文件夾中內(nèi)容沒(méi)有起作用。

Devicetree Generator (DTG)

Xilinx設(shè)備樹(shù)生成工具DTG,幫助用戶(hù)構(gòu)建特定硬件的設(shè)備樹(shù)。 不用使用手動(dòng)編譯過(guò)程,直接從XSA文件獲取和硬件信息。

內(nèi)核引導(dǎo)參數(shù)

“Kernel Bootargs”子菜單允許 PetaLinux 在 DTS 中自動(dòng)生成內(nèi)核啟動(dòng)命令行設(shè)置,或者傳遞 PetaLinux 用戶(hù)定義的內(nèi)核啟動(dòng)命令行設(shè)置。 以下是默認(rèn)的 bootargs。

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

如果希望在控制臺(tái)上看到內(nèi)核錯(cuò)誤打印信息,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
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11211

    瀏覽量

    208721
  • Xilinx
    +關(guān)注

    關(guān)注

    71

    文章

    2155

    瀏覽量

    120853
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7595

    瀏覽量

    135866
  • Zynq
    +關(guān)注

    關(guān)注

    9

    文章

    607

    瀏覽量

    47101
  • 設(shè)備樹(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    38

    瀏覽量

    3105
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    iTOP-iMX6開(kāi)發(fā)板-設(shè)備樹(shù)內(nèi)核-注冊(cè)驅(qū)動(dòng)例程

    本文檔主要講解在迅為iTOP-iMX6Q/D/PLUS 開(kāi)發(fā)板的設(shè)備樹(shù)內(nèi)核(4.1.15)源碼,設(shè)備樹(shù)
    發(fā)表于 08-09 10:01

    【正點(diǎn)原子FPGA連載】第二十章另一種方式編譯ZYNQ鏡像-領(lǐng)航者ZYNQ之linux開(kāi)發(fā)指南

    原子公眾號(hào),獲取最新資料第二十章另一種方式編譯ZYNQ鏡像本篇是ARM Linux驅(qū)動(dòng)開(kāi)發(fā)的第一章,本章跟驅(qū)動(dòng)開(kāi)發(fā)并沒(méi)有什么關(guān)系,由于前面我們一直都是使用xilinx的petali
    發(fā)表于 09-15 15:24

    【正點(diǎn)原子FPGA連載】第二十四章Linux設(shè)備樹(shù)-領(lǐng)航者ZYNQ之linux開(kāi)發(fā)指南

    zynq_dt_match表的任何一個(gè)值相等,那么就表示Linux內(nèi)核支持這個(gè)開(kāi)發(fā)板、支持這個(gè)硬件平臺(tái)。前面也跟大家說(shuō)過(guò)了,我們使用的設(shè)備樹(shù)
    發(fā)表于 09-16 15:31

    迅為iMX6開(kāi)發(fā)板- 設(shè)備樹(shù)內(nèi)核-設(shè)備樹(shù)相關(guān)文件簡(jiǎn)要分析

    在支持設(shè)備樹(shù)的內(nèi)核源碼,設(shè)備樹(shù)用來(lái)取代來(lái)老版本內(nèi)核的平臺(tái)文件。本文檔主要介紹在 iMX6
    發(fā)表于 10-21 10:51

    迅為iMX6開(kāi)發(fā)板-設(shè)備樹(shù)內(nèi)核-注冊(cè)設(shè)備例程

    本文檔主要講解在 iMX6Q/D/PLUS 開(kāi)發(fā)板的設(shè)備樹(shù)內(nèi)核(4.1.15)源碼,注冊(cè)設(shè)備需要在設(shè)備
    發(fā)表于 11-18 11:25

    iMX6開(kāi)發(fā)設(shè)備樹(shù)文件分析

    在支持設(shè)備樹(shù)的內(nèi)核源碼,設(shè)備樹(shù)用來(lái)取代來(lái)老版本內(nèi)核的平臺(tái)文件。本文檔主要介紹在 iMX6
    發(fā)表于 12-30 07:29

    淺析嵌入式linuxARM板設(shè)備樹(shù)路徑設(shè)備樹(shù)的信息

    嵌入式linuxARM板設(shè)備樹(shù)路徑設(shè)備樹(shù)的信息——根節(jié)點(diǎn)cd /sys/firmware/devicetree/base/。platfor
    發(fā)表于 12-14 06:19

    設(shè)備樹(shù)開(kāi)發(fā)的相關(guān)資料下載

    常用名詞解釋DT:Device Tree設(shè)備樹(shù)FDT: Flattened Device Tree展開(kāi)設(shè)備樹(shù)開(kāi)放固件,設(shè)備樹(shù)起源于OF,所以
    發(fā)表于 12-24 06:40

    請(qǐng)問(wèn)設(shè)備樹(shù)的gpio號(hào)怎么確定?

    我剛接觸5718這個(gè)平臺(tái),找了飛凌提供的資料,但是沒(méi)找到設(shè)備樹(shù)中提供的gpio號(hào)是怎么對(duì)應(yīng)的。例如,led設(shè)備樹(shù)給出的是gpios = ;
    發(fā)表于 01-06 06:30

    【米爾-TIAM62開(kāi)發(fā)板-接替335x-試用評(píng)測(cè)】+(三)手把手創(chuàng)建Uboot設(shè)備樹(shù)與內(nèi)核設(shè)備樹(shù)實(shí)戰(zhàn)

    (例如U-Boot和Linux內(nèi)核)在引導(dǎo)過(guò)程獲取和解析這些信息,以便正確地初始化和操作硬件。 (三)本人網(wǎng)名\"還沒(méi)吃飯\"手把手設(shè)備樹(shù)實(shí)戰(zhàn)(以米爾-TIAM62開(kāi)發(fā)板為例
    發(fā)表于 11-28 09:54

    以Xilinx Zynq-7000為例說(shuō)明設(shè)備樹(shù)的運(yùn)用

    由于內(nèi)核版本的演變,設(shè)備樹(shù)成了任何使用較高版本linux系統(tǒng)的設(shè)備平臺(tái)所必須文件,然國(guó)內(nèi)相關(guān)技術(shù)文檔嚴(yán)重不足,本文是國(guó)外技術(shù)專(zhuān)欄的翻譯,原文鏈接: 本教程是針對(duì)Xilinx Zynq-
    發(fā)表于 11-17 11:14 ?8309次閱讀

    Petalinux工程設(shè)備樹(shù)的介紹

    設(shè)備樹(shù)是 Petalinux kernel 的關(guān)鍵組件,接下來(lái)以 2020.1 版本為例,為大家介紹一下在Xilinx Petalinux 工程設(shè)備
    的頭像 發(fā)表于 02-20 16:32 ?6793次閱讀
    Petalinux工程<b class='flag-5'>中</b><b class='flag-5'>設(shè)備</b><b class='flag-5'>樹(shù)</b>的介紹

    設(shè)備樹(shù)的傳遞及kernel 對(duì)設(shè)備樹(shù)的解析

    當(dāng) U-Boot 將設(shè)備樹(shù)加載到內(nèi)存指定位置后,ARM 內(nèi)核的 SoC 以通用寄存器 r2 來(lái)傳遞 dtb 在內(nèi)存的地址。kernel 獲取到該地址后對(duì) dtb 文件做進(jìn)一步的處理。 設(shè)備
    的頭像 發(fā)表于 07-29 11:19 ?2353次閱讀
    <b class='flag-5'>設(shè)備</b><b class='flag-5'>樹(shù)</b>的傳遞及kernel 對(duì)<b class='flag-5'>設(shè)備</b><b class='flag-5'>樹(shù)</b>的解析

    Linu設(shè)備樹(shù)及其語(yǔ)法介紹

    設(shè)備樹(shù)的本質(zhì)也是操作寄存器,只不過(guò)寄存器的相關(guān)信息放在了設(shè)備樹(shù),配置寄存器時(shí)需要使用OF函數(shù)從設(shè)備
    的頭像 發(fā)表于 04-14 11:38 ?1107次閱讀
    Linu<b class='flag-5'>設(shè)備</b><b class='flag-5'>樹(shù)</b>及其語(yǔ)法介紹

    Zynq-7000的PL端功能動(dòng)態(tài)設(shè)備樹(shù)使用方法

    目錄前言————31動(dòng)態(tài)設(shè)備樹(shù)生成————41.1生成硬件描述文件————41.2導(dǎo)入設(shè)備樹(shù)源碼————71.3生成動(dòng)態(tài)設(shè)備
    發(fā)表于 10-22 10:31 ?10次下載