生成设备树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文件
運行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文件(如果尚不可用)
| 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 |
- '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命令。
運行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 |
?
使用HSM生成DTS文件(XSCT不贊成使用CLI流)
從2019.2版工具開始,HSM不再作為獨立實用程序提供,并且已被XSCT中的HSI命令棄用。另請注意,自從2015.1工具版本引入XSCT以來,它就一直支持HSI命令。
運行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及更低版本)
將硬件系統導出到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 |
- '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樹中的綁定
- 可以,可以
- axi_cdma
- axi_dma
- axi_emc
- axi_ethernet,axi_10g_ethernet,xxv_ethernet
- axi_gpio
- axi_iic
- axi_pcie,axi_pcie3,xdma
- axi_perf_mon
- axi_quad_spi
- axi_sysace
- axi_tft
- axi_timebase_wdt
- axi_traffic_gen
- axi_usb2_device
- VCU
- axi_vdma
- xadc_wiz
- axi_intc
- ddr4,ddr3,mig_7series
- pr_decoupler
- usp_rf_data_converter
- axi_timer
- tsn_endpoint_ethernet_mac
- axi_uartlite
- axi_uart16550
- 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 -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-xlnx2.創建一個帶有驅動程序名稱的文件夾,例如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
總結
- 上一篇: 《深入浅出玩转FPGA》笔记
- 下一篇: 港股开户条件