日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

生成设备树Blob

發布時間:2024/9/27 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 生成设备树Blob 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

該頁面涵蓋了使用Xilinx工具生成devicetree源(DTS)文件以及使用標準開源工具構建/編譯這些源文件的過程。特別是,將涉及使用Xilinx設備樹生成器(DTG)從Xilinx硬件項目生成DTS文件,而將涉及設備樹編譯器(DTC)將DTS文件編譯為設備樹二進制文件(DTB)。盡管DTB的主要用途是將其提供給Linux內核,以便可以將Linux正確初始化為特定的硬件,但是DTB也可以與QEMU一起使用,以仿真Linux和獨立系統的硬件。

目錄

?

  • 子頁面
  • 設備樹101
    • 什么是devicetree?
    • Devicetree基礎
    • Devicetree語法示例
    • 設備樹屬性
  • 設備樹生成器(DTG)
    • 任務依賴項(先決條件)
    • 任務輸出產品
    • 第1步:獲取DTG源
    • 步驟2:生成DTS文件
      • 使用XSCT生成DTS文件
      • 使用Xilinx SDK生成DTS文件(GUI流:工具版本2014.2-2019.1)
        • 從硬件項目生成HDF文件(如果尚不可用)
        • 從SDK生成設備樹源(.dts / .dtsi)文件
      • 使用HSI生成DTS文件(XSCT不贊成使用CLI流)
      • 使用HSM生成DTS文件(XSCT不贊成使用CLI流)
      • 使用XPS / SDK生成DTS文件(舊版GUI流程:工具版本2014.1及更低版本)
    • 步驟3:僅對獨立的MicroBlaze仿真進行附加檢查
    • DTG局限性
    • 2020.1的新功能:
    • DTG支持的驅動程序列表及其在Linux樹中的綁定
  • 編譯Devicetree源
    • 步驟1:獲取Devicetree編譯器源
    • 步驟2:預處理Devicetree源
    • 步驟3:從DTS編譯Devicetree Blob(.dtb)文件
    • 雜項
      • 替代:僅適用于ARM
      • Devicetree二進制比較
  • 高級DTG主題
    • 如何從DTG啟用DT OVERLAY
    • 為自定義硬件和驅動程序自定義/擴展DTG
      • 相關檔案
      • 驅動定義
      • 如何將新的驅動程序添加到DTG
  • 發行說明
  • 建立步驟
  • 相關鏈接

?

子頁面

?

  • 多媒體IP的DTG限制

?

設備樹101

什么是devicetree?

設備樹或簡稱為DT是描述硬件的數據結構。它描述了可由Linux等操作系統讀取的硬件,因此不需要對計算機的詳細信息進行硬編碼。
Linux基本上將DT用于平臺識別,運行時配置(如bootargs)和設備節點填充。

Devicetree基礎

設備樹中的每個驅動程序或模塊均由該節點定義,并且其所有屬性均在該節點下定義?;隍寗映绦?#xff0c;它可以具有子節點或父節點。

例如,通過SPI總線連接的設備將以SPI總線控制器作為其父節點,而該設備將成為spi節點的子節點之一。根節點是所有節點的父節點。

在根節點下通常包括
1)CPU節點信息
2)內存信息
3)選擇的配置數據可以包括內核參數字符串和initrd映像的位置
4)別名
5)定義總線信息的節點

Devicetree語法示例

