Zynq 开发中的工程文件管理
2026/4/16 5:02:11 网站建设 项目流程

Zynq 开发(Vivado、PetaLinux、Linux、U-Boot、驱动等),基本都会遇到的一个问题:
工程文件越来越多,但真正需要长期保存的东西其实没那么多。如果不把边界划清楚,
Git 仓库很容易变成“源码 + 编译产物 + 工具缓存”的大杂烩,体积越来越大,存的都是垃圾。
而且一旦换机器、或者硬盘坏了,仍然要花费大量时间恢复工程。所以最关键的问题是:

Git 里到底应该放什么,才能保证工程丢了也能快速重新搭起来。

一、工程里的三类文件

在 Zynq 工程里,文件基本可以分三类:


1. 外部来的东西

比如:

  • Linux Kernel
  • U-Boot
  • Yocto / PetaLinux layer
  • 第三方驱动
  • 官方 BSP / IP

特点很简单:

  • 不是你写的
  • 能重新下载
  • 能换版本

所以重点不是“存下来”,而是:

记清楚版本 + 有需要能找回来


2. 自己写的东西(核心)

这一类是最重要的,包括:

  • 应用代码
  • 驱动代码
  • Device Tree(dts)
  • kernel / uboot 配置
  • Vivado HDL(verilog)
  • block design 的 tcl 脚本
  • 各种 build / 脚本工具

3. 工具生成的东西(最占空间)

这些东西丢了没事,重新编一次就有了

比如:

  • Vivado 的 .xpr / .runs / .cache
  • PetaLinux 的 build / tmp / images
  • 编译出来的 Image / dtb / elf / bit
  • node_modules / venv
  • 各种 log / dump

特点:

  • 很大
  • 机器相关
  • 可以重新生成

二、一个容易踩的坑

很多“自己写的文件”,其实已经不纯了,比如:

  • 在 dts 基础上改了一堆
  • Vivado GUI 改完没导 tcl
  • kernel config 改来改去
  • 临时 patch 没整理
  • 生成文件上直接手改

时间久了就变成:

“看起来是源码,其实是半生成 + 半手改 + 半历史遗留”

这种东西最危险,因为:

  • 你以为能复现
  • 实际上复现不了

三、Git 在这里真正该干什么

Git 不是用来备份整个工程的,在 Zynq 这种工程里,Git 不是存结果的,是存“怎么把系统搭起来的”。简单说就是: 不管你换电脑还是硬盘坏了,只要 Git 还在,能重新把系统搭出来。

四、“恢复现场”的意思

这里要说清楚一点,“恢复现场”不是指:

  • 恢复 Vivado 界面
  • 恢复 build 目录
  • 恢复你当时的临时状态

这些做不到,也没必要。

真正的“恢复现场”是:

  • Linux 能重新编出来
  • dtb 能重新生成
  • bitstream 能重新做出来
  • 应用能跑起来
  • 系统行为是对的

五、类似现象

  • Node.js:靠 package.json 重装依赖
  • Python:靠 requirements.txt 重建环境
  • Vivado:靠 TCL / BD 重建工程
  • Linux / U-Boot:靠 defconfig +.config + patch 重建
  • Yocto:靠 layer + recipe 重建整个系统
    共同点是:

不存结果,只存规则


六、工程实践

在 Zynq(Vivado + PetaLinux + Linux + U-Boot)开发中,Git 的核心不是“存文件”,而是“存可重建系统所需的信息”。


模块 / 类型应该纳入 Git不建议纳入 Git本质理解 / 恢复方式
应用源码C / C++ / Python 业务代码编译产物(.o / .elf / 可执行文件)直接重新编译即可
自定义驱动Linux driver 源码.ko 模块文件kernel 重新编译生成
通信协议 / 业务逻辑协议实现代码runtime log / dump可通过源码复现
Device Tree.dts / .dtsi.dtb(二进制)dtc 重新编译生成
Linux Kernelpatch / defconfig / configImage / vmlinux / build目录kernel 源码 + config 重建
U-Bootpatch / defconfigu-boot.bin / build输出源码重新编译
Vivado HDLVerilog / VHDL 源码synth / impl 输出文件重新综合生成
Vivado Block Designbd.tcl.xpr / .runs / .cacheTCL 重建整个工程
Vivado 工程文件.xpr(不能作为唯一来源)必须可用脚本重建
IP 配置TCL / 参数脚本GUI配置工程文件通过脚本恢复
PetaLinux 工程project-spec / configbuild / tmp / imagespetalinux-build 重新生成
Yocto layerrecipe / bb 文件sstate-cachebitbake 重建
构建脚本build.sh / env.sh / Makefile / CMakeLists临时脚本 / 手动命令记录一键化重建流程
工具链环境版本说明 / 安装脚本gcc / vivado 安装目录外部安装 + 版本锁定
Node.js 依赖package.json / package-lock.jsonnode_modulesnpm install 重建
Python 依赖requirements.txtvenv / site-packagespip install 重建
调试相关调试脚本 / 测试用例log / dump / core 文件仅用于分析,不进版本库
临时数据小规模测试输入大规模输出 / 中间结果可删除或本地保留

七、总结

  • 能写脚本的,就不手点 GUI
  • 能生成的东西,就不手改
  • 改动一定要留下规则(patch / tcl)
  • build 目录和源码分开
  • 维护一份恢复现场的md
  • 仓库尽量干净

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询