2. 获取内核源码:从MTK官方Git仓库克隆内核源码
好,咱们正式开始动手了。这一章我带你走一遍获取内核源码的完整流程。别小看这一步,我在项目里见过太多人因为源码版本搞错,白白浪费好几天。
2.1 找到正确的仓库地址
MTK官方Git仓库的地址,说实话不是固定的。不同项目、不同客户,仓库地址都不一样。我个人习惯先确认两个东西:
- 你拿到的BSP包版本号
- MTK分配的项目代号
一般MTK会给你一个类似这样的地址:
git clone ssh://git@git01.mediatek.com:29418/kernel/linux-4.19.git
嗯,这里要注意:MTK的内核仓库通常走SSH协议,需要提前配置好SSH密钥。我曾经有个同事,折腾了半天clone不下来,最后发现是密钥没配好。
2.2 查看分支与标签
仓库clone下来后,第一件事就是看分支。你想想看,MTK同时维护几十个芯片平台,每个平台又有多个内核版本,分支结构相当复杂。
我常用的命令:
# 查看所有远程分支
git branch -r
# 查看所有标签
git tag -l
# 查看某个标签的详细信息
git show v4.19.140-mt8678
分支命名规则,MTK一般这么搞:
| 分支名示例 | 含义 |
|---|---|
| android-4.19-stable | Android通用稳定分支 |
| mtk-4.19-mt8678 | MT8678平台专用分支 |
| vendor/mediatek/4.19 | MTK vendor定制分支 |
我个人建议:优先选择带平台代号的分支,比如 mtk-4.19-mt8678。为什么?因为这种分支已经包含了MTK对该平台的所有适配补丁,省得你后面自己打补丁。
git branch -a | grep mt8678 快速过滤出跟你的平台相关的分支。
2.3 理解内核版本号规则
内核版本号这东西,看着简单,其实门道不少。MTK的版本号格式通常是:
4.19.140-mt8678-20231201-1630
拆开来看:
- 4.19 - 主线版本,LTS长期支持版
- .140 - 补丁级别,数字越大补丁越多
- mt8678 - 平台代号
- 20231201 - 构建日期
- 1630 - 构建序号
我记得有一次,项目组拿到的BSP包里的内核版本是 4.19.140-mt8678-20231115,但Git仓库里最新的标签是 4.19.142-mt8678-20231201。有人直接用了最新的,结果跟BSP包里的驱动不兼容,折腾了两天。
2.4 验证源码完整性
源码拿到手了,怎么确认它没被篡改或者传输没出错?MTK一般会提供两种校验方式:
2.4.1 校验SHA256哈希
MTK会在发布邮件里附上源码包的SHA256值。你本地算一下:
# 对源码包计算SHA256
sha256sum linux-4.19.140-mt8678.tar.gz
# 或者对Git仓库计算
git rev-parse HEAD
然后跟邮件里的值比对。完全一致就说明没问题。
2.4.2 验证GPG签名
更严格的做法是验证GPG签名。MTK的每个发布标签都有对应的签名:
# 导入MTK官方公钥
gpg --import mediatek-public-key.asc
# 验证标签签名
git tag -v v4.19.140-mt8678
如果输出里有 gpg: Good signature,那就稳了。
2.5 实际操作的完整流程
好了,我把整个流程串起来,你照着做就行:
# 1. 克隆仓库
git clone ssh://git@git01.mediatek.com:29418/kernel/linux-4.19.git
cd linux-4.19
# 2. 查看可用分支
git branch -r | grep mt8678
# 3. 切换到目标分支
git checkout -b my-mt8678 origin/mtk-4.19-mt8678
# 4. 查看标签
git tag -l | grep mt8678
# 5. 切换到指定标签
git checkout v4.19.140-mt8678-20231201-1630
# 6. 验证完整性
git log --oneline -1
# 确认commit ID跟MTK发布的一致
my-mt8678,这样不会污染远程分支,也方便自己管理修改。
2.6 常见问题与解决
说几个我实际遇到过的问题:
- clone速度慢 - MTK的海外仓库有时候很慢,可以找找有没有国内镜像
- 权限拒绝 - 检查SSH密钥是否添加到GitLab/ Gerrit
- 分支不存在 - 可能是项目代号搞错了,跟MTK的FAE确认一下
- 标签对不上 - 确认BSP包版本号,有时候MTK会更新标签
嗯,这一章就到这儿。源码拿到手,咱们下一章就开始配置编译环境了。记住:版本号一定要跟BSP包一致,这是血的教训换来的经验。