第二章 开发环境搭建:SDK获取与解压、交叉编译工具链安装、ADB与串口调试环境配置
好,咱们直接进入正题。开发环境搭建这事儿,说难不难,说简单吧,我第一次搞MTK平台时也踩过不少坑。今天我把这些经验掰开揉碎了讲给你听,保证你少走弯路。
2.1 SDK获取与解压
先说说SDK。MTK8676的SDK,一般是通过官方渠道获取的。你拿到的是一个压缩包,名字大概长这样:MTK8676_Android_12_SDK_V1.0.tar.gz。
我个人习惯,把SDK放在/home/你的用户名/workspace/目录下。别放桌面,也别放中文路径,否则后面编译时各种奇葩报错,你哭都来不及。
解压命令很简单:
tar -xzvf MTK8676_Android_12_SDK_V1.0.tar.gz -C /home/你的用户名/workspace/
解压完你会看到一个庞大的目录结构。别慌,核心目录就这几个:
| 目录名 | 作用 |
|---|---|
| kernel/ | Linux内核源码,定位驱动在这里改 |
| hardware/ | 硬件抽象层,GNSS HAL就在这 |
| vendor/ | 厂商定制部分,导航引擎集成的主战场 |
| prebuilts/ | 预编译工具链,后面会用到 |
2.2 交叉编译工具链安装
交叉编译工具链,说白了就是让你的电脑能编译出给ARM芯片跑的代码。MTK8676用的是ARM Cortex-A系列内核,所以我们需要aarch64的交叉编译器。
SDK里其实已经自带了预编译好的工具链,在prebuilts/gcc/linux-x86/aarch64/目录下。但我建议你手动装一个官方版本,更稳定。
安装步骤:
- 下载Linaro GCC工具链(推荐7.5版本以上)
- 解压到
/opt/toolchains/目录 - 配置环境变量
具体命令:
# 解压
sudo tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.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
如果看到版本信息,恭喜你,工具链搞定了。
setenv.sh脚本,把环境变量都写进去。每次打开新终端,直接source setenv.sh就行,省得每次都要手动敲。
2.3 ADB调试环境配置
ADB是Android调试桥,咱们做座舱开发离不开它。MTK8676的ADB调试,和普通Android手机有点不一样——它默认是关闭的,需要手动打开。
配置步骤:
- 安装ADB工具:
sudo apt install adb - 添加USB设备规则
- 重启ADB服务
USB规则配置:
# 创建规则文件
sudo vim /etc/udev/rules.d/51-android.rules
# 添加以下内容(MTK的VID是0E8D)
SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", MODE="0666", GROUP="plugdev"
# 重启udev
sudo service udev restart
连接开发板后,用adb devices检查。如果看到设备号,说明连接成功。
2.4 串口调试环境配置
串口调试是座舱开发的保底手段。当ADB连不上、网络不通时,串口就是你最后的救命稻草。
MTK8676开发板通常提供UART0作为调试串口,波特率一般是115200。你需要准备:
- USB转串口模块(推荐FT232或CP2102)
- 串口调试工具(minicom或putty)
Linux下用minicom配置:
# 安装minicom
sudo apt install minicom
# 配置串口参数
sudo minicom -s
# 进入配置菜单后设置:
# 串口设备:/dev/ttyUSB0(根据实际情况调整)
# 波特率:115200
# 数据位:8
# 停止位:1
# 校验:无
# 硬件流控:关闭
保存配置后退出,重新打开minicom。如果开发板已经上电,你应该能看到内核启动日志刷刷地往外蹦。
2.5 环境验证
所有环境搭好后,咱们做个快速验证。写个简单的Hello World,交叉编译后扔到开发板上跑:
// hello_gnss.c
#include <stdio.h>
int main() {
printf("Hello from MTK8676 GNSS!\n");
return 0;
}
编译:
aarch64-linux-gnu-gcc -o hello_gnss hello_gnss.c
通过ADB推到开发板:
adb push hello_gnss /data/local/tmp/
adb shell chmod +x /data/local/tmp/hello_gnss
adb shell /data/local/tmp/hello_gnss
如果看到输出,说明你的整个开发环境已经打通了。嗯,到这一步,你可以给自己泡杯咖啡,庆祝一下。
下一章,咱们开始真正接触GNSS HAL层的代码。那才是重头戏。