3、开发环境搭建:Ubuntu 22.04 LTS系统安装、交叉编译工具链配置、ADB与Fastboot工具、源码下载与repo同步
好,咱们正式开始动手了。这一章我带你把开发环境搭起来。说实话,环境搭建这事儿,看着琐碎,但真要是哪个环节出了岔子,后面编译跑不起来,你排查半天可能才发现是工具链版本不对。我在项目里吃过这个亏,所以这次咱们一步步来,稳一点。
3.1 Ubuntu 22.04 LTS 系统安装
MTK8678 的官方推荐开发环境是 Ubuntu 22.04 LTS。为什么是 22.04?说白了,这套源码和工具链对 glibc、Python、GCC 的版本有硬性要求,22.04 刚好卡在兼容性最好的那个点上。我个人习惯用桌面版,调试时方便开浏览器查资料,但如果你服务器上跑,Server 版也完全没问题。
安装时注意几点:
- 磁盘分区:建议给根目录至少 200GB。源码拉下来加上编译产物,轻松破百 G。我见过有人只分了 80G,编译到一半磁盘满了,那叫一个尴尬。
- 交换分区:内存如果小于 16GB,建议开 8GB 以上的 swap。编译时内存吃紧,swap 能救急。
- 网络配置:确保能稳定访问 Google 的源码仓库。你懂的,有些网络环境需要代理,提前配好。
3.2 交叉编译工具链配置
MTK8678 的芯片是 ARM64 架构,咱们的 PC 是 x86_64,所以得用交叉编译工具链。说白了,就是在 x86 的机器上编译出能在 ARM 上跑的程序。
MTK 官方提供的工具链通常集成在源码的 prebuilts/gcc/ 目录下。但如果你需要单独配置,我推荐用 Linaro 的 GCC 工具链,稳定可靠。
配置步骤:
- 下载工具链:
wget https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz - 解压到
/opt/toolchains/目录:sudo tar -xvf gcc-linaro-*.tar.xz -C /opt/toolchains/ - 添加环境变量:编辑
~/.bashrc,加入以下内容:
export PATH=/opt/toolchains/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin:$PATH
export CROSS_COMPILE=aarch64-linux-gnu-
export ARCH=arm64
然后 source ~/.bashrc 使其生效。验证一下:aarch64-linux-gnu-gcc --version,能看到版本信息就对了。
3.3 ADB 与 Fastboot 工具
ADB 和 Fastboot 是 Android 开发和调试的左右手。ADB 用来在设备跑起来后调试,Fastboot 用来刷机、解锁 bootloader。
安装方式很简单:
sudo apt update
sudo apt install android-tools-adb android-tools-fastboot
但这里有个坑——Ubuntu 源里的版本通常比较老。MTK8678 的 Android 版本较高,老版 ADB 可能无法识别设备。我建议用 Google 官方的最新版:
# 下载 platform-tools
wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip
unzip platform-tools-latest-linux.zip
sudo cp platform-tools/adb /usr/local/bin/
sudo cp platform-tools/fastboot /usr/local/bin/
验证一下:adb --version,看到版本号大于 30 就稳了。
lsusb 找到 MTK 设备的 VID,然后创建 /etc/udev/rules.d/51-android.rules,写入 SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", MODE="0666",再 sudo udevadm control --reload-rules 就好了。
3.4 源码下载与 repo 同步
MTK8678 的源码通常通过 repo 工具管理。repo 是 Google 基于 Git 做的多仓库管理工具,说白了就是帮你一次性拉几百个 Git 仓库。
先安装 repo:
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=$PATH:~/bin
然后初始化源码目录:
mkdir mtk8678_workspace
cd mtk8678_workspace
repo init -u <MTK提供的manifest仓库URL> -b <分支名> --depth=1
这里 --depth=1 是我强烈建议加的。不加的话,repo 会把每个仓库的完整 Git 历史都拉下来,光 .git 目录就能占几十 G。我们做开发,一般只需要最新代码,历史记录可以后面按需补。
同步代码:
repo sync -j4 -c --no-tags
-j4 表示 4 个并行任务,根据你的 CPU 核心数调整。我一般用 -j$(nproc) 自动检测核心数。--no-tags 可以跳过标签下载,省时间。
repo sync 会断点续传。但如果你发现某个仓库一直卡住,可以手动进那个目录 git fetch 试试。我遇到过因为代理问题导致某个仓库死活拉不下来,最后换了 DNS 才解决。
同步完成后,检查一下:repo status,应该能看到所有仓库都在正确的分支上。
总结一下:环境搭建的核心就四点——系统装对、工具链配准、ADB/Fastboot 用新版、repo 同步加 depth 参数。这些搞定了,后面编译和调试才能顺风顺水。下一章咱们开始编译 Bootloader 和内核,到时候你就知道环境搭得牢有多重要了。