第三章 开发环境搭建:Ubuntu系统安装、交叉编译工具链配置与Repo工具使用

好,咱们直接进入正题。做MTK平台底层开发,环境搭建是第一道坎。我见过太多新手卡在这一步,折腾几天都搞不定。其实说白了,就是三板斧的事:装系统、配工具链、搞定源码管理。今天我就把这套流程掰开揉碎了讲给你听。

3.1 Ubuntu系统安装——别选错版本

我个人习惯用Ubuntu 20.04 LTS。为什么?因为MTK官方SDK对这个版本支持最好。你想想看,用18.04可能缺某些库,用22.04又可能太新导致兼容性问题。20.04刚刚好,稳得很。

安装时注意几点:

  • 磁盘分区:至少留100GB空间。我刚开始做时只分了60GB,结果编译到一半磁盘满了,那叫一个尴尬。
  • 交换分区:建议16GB以上。编译Bootloader时内存吃紧,交换分区就是你的救命稻草。
  • 网络配置:确保能访问外网。MTK的源码包动不动就几个GB,网速太慢你会崩溃的。

我的小技巧:装完系统第一件事,换国内源。比如清华源、阿里源,下载速度能快10倍。具体操作就是改/etc/apt/sources.list,把archive.ubuntu.com替换成mirrors.tuna.tsinghua.edu.cn。

3.2 交叉编译工具链配置——GCC for ARM

交叉编译,说白了就是在x86电脑上编译出ARM能跑的程序。MTK平台用的是ARM架构,所以我们需要ARM版的GCC。

MTK官方推荐用gcc-arm-none-eabi这个工具链。安装方式很简单:

sudo apt-get update
sudo apt-get install gcc-arm-none-eabi

装完后验证一下:

arm-none-eabi-gcc --version

如果看到版本号,说明装好了。但我得提醒你,有时候apt源里的版本太旧。我在项目中遇到过一个问题:用apt装的4.9版本编译出来的Bootloader死活跑不起来,折腾了两天才发现是工具链版本不对。

避坑指南:我曾经因为工具链版本问题浪费了整整两天。建议直接从ARM官网下载最新版,或者用MTK SDK里自带的工具链。别图省事用apt装,除非你确认版本匹配。

如果你需要手动安装,步骤是这样的:

  1. 从ARM官网下载gcc-arm-none-eabi-xxx-linux.tar.bz2
  2. 解压到/opt目录:sudo tar -xjf gcc-arm-none-eabi-xxx-linux.tar.bz2 -C /opt
  3. 配置环境变量,编辑~/.bashrc,添加:export PATH=$PATH:/opt/gcc-arm-none-eabi-xxx/bin
  4. 执行source ~/.bashrc使配置生效

嗯,这里要注意:环境变量配置完一定要source一下,不然新开的终端还是找不到命令。我刚开始学的时候经常忘记这步,然后一脸懵逼地怀疑人生。

3.3 源码管理工具Repo的使用

MTK的源码仓库用Git管理,但项目太大,有上百个Git仓库。这时候就需要Repo这个工具了。Repo是Google开发的,专门用来管理多Git仓库的项目。

安装Repo很简单:

sudo apt-get install repo

但有时候apt源里的Repo版本太旧。我建议直接从Google官方下载:

mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=$PATH:~/bin

Repo的核心命令就几个,我列个表给你看:

命令 作用 常用参数
repo init 初始化Repo仓库 -u 指定manifest仓库URL,-b 指定分支
repo sync 同步所有子仓库 -c 只同步当前分支,-j4 用4个线程并行下载
repo start 创建新分支 后面跟分支名和项目名
repo upload 提交代码审核 --reviewer 指定审核人

实际工作中,最常用的流程是这样的:

# 第一步:初始化
repo init -u https://github.com/MTK/manifest.git -b mtk8678

# 第二步:同步代码(这一步最耗时)
repo sync -c -j4

# 第三步:创建自己的开发分支
repo start my-branch --all

# 第四步:修改代码后提交
git add .
git commit -m "fix: 修复Bootloader启动时序问题"
repo upload

重点来了:repo sync时加-j参数能大幅提升速度。我一般用-j8,如果你的电脑是8核以上,可以试试-j16。但别贪心,网络带宽有限,开太多线程反而会变慢。

还有一个坑:repo init时指定的manifest仓库地址一定要对。我曾经因为拼写错误,init了一个空仓库,然后sync了半天发现啥也没下载下来。嗯,这种低级错误犯一次就够了。

3.4 环境验证——确保一切就绪

环境搭好后,我建议你做个快速验证:

  1. 检查Ubuntu版本:lsb_release -a,确认是20.04
  2. 检查工具链:arm-none-eabi-gcc --version,确认版本号
  3. 检查Repo:repo --version,确认能正常执行
  4. 尝试编译一个简单的C程序:arm-none-eabi-gcc -o test test.c

如果以上都没问题,恭喜你,开发环境搭建完成。接下来就可以正式开始Bootloader的定制移植了。

我的建议:把环境搭建的步骤写成脚本,下次重装系统时一键执行。我自己的脚本已经迭代了十几个版本,现在装环境只需要5分钟。你也应该养成这个习惯。

好了,第三章的内容就到这里。环境搭建是基础中的基础,但也是很多人容易翻车的地方。记住我说的那几个坑,能帮你省下不少时间。下一章我们开始讲Bootloader的启动流程,那才是真正精彩的部分。