zynqmp-example.dtsi
/ { ????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>; ??}; ?? ??amba_apu: amba_apu@0 { ??????????????compatible =?"simple-bus"; ??????????????#address-cells = <2>; ??????????????#size-cells = <1>; ??????????????ranges = <0 0 0 0 0xffffffff>; ??????????????gic: interrupt-controller@f9010000 { ????????????????????????compatible =?"arm,gic-400",?"arm,cortex-a15-gic"; ????????????????????????#interrupt-cells = <3>; ????????????????????????reg = <0x0 0xf9010000 0x10000>, ???????????????????????????????0x0 0xf9020000 0x20000>, ???????????????????????????????0x0 0xf9040000 0x20000>, ???????????????????????????????0x0 0xf9060000 0x20000>, ????????????????????????interrupt-controller; ????????????????????????interrupt-parent = <&gic>; ????????????????????????interrupts =<1 9 0xf04>; ??????????????}; ??}; ?? ??amba: amba { ??????????compatible =?"simple-bus"; ??????????#address-cells = <2>; ??????????#size-cells = <2>; ??????????ranges; ??????????can0: can@ff060000 { ?????????????????????compatible =?"xlnx,zynq-can-1.0"; ?????????????????????clock-names =?"can_clk",?"pclk"; ?????????????????????reg =<0x0 0xff060000 0x0 0x1000>; ?????????????????????interrupts = <0 23 4>; ?????????????????????interrupt-parent = <&gic>; ?????????????????????tx-fifo-depth = <0x40>; ?????????????????????rx-fifo-depth = <0x40>; ?????????????????????power-domains = <&pd_can0>; ??????????}; ??};

設備樹屬性

兼容:頂級兼容屬性通常為電路板然后為SoC定義一個兼容字符串。
值始終以最具體的優先為準,最后指定的最不具體為準。
#address-cells:該屬性指示在reg屬性中形成基地址部分需要多少個單元(即32位值)。
#size-cells:reg屬性的大小部分。
interrupt-controller:是一個布爾型屬性,指示當前節點是一個中斷控制器。
#interrupt-cells:指示由所選中斷控制器管理的中斷的interrupts屬性中的單元數。
中斷父母:是一個虛擬對象,它指向當前節點的中斷控制器。通常,主中斷控制器有一個頂級中斷父級定義。

設備樹生成器(DTG)

DTG旨在幫助用戶構建其特定于硬件的DTS文件。為自定義硬件構建DTS始終是一個手動過程,但是DTG可以幫助用戶快速入門。這是因為可以從硬件交接文件(XSA)中的信息中提取DTS中捕獲的許多信息。DTG會根據提供的XSA文件為各種DTS文件填充盡可能多的信息,然后要求用戶填寫空白或根據需要進行調整。

版本檢查

對于較早版本的Xilinx工具,使用DTG的過程有所不同。此外,對于某些工具版本,可能存在GUI流程和CLI流程。下面的“生成DTS文件”部分為每個不同的過程提供了幾個小節。如果您沒有使用最新版本的Xilinx工具,請確保參考所提供的第一個部分之外的適當子部分。

任務??依賴項(先決條件)

  • DTG來源

  • Xilinx Vivado工具(以前是HDF)生成的XSA硬件交接文件

  • Xilinx Vitis安裝(或以前的Xilinx SDK)

任務輸出產品

DTG生成帶有* .dts和* .dtsi文件擴展名的DTS文件。將有一個帶有* include語句的頂級* .dts文件,以引用單獨的DTS包含(DTSI)文件。使用DTSI文件可以在不同文件之間組織信息。例如,如下文更詳細描述的,一個DTSI可以用來描述固定硬件(即固定在硅片上),而另一個DTSI可以用來描述動態硬件(即可編程邏輯中的IP)。

通常,對于SOC,將有一個靜態的dts / dtsi文件,但是當涉及FPGA時,可能會有許多復雜的設計,其外圍邏輯(PL)IP可能會有所不同,或者可能具有不同的配置。
對于這些復雜的FPGA設計,我們需要一個設備樹生成器(DTG),在其中它可以為這些設計自動生成dts / dtsi。

生成后,輸出目錄中將提供不同的文件,例如pl.dtsi,pcw.dtsi,system-top.dts,zynqmp.dtsi,zynqmp-clk-ccf.dtsi。這些文件如下所述。

  • pl.dtsi:這是一個文件,所有存儲器映射的外圍邏輯(PL)IP節點都將可用。
  • pcw.dtsi:這是PS外設需要動態屬性的文件。
  • system-top.dts:這是一個文件,其中包含內存信息,早期控制臺和引導參數。
  • zynqmp.dtsi:此文件包含所有PS外圍設備信息以及cpu信息。
  • zynqmp-clk-ccf.dtsi:此文件包含外圍IP的所有時鐘信息。


除了這些文件以外,它還會基于board在同一輸出目錄dt?/?下生成一個board.dtsi文件。例如,如果板卡是zcu111-reva,則它將生成dt / zcu111-reva.dtsi。

  • zcu111-reva.dtsi:它包含所有板子特定的屬性,例如i2c可能已連接到某個從站等。

實際文件輸出將根據設備架構(例如ZynqUS +與Zynq-7000與MicroBlaze)而有所不同。

第1步:獲取DTG源

DTG是一個開源實用程序,其源代碼發布在Xilinx GitHub網站上。它使用解釋語言(Tcl),因此無需編譯源代碼。

git clone https://github.com/Xilinx/device-tree-xlnx cd device-tree-xlnx git checkout <xilinx-v201X.X>

在上面的最后一個命令中,<xilinx-v201X.X>應該替換為有效的標記值(例如“ xilinx-v2019.2”)??梢允褂妹睢?git tag”列出可用的標簽。

步驟2:生成DTS文件

僅遵循適用于您的用例的以下各個小節。

使用XSCT生成DTS文件

  • 來源Xilinx設計工具
  • 運行XSCT(從2015.1工具版本開始可用)

    xsct
  • 打開XSA / HDF文件

    hsi open_hw_design <design_name>.<xsa|hdf>
  • 設置存儲庫路徑(在SDK的上一步中完成克隆)(在Windows上,使用此格式set_repo_path {C:\ device-tree-xlnx})

    hsi set_repo_path <path to device-tree-xlnx repository>
  • 創建軟件設計并設置CPU。-proc選項應為以下值之一:對于Versal“?psv_cortexa72_0?”,對于ZynqMP“?psu_cortexa53_0?”,對于Zynq-7000“?ps7_cortexa9_0?”,對于Microblaze“?microblaze_0?”。

    hsi create_sw_design device-tree -os device_tree -proc psv_cortexa72_0
  • 生成DTS / DTSI文件到my_dts文件夾,將在其中生成輸出DTS / DTSI文件

    hsi generate_target -dir my_dts
  • 清理。?

    hsi close_hw_design [current_hw_design] exit
  • 請注意,作為XSCT用戶指南文檔的補充,可以在此處找到有關使用HSI的一些技巧:??HSI調試和優化技術。例如,可以在此處找到列出硬件設計中所有處理器單元的命令(即IP_TYPE == PROCESSOR);這些處理器單元名稱代表上述步驟5中-proc選項的有效值。

    使用Xilinx SDK生成DTS文件(GUI流:工具版本2014.2-2019.1)

    從硬件項目生成HDF文件(如果尚不可用)

  • 在Vivado中打開硬件項目。
  • 生成模塊設計
  • IP Integrator: Generate Block Design # Export the hardware system to SDK: Vivado Menu: File > Export > Export Hardware

    ?(在<project_name> .sdk HDF文件中生成)
    ?

    從SDK生成設備樹源(.dts / .dtsi)文件

  • 從Vivado打開SDK或通過命令行打開SDK(xsdk -hwspec <文件名> .hdf -workspace <workspace>

    Vivado Menu: File > Launch SDK
  • ?
  • 需要從Xilinx克隆Device Tree Generator Git存儲庫。有關Git的更多信息,請參見Fetch Sources頁面。

    # Otherwise?for?SDK?2014.2?use?this?repo: git clone git://github.com/Xilinx/device-tree-xlnx.git
  • 在SDK中添加BSP存儲庫(對于SDK 2014.2,然后從檢出的git區域中選擇“ device-tree-xlnx”):

    SDK Menu: Xilinx Tools > Repositories > New... (<bsp repo>) > OK
  • 創建設備樹板支持包(BSP):

    SDK Menu: File > New > Board Support Package > Board Support Package OS: device-tree > Finish
  • 將出現一個BSP設置窗口。也可以通過打開設備樹BSP的system.mss文件并單擊“修改此BSP的設置”來訪問此窗口。填寫適當的值:
    • 'bootargs'參數指定在引導時(內核命令行)傳遞給內核的參數。***
    • “控制臺設備”參數指定將使用哪個串行輸出設備。從下拉列表中選擇一個值。

  • .dts / .dtsi文件現在位于<SDK工作空間> / device_tree_bsp_0 /文件夾中。

    ***例如console = <tty>,<baudrate> root = / dev / ram rw ip = ::::: eth0:dhcp earlyprintk?
    *** <tty>的一些示例值是使用Zynq時的ttyPS0,使用時是ttyUL0 UART Lite軟ip或使用UART16550軟ip時為ttyS0。

    使用HSI生成DTS文件(XSCT不贊成使用CLI流)

    從2019.2版工具開始,HSI作為獨立的實用工具不再可用,并且必須從XSCT運行HSI命令。另請注意,自從2015.1工具版本引入XSCT以來,它就一直支持HSI命令。

  • 來源Xilinx設計工具
  • 運行HSI(工具版本2014.4-2019.1)

    hsi
  • 打開HDF文件?

    open_hw_design <design_name>.hdf
  • 設置存儲庫路徑(在SDK的上一步中完成克隆)(在Windows上,使用此格式set_repo_path {C:\ device-tree-xlnx})?

    set_repo_path <path to device-tree-xlnx repository>
  • 創建軟件設計和設置CPU(用于ZynqMP psu_cortexa53_0,用于Zynq ps7_cortexa9_0,用于Microblaze microblaze_0)?

    create_sw_design device-tree -os device_tree -proc ps7_cortexa9_0
  • set_property CONFIG.periph_type_overrides“ {BOARD zcu102-rev1.0}” [get_os]?

    set_property CONFIG.periph_type_overrides?"{BOARD zcu102-rev1.0}"?[get_os]
  • 生成DTS / DTSI文件到my_dts文件夾,將在其中生成輸出DTS / DTSI文件?

    generate_target -dir my_dts
  • 在生成的my_dts文件夾中,應該存在zcu102-rev1.0.dtsi文件。
  • ?

    使用HSM生成DTS文件(XSCT不贊成使用CLI流)

    從2019.2版工具開始,HSM不再作為獨立實用程序提供,并且已被XSCT中的HSI命令棄用。另請注意,自從2015.1工具版本引入XSCT以來,它就一直支持HSI命令。

  • 來源Xilinx設計工具
  • 運行HSM(工具版本2014.4-2019.1)

    hsm
  • 打開HDF文件

    open_hw_design <design_name>.hdf
  • 設置存儲庫路徑(在SDK的上一步中完成克隆)(在Windows上,使用此格式set_repo_path {C:\ device-tree-xlnx})

    set_repo_path <path to device-tree-xlnx repository>
  • 創建軟件設計和設置CPU(用于ZynqMP psu_cortexa53_0,用于Zynq ps7_cortexa9_0,用于Microblaze microblaze_0)

    create_sw_design device-tree -os device_tree -proc ps7_cortexa9_0
  • 生成DTS / DTSI文件到my_dts文件夾,將在其中生成輸出DTS / DTSI文件

    generate_target -dir my_dts
  • 使用XPS / SDK生成DTS文件(舊版GUI流程:工具版本2014.1及更低版本)

  • 在XPS中打開硬件項目。
  • 將硬件系統導出到SDK。?

    注意:以下說明中克隆的GitHub存儲庫不再在線可用。請聯系您當地的FAE獲取存檔副本,或請求訪問Xilinx Space Lounge。

  • XPS Menu: Project > Export Hardware Design to SDK... > Export && Launch SDK # The Device Tree Generator Git repository needs to be cloned from the Xilinx. See the [[www/Fetch Sources|Fetch Sources]] page?for?more information on Git. Note that there are two repos?for?differing SDK versions below. > [[code]] > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > git clone git://github.com/Xilinx/device-tree.git bsp/device-tree_v0_00_x// > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >?//[[code]]// > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > #?//Note: In order for SDK to be able to import the Device Tree Generator correctly, the file and directory hierarchy needs to look like:// > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >?//<bsp repo>/bsp/device-tree//_v0_00_x/data/device-tree_v2_1_0.mld > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >?//<bsp repo>/bsp/device-tree//_v0_00_x/data/device-tree_v2_1_0.tcl// > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > # Add the BSP repository in SDK (for?SDK?2014.2?and later select?"device-tree-xlnx"?from the checked out git area): > [[code]] ?> SDK Menu: Xilinx Tools > Repositories > New... (<bsp repo>) > OK
  • 創建設備樹板支持包(BSP):

    SDK Menu: File > New > Board Support Package > Board Support Package OS: device-tree > Finish
  • 將出現一個BSP設置窗口。也可以通過打開設備樹BSP的system.mss文件并單擊“修改此BSP的設置”來訪問此窗口。填寫適當的值:
    • 'bootargs'參數指定在引導時(內核命令行)傳遞給內核的參數。***
    • “控制臺設備”參數指定將使用哪個串行輸出設備。從下拉列表中選擇一個值。

  • .dts文件現在位于<SDK工作區> / <設備樹bsp名稱> / <處理器名稱> / libsrc /設備樹_v0_00_x / xilinx.dts中。

    ***例如console = <tty>,<baudrate> root = / dev / ram rw ip = ::::: eth0:dhcp earlyprintk?
    *** <tty>的一些示例值是使用Zynq時的ttyPS0,使用時是ttyUL0 UART Lite軟ip或使用UART16550軟ip時為ttyS0。

    在Linux源目錄中,在linux-xlnx / arch / <architecture> / boot / dts?/?中也可以使用一些DTS文件。

    步驟3:僅對獨立的MicroBlaze仿真進行附加檢查

    如果生成用于使用QEMU仿真獨立MicroBlaze應用程序的DTS文件,則應進行一些附加檢查并注意一些最低要求。關于需求,MicroBlaze子系統(在Vivado IP集成器模塊設計中定義)必須至少具有以下組件:

    • MicroBlaze處理器
    • 記憶
    • 串行接口(AXI UART)
    • 中斷控制器(AXI INTC)

    隨附的示例DTS僅具有以下最低要求:

    ?文件編輯檔案

    應該檢查生成的DTS,并根據需要進行修改,以確保pl.dtsi文件中的MicroBlaze節點(即/> cpus> microblaze_0)具有以下屬性:

    • 記憶
    • 模型

    例如:

    ... cpus { ????????#address-cells = <1>; ????????#cpus = <1>; ????????#size-cells = <0>; ????????microblaze_0: cpu@0?{ ????????????memory = <&lmb_bram>; ????????????model =?"microblaze,8.40.b"; ????????????version =?"8.40.b"; ...

    如果內存節點已經存在,則可能只需要在其上添加標簽即可被引用(上例中為“ lmb_bram”)。標簽的名稱是任意的,但在節點定義和引用之間最一致。例如,如果系統具有DDR,則類似“ ddr_mem”的標簽會更合適。如果未生成內存節點(system-top.dts或pl.dtsi),則必須手動添加它。下面給出了向system-top.dtsi添加內存節點的示例。

    ... / { ????lmb_bram: memory@0?{ ???????????????device_type =?"memory"; ???????????????reg = <?0x0?0x10000000?>; ????} ; ...

    DTG局限性

    • zynqmp-clk-ccf.dtsi具有靜態時鐘節點配置,如果用戶要更改任何時鐘信息,請更新system-user.dtsi中的時鐘信息。
    • DTG將不支持多連接中斷塊。
    • 中斷端口寬度不超過一。
    • 為MAC IP啟用多核時(如果MAC IP大于1),則DTG中的標簽存在問題,并且失敗。但是,如果MAC IP為1并且啟用了多核,就不會有問題。
    • DTG將不支持生成專用外設中斷(PPI)。
    • DTG支持基于內部TRD設計的視頻管道生成,如Wiki??https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/25329832/Zynq+UltraScale+MPSoC+VCU+TRD+2018.3所述
    • 如果在視頻管道IP之間沒有連接任何自定義IP,DTG將不支持這些IP,則用戶可能需要添加輸入和輸出端口。
    • 對于廣播IP,輸出可以連接到多個輸出端口,而DTG無法知道哪個輸出端口對正確的管道有效。
    • 如果設計中有多個類似的視頻管道,則用戶需要在節點中添加輸入和輸出端口信息。以下Wiki提供了一些有關如何添加輸入和輸出端口的信息
    • 多媒體IP的DTG限制

    2020.1的新功能:

    • 添加了mrmac IP初始支持。
    • 添加了DPU IP支持
    • 用宏替換硬編碼的值以進行復位和上電。
    • 為DTG中的axi_mcdma IP支持添加了dma通道。
    • 為Versal的每個axi_noc IP生成內存節點

    ?

    DTG支持的驅動程序列表及其在Linux樹中的綁定

    • 可以,可以
    來自Linux樹的綁定:https?:?//github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/net/can/xilinx_can.txt
    • axi_cdma
    來自Linux樹的綁定:https?:?//github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/dma/xilinx/axi-cdma.txt
    • axi_dma
    來自Linux樹的綁定:https?:?//github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/dma/xilinx/axi-dma.txt
    • axi_emc
    • axi_ethernet,axi_10g_ethernet,xxv_ethernet
    來自Linux樹的綁定:https?:?//github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/net/xilinx_axienet.txt
    • axi_gpio
    來自Linux樹的綁定:https?:?//github.com/Xilinx/linux-xlnx/commits/master/Documentation/devicetree/bindings/gpio/gpio-xilinx.txt
    • axi_iic
    來自Linux樹的綁定:https?:?//github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/i2c/i2c-xiic.txt
    • axi_pcie,axi_pcie3,xdma
    來自Linux樹的綁定:https?:?//github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/pci/xilinx-pcie.txt
    • axi_perf_mon
    來自Linux樹的綁定:https?:?//github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/uio/xilinx_apm.txt
    • axi_quad_spi
    來自Linux樹的綁定:https?:?//github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/spi/spi-xilinx.txt
    • axi_sysace
    • axi_tft
    來自Linux樹的綁定:https?:?//github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/video/xilinx-fb.txt
    • axi_timebase_wdt
    來自Linux樹的綁定:https?:?//github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/watchdog/of-xilinx-wdt.txt
    • axi_traffic_gen
    來自Linux樹的綁定:https?:?//github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/misc/xilinx-axitrafgen.txt
    • axi_usb2_device
    來自Linux樹的綁定:https?:?//github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/usb/udc-xilinx.txt
    • VCU
    來自Linux樹的綁定:https?:?//github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/soc/xilinx/xlnx%2Cvcu.txt
    • axi_vdma
    來自Linux樹的綁定:https?:?//github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/dma/xilinx/xilinx_dma.txt
    • xadc_wiz
    來自Linux樹的綁定:https?:?//github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/iio/adc/xilinx-xadc.txt
    • axi_intc
    來自Linux樹的綁定:https?:?//github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/interrupt-controller/xilinx%2Cintc.txt
    • ddr4,ddr3,mig_7series
    • pr_decoupler
    • usp_rf_data_converter
    • axi_timer
    • tsn_endpoint_ethernet_mac
    來自Linux樹的綁定:https?:?//github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/net/xilinx_tsn.txt
    • axi_uartlite
    來自Linux樹的綁定:https?:?//github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/serial/uartlite.c
    • axi_uart16550
    對于其他IP,DTG將調用通用驅動程序。
    • framebuf_rd / framebuf_wr? ? ? ?
      來自Linux樹的綁定??https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/dma/xilinx/xilinx_frmbuf.txt
    • Linux樹中的sdi_rx子系統? ?綁定??https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/media/xilinx/xlnx%2Csdirxss.txt
    • 來自Linux樹的mipi csi2 rx子系統? ? ?綁定??https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/media/xilinx/xlnx%2Ccsi2rxss.txt
    • 來自Linux樹的demosaic? ? ? ? ??綁定??https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/media/xilinx/xlnx%2Cv-demosaic.txt
    • 來自Linux樹的gamma? ? ? ? ? ? ??綁定??https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/media/xilinx/xlnx%2Cv-gamma-lut.txt
    • Linux樹中的multiscaler? ? ? ?綁定??https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/media/xilinx/xlnx%2Cv-multi-scaler.txt
    • 來自Linux樹的scaler? ? ? ? ? ? ? ?綁定??https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/media/xilinx/xlnx%2Cv-scaler.txt
    • 來自Linux樹的場景更改檢測器? ? ? ? ? ? ? ? ? ? ? ? ? ? ?綁定??https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/media/xilinx/xlnx%2Cv-scd.txt
    • 來自Linux樹的視頻定時控制器(vtc)? ? ? ? ? ? ? ? ? ? ?綁定??https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/media/xilinx/xlnx%2Cv-tc.txt
    • 來自Linux樹的視頻測試模式生成器(TPG)? ? ? ? ??綁定??https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/media/xilinx/xlnx%2Cv-tpg.txt
    • 色彩空間轉換器(CSC)? ? ? ? ? ? ? ? ? ??來自Linux樹的綁定??https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/media/xilinx/xlnx%2Cv-vpss-csc.txt
    • 來自Linux樹的vpss縮放器? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??綁定??https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/media/xilinx/xlnx%2Cv-vpss-scaler.txt
    • Linux樹中的sdi_tx子系統? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?綁定??https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/drm/xilinx/sdi.txt
    • 來自Linux樹的dsi? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??綁定??https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/drm/xilinx/dsi.txt
    • hdmi tx? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??綁定??https://github.com/Xilinx/hdmi-modules/blob/master/Documentation/devicetree/bindings/xlnx%2Cv-hdmi-tx-ss.txt
    • hdmi rx? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??綁定??https://github.com/Xilinx/hdmi-modules/blob/master/Documentation/devicetree/bindings/xlnx%2Cv-hdmi-rx-ss.txt

    編譯Devicetree源

    本節介紹使用設備樹編譯器(DTC)將設備樹源編譯為設備樹Blob(DTB)的過程。設備樹Blob是《入門》中介紹的Xilinx設計流程的一部分。

    步驟1:獲取Devicetree編譯器源

    以下是可用于直接從其Git存儲庫獲取DTC的命令。另外,DTC是Linux源代碼的一部分。例如,如果Xilinx Linux源目錄可用,則可以在linux-xlnx / scripts / dtc中找到DTC。

    git clone https://git.kernel.org/pub/scm/utils/dtc/dtc.git cd dtc make export PATH=$PATH:/<path-to-dtc>/dtc

    步驟2:預處理Devicetree源

    如上一節所述,DTG會生成多個devicetree文件,并使用“ #include”指令將它們鏈接在一起。在將該設備樹源提供給編譯器(DTC)之前,必須對頂級DTS進行預處理,以將所有源合并為一個DTS。這可以使用標準的GNU C編譯器來完成。例如:

    gcc -I my_dts -E -nostdinc -undef -D__DTS__ -x assembler-with-cpp -o system.dts system-top.dts

    步驟3:從DTS編譯Devicetree Blob(.dtb)文件

    稱為設備樹編譯器(DTC)的實用程序用于將DTS文件編譯為DTB文件。DTC是Linux源目錄的一部分。linux-xlnx / scripts / dtc /包含DTC的源代碼,需要進行編譯才能使用。編譯DTC的一種方法是構建Linux樹。也可以通過操作系統的程序包管理器來獲取DTC。

    一旦DTC可用,就可以調用該工具以生成DTB,其中“ system.dts”是預處理產生的聚合設備樹源。
    cd /<path-to-dtc>/dtc dtc -I dts -O dtb -o system.dtb system.dts
    DTC也可以用于將DTB轉換回DTS:
    dtc -I dtb -O dts -o system.dts system.dtb

    雜項

    以下各節假定您具有可用的Linux源。

    替代:僅適用于ARM

    在Linux源目錄中,使目標“ dtbs”將把linux-xlnx / arch / arm / boot / dts /中的所有DTS文件編譯為DTB文件。

    make ARCH=arm dtbs

    編譯后的DTB文件將位于linux-xlnx / arch / arm / boot / dts /中。
    可以將單個linux-xlnx / arch / arm / boot / dts / <設備樹名稱> .dts編譯為linux-xlnx / arch / arm / boot / dts / <設備樹名稱> .dtb:
    make ARCH=arm <devicetree name>.dtb

    Devicetree二進制比較

    Linux源代碼還包括用于DTB比較的腳本。我們可以使用dtx_diff二進制文件檢查兩個devicetree blob(DTB文件)之間的差異,如下所示。

    cd linux-xlnx/scripts/dtc make ARCH=arm <devicetree name>.dtb dtx_diff system1.dtb system2.dtb

    ?

    高級DTG主題

    如何從DTG啟用DT OVERLAY

    本節僅關注設備樹覆蓋的DTG方面。有關使用覆蓋的更多綜合信息,請參見適用的FPGA Manager驅動程序頁面??梢栽贚inux Drivers下找到適用頁面的鏈接。

    使用HSI命令1.
    克隆設備樹存儲庫
    https://github.com/Xilinx/device-tree-xlnx
    2)轉到HSI提示符
    [vabbarap @ xhdl3763 / proj / xhdsswstaff / vabbarap / Overlay / New_hdf>%hsi?
    hsi v2017.3(64位)SW Build 2018833(2017年10月4日星期三19:58:07 MDT)
    版權所有1986-2017 Xilinx,Inc.保留所有權利。
    3)
    HSI%?open_hw_design system.hdf?
    4)
    HSI%?set_repo_path /家/ vabbarap /工作區/ sync_dt_tip / clk_wiz_15_12_2017(DTG回購路徑)
    5)
    HSI%?create_sw_design -proc psu_cortexa53_0 SD22 -OS device_tree?
    6)
    HSI%?set_property CONFIG.dt_overlay真[ get_os]?
    7)
    hsi%generate_target -dir dt /?
    hsi%?ls?dt /
    pcw.dtsi pl.dtsi sd22.mss system-top.dts zynqmp-clk-ccf.dtsi zynqmp.dtsi

    使用XSCT??(從2019.2版本開始不支持hsi)

    2)轉到XSCT提示符

    [問題]→xsct

    ****** Xilinx軟件命令行工具(XSCT)v2020.1.0

    3)hsi open_hw_design system.xsa

    4)hsi set_repo_path??/ home / vabbarap / workspace / sync_dt_tip / dt_15_12_2019??(DTG存儲庫路徑)

    5)hsi create_sw_design -proc psu_cortexa53_0 sd22 -os device_tree?

    6)HSI generate_target -dir dt
    ?

    為自定義硬件和驅動程序自定義/擴展DTG

    本部分適用于希望擴展DTG以適應其自定義硬件和驅動程序的用戶。

    相關檔案

    微處理器軟件規范(MSS)文件

    MSS文件包含用于自定義操作系統(OS),庫和驅動程序的指令。

    微處理器驅動程序定義(MDD)文件

    MDD文件包含用于自定義軟件驅動程序的指令。
    每個設備驅動程序都有一個MDD文件和一個與之關聯的Tcl文件。Tcl文件使用MDD文件來自定義驅動程序,具體取決于MSS文件中配置的不同選項。
    每個驅動程序的驅動程序源文件和MDD文件必須位于特定目錄中,以便找到文件和驅動程序。

    驅動定義

    驅動程序定義涉及定義數據定義文件(MDD)和數據生成文件(Tcl文件)。
    數據定義文件:MDD文件(<driver_name> .mdd)包含可配置的參數。
    數據生成文件:第二個文件(<驅動程序名稱> .tcl,文件名與MDD文件名相同)使用MSS文件中配置的參數來為
    驅動程序生成數據。

    如何將新的驅動程序添加到DTG

    1.同步倉庫https://github.com/xilinx/device-tree-xlnx
    2.創建一個帶有驅動程序名稱的文件夾,例如axi_iic?device-tree-xlnx / axi_iic /
    3.在axi_iic下添加文件數據,例如設備樹-XLNX / axi_iic /數據/
    4.創建下的文件axi_iic.mdd和axi_iic.tcl?設備樹-XLNX / axi_iic /數據/ axi_iic.mdd axi_iic.tcl
    5.為文件的語法axi_iic.mdd是如
    設備樹xlnx / axi_iic / data / axi_iic.mdd
    OPTION psf_version = 3.0; ? BEGIN driver axi_iic OPTION supported_peripherals = (axi_iic);--> the axi_iic is the IP_NAME?which?we get from the HDF?file. OPTION supported_os_types = (DTS); OPTION driver_state = ACTIVE; OPTION NAME = axi_iic; END drive

    6.將定義文件axi_iic.tcl的語法,在該語法中可以基于某些條件設置需要設置的屬性。
    我們使用HSI API更新節點屬性。下面我們更新axi_iic的clock屬性,如下所示調用泛型函數
    設備樹xlnx / axi_iic / data / axi_iic.tcl
    if?{[string match -nocase $proctype?"psu_cortexa53"] } { ????update_clk_node $drv_handle?"s_axi_aclk" }

    7. pl.dtsi中生成的節點應如下所示

    dtsi
    io_bd_iic_0: i2c@a1200000 { ????#address-cells = <1>; ????#size-cells = <0>; ????clock-names =?"s_axi_aclk"; ????clocks = <&misc_clk_0>; ????compatible =?"xlnx,xps-iic-2.00.a"; ????interrupt-names =?"iic2intc_irpt"; ????interrupt-parent = <&gic>; ????interrupts = <0 2 4>; ????reg = <0x0 0xa1200000 0x0 0x10000>; };

    自定義IP:
    對于自定義IP,DTG將生成具有“兼容”屬性的節點,并在連接任何節點時中斷。


    ?

    發行說明

    • 2016.4 DTG發行說明
    • http://www.wiki.xilinx.com/2017.3+Linux+and+DTG+Release+Notes
    • http://www.wiki.xilinx.com/2017.4+Linux+and+DTG+Release+Notes
    • http://www.wiki.xilinx.com/2018.1+Linux+and+DTG+Release+Notes
    • http://www.wiki.xilinx.com/2018.2+Linux+and+DTG+Release+Notes
    • 2018.3開源組件發行說明??(請參閱DTG部分)

    建立步驟

    • 取得來源

    • 建立FSBL
    • 構建設備樹編譯器(DTC)
    • 構建PMU固件
    • 建立Arm受信任的固件(ATF)
    • 建立U-Boot
    • 構建和修改根文件系統
    • (您在此處)構建設備樹Blob
    • 構建Linux內核
    • 準備啟動映像
    • 準備啟動媒體
    • 設置串行控制臺
    • 附加信息:構建Qt和Qwt庫

    相關鏈接

    • 安裝Xilinx工具

    • 建立U-Boot
    • 構建Linux內核
    • 更新的設備樹規范可以在以下位置找到https://www.devicetree.org/
    • https://elinux.org/Device_Tree_Usage

    總結

    以上是生活随笔為你收集整理的生成设备树Blob的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。