该页面涵盖了使用Xilinx工具生成devicetree源(DTS)文件以及使用标准开源工具构建/编译这些源文件的过程。特别是,将涉及使用Xilinx设备树生成器(DTG)从Xilinx硬件项目生成DTS文件,而将涉及设备树编译器(DTC)将DTS文件编译为设备树二进制文件(DTB)。尽管DTB的主要用途是将其提供给Linux内核,以便可以将Linux正确初始化为特定的硬件,但是DTB也可以与QEMU一起使用,以仿真Linux和独立系统的硬件。
目录
子页面
设备树101
什么是devicetree?
Linux基本上将DT用于平台识别,运行时配置(如bootargs)和设备节点填充。
Devicetree基础
设备树中的每个驱动程序或模块均由该节点定义,并且其所有属性均在该节点下定义。基于驱动程序,它可以具有子节点或父节点。
例如,通过SPI总线连接的设备将以SPI总线控制器作为其父节点,而该设备将成为spi节点的子节点之一。根节点是所有节点的父节点。在根节点下通常包括
1)CPU节点信息
2)内存信息
3)选择的配置数据可以包括内核参数字符串和initrd映像的位置
4)别名
5)定义总线信息的节点
Devicetree语法示例
/ {
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工具,请确保参考所提供的第一个部分之外的适当子部分。
任务 依赖项(先决条件)
-
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树中的绑定
- 可以,可以
- 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可用,就可以调用该工具以生成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驱动程序页面。可以在Linux 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是如
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属性,如下所示调用泛型函数
if {[string match -nocase $proctype "psu_cortexa53" ] } {
update_clk_node $drv_handle "s_axi_aclk"
}
|
7. pl.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发行说明
- 2017.3 Linux and DTG Release Notes - Xilinx Wiki - Confluence
- 2017.4 Linux and DTG Release Notes - Xilinx Wiki - Confluence
- 2018.1 Linux and DTG Release Notes - Xilinx Wiki - Confluence
- 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库