对于嵌入式Linux开发者而言,设备树的正确配置往往是系统能否正常启动的关键。当使用复旦微FMQL这类高度集成的SoC芯片时,开发流程涉及多个专业工具的协同工作,这对刚接触该平台的工程师来说颇具挑战性。本文将完整呈现从硬件描述到设备树生成的端到端解决方案,特别针对Vivado 2018.2、Procise和IAR工具链的深度整合提供实操指南。
工欲善其事,必先利其器。在开始FMQL开发前,需要确保工具链的完整性和版本匹配性。Vivado 2018.2作为基础设计工具,需要与特定版本的Procise和IAR配合使用。以下是关键组件清单:
| 工具名称 | 推荐版本 | 主要功能 |
|---|---|---|
| Vivado | 2018.2 | 硬件设计及HDF文件生成 |
| Procise | 配套版本 | 工程管理与工具链桥接 |
| IAR Embedded | 指定版本 | FSBL编译与设备树源码生成 |
环境配置要点:
典型的工程初始化流程如下:
注意:工程路径中若包含空格或横线("-")可能导致后续Procise导入失败,这是工具链协同工作时常见的兼容性问题。
Vivado中的硬件设计是后续所有工作的基础,特别是PS(Processing System)的配置直接影响设备树的生成质量。在添加Zynq PS IP核后,有几个关键配置界面需要特别关注:
DDR控制器配置:
tcl复制# 示例:通过TCL命令快速验证DDR配置
report_property [get_bd_cells processing_system7_0]
PL(Programmable Logic)部分的IP核添加需要特别注意AXI接口的时钟域一致性。每个添加的IP核都应:
完成Block Design后,必须执行以下验证步骤:
Vivado工程完成后,需要导出四个核心文件供后续流程使用:
在Procise中新建工程时,芯片型号的选择必须与Vivado工程完全一致。工具链集成配置的关键在于:
bash复制# Procise中配置IAR路径的典型结构
Tools -> Integrated Tools Options -> IAR -> /opt/iar/arm/bin
通过"From Vivado"导入时,需特别注意:
常见问题:若IAR未能自动启动,请检查Procise工程路径是否包含特殊字符,以及IAR安装是否完整。
IAR在此流程中主要承担两个关键任务:
FSBL编译检查要点:
设备树源码位于DeviceTree目录,包含以下重要文件:
设备树修改黄金法则:
dts复制// 示例:在system-user.dtsi中添加EMMC节点
&sdhci0 {
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "boot";
reg = <0x0 0x100000>;
};
};
将DeviceTree目录和.hdf文件复制到Linux编译环境后,执行以下典型编译命令:
bash复制# 带PL部分的编译命令
./build.sh --hw /path/to/DeviceTree/ --hdf design_1_wrapper.hdf dtb
# 纯PS系统的编译命令
./build.sh --hw /path/to/DeviceTree/ --nofpga dtb
编译成功后,在Image目录会生成system-top.dtb文件。验证修改是否生效的最佳方式是反编译dtb文件:
bash复制dtc -I dtb -O dts system-top.dtb > decompiled.dts
常见编译错误处理:
生成可启动镜像需要三个核心文件:
在Procise中使用"Create Boot Image"工具时,文件添加顺序必须严格遵循:
最终生成的BOOT.bin文件与设备树文件devicetree.dtb(重命名自system-top.dtb)构成启动必备文件对。将它们与根文件系统一起放入启动介质(通常是SD卡或QSPI Flash)即可完成系统部署。
在实际项目中,我们曾遇到因PL时钟配置不匹配导致设备树解析失败的情况。通过对比反编译后的dts文件与Vivado时钟配置,最终发现是procise导入时时钟参数传递不完整。这类问题的解决往往需要同时检查硬件设计和设备树生成的每个环节。