2、源码获取与分支选择:从官方仓库拉取代码、如何选择正确的分支、LTS版本与开发版本的区别

好,咱们正式开始动手。这一章要解决一个很实际的问题——代码从哪来,分支怎么选。

我见过不少新手,上来就 git clone 一把梭,结果编译到一半发现 API 对不上,或者某个关键驱动根本不存在。嗯,这种坑我踩过不止一次。所以这一章,咱们把源码获取和分支选择这件事彻底讲清楚。

2.1 官方仓库在哪里?

ATF 的官方代码托管在 Trusted Firmware Project 的 GitHub 仓库里:

https://github.com/TrustedFirmware-A/trusted-firmware-a

我个人习惯直接 clone 这个仓库。但注意,不要用默认的 master 分支直接开干。为什么?往下看。

2.2 分支命名规则

ATF 的分支命名其实挺有规律的。我总结了一下:

分支类型 命名示例 说明
LTS 分支 lts-v2.8 长期支持版本,稳定,适合产品
开发分支 master 最新代码,可能有 API 变动
发布标签 v2.9.0 正式发布版本,带 release notes
集成分支 integration 开发中的特性合并,不稳定

你想想看,如果你做产品,选 master 分支,那风险有多大?我曾在项目中遇到过,master 分支上某个驱动接口突然改了,导致整个 BSP 层都要重调。那叫一个酸爽。

2.3 LTS 版本 vs 开发版本

这里我重点说一下 LTS 和开发版本的区别。说白了,就是「稳」和「新」的取舍。

LTS 版本(长期支持)

  • 官方承诺至少 2 年的安全更新和 bug 修复
  • API 稳定,不会出现突然的接口变更
  • 适合量产产品、车规、工业控制等场景
  • 我个人的建议:只要不是做原型验证,一律选 LTS

开发版本(master / integration)

  • 包含最新特性,比如新架构支持、新安全扩展
  • API 可能随时变化,没有向后兼容保证
  • 适合评估新功能、学术研究、早期原型
  • 注意:不要直接用于产品

我曾经在一个车规项目里,团队图省事直接用了 master 分支。结果三个月后,ATF 升级了 SMC 调用约定,整个安全监控层的代码全部要重写。嗯,从那以后,我再也不敢在产品里用非 LTS 分支了。

2.4 如何选择正确的分支?

我一般按这个流程来选:

  1. 先确定你的平台——比如你是 ARMv8.2 还是 ARMv9?
  2. 查看官方支持的平台列表——在 docs/plat/ 目录下
  3. 选择最近的 LTS 分支——比如 lts-v2.8 或 lts-v2.10
  4. 检查该 LTS 是否支持你的 SoC——如果不支持,再考虑最新的 release tag
  5. 实在不行才用 master——但要做好随时 rebase 的准备

小技巧: 你可以用 git tag 查看所有发布版本:

git tag -l 'v*' | sort -V

然后挑最新的稳定版本。我个人习惯看 release notes,确认有没有针对我用的 SoC 的修复。

2.5 实际操作:拉取代码并切换分支

好,咱们动手。假设你要用 LTS v2.8 分支:

git clone https://github.com/TrustedFirmware-A/trusted-firmware-a.git
cd trusted-firmware-a
git checkout lts-v2.8

就这么简单。但注意,LTS 分支可能不包含最新的安全补丁。所以拉下来之后,我建议你:

git log --oneline -10

看看最近的提交时间。如果超过 3 个月没有更新,可以考虑切换到更新的 LTS 分支。

警告: 不要直接修改 LTS 分支的代码然后用于产品。如果你需要定制,请基于 LTS 创建自己的特性分支:

git checkout -b my-product-v2.8 lts-v2.8

这样后续官方更新 LTS 时,你可以方便地合并安全补丁。

2.6 分支选择决策流程图

下面这张图是我自己总结的,每次做新项目都会拿出来看一眼:

开始选择分支 是量产产品还是原型验证? 量产 原型 选择 LTS 分支 选择 master 或 release tag LTS 是否支持你的 SoC? 是 否 直接使用该 LTS 检查更新的 LTS 或 release tag 选择最接近的版本 创建自己的特性分支 建议:量产产品始终走左侧 LTS 路径

2.7 避坑指南

最后,分享几个我踩过的坑:

  • 不要直接 clone 后就用 master——我见过有人编译通过但运行时 panic,查了两天发现是 master 分支的代码和板子的 DTS 不匹配。
  • LTS 分支也可能有 bug——虽然概率低,但建议拉下来后先跑一遍官方测试用例。
  • 注意交叉编译工具链的版本——LTS 分支通常对工具链版本有要求,别用太新或太旧的 gcc。
  • 如果你用的是树莓派或 QEMU——这些平台在 master 分支上支持最好,LTS 可能缺少某些驱动。

我的个人习惯: 每次开始一个新项目,我都会先创建一个 docs/ 目录,里面放一个 BRANCH_CHOICE.md 文件,记录我为什么选这个分支、选了哪个版本、以及后续如何更新。这样半年后回头看,不会一脸懵。

好,这一章就到这里。源码拉下来了,分支也选好了,下一章咱们聊聊如何配置编译环境——嗯,这部分也有不少坑等着你。

可可精品资料库