3、MTK SDK与开发环境搭建:安装MediaTek SDK、配置交叉编译工具链、搭建Eclipse/VS Code开发环境
好,咱们直接进入正题。这一章,我带你亲手把开发环境搭起来。
说实话,我见过太多新手卡在这一步。SDK版本不对、工具链路径配错、IDE死活连不上调试器……我自己当年也踩过不少坑。所以这一章,我会把每个细节都掰开揉碎了讲。
3.1 安装MediaTek SDK
先说说SDK。MediaTek的SDK,说白了就是一套完整的软件开发包。里面包含了芯片的驱动库、硬件抽象层(HAL)、协议栈、示例代码,还有一堆工具脚本。
第一步:获取SDK
我个人习惯从MediaTek的官方开发者门户下载。你需要注册一个账号,然后申请权限。注意,不同芯片系列的SDK是分开的。比如MT762x系列和MT85xx系列,SDK结构差异很大。
我曾经遇到过有人拿MT7621的SDK去编译MT8516的项目,结果折腾了两天,全是链接错误。嗯,这里要特别注意。
第二步:解压与目录结构
下载下来通常是一个.tar.gz或.zip文件。我建议放在/home/你的用户名/mediatek/下,不要放在有中文或空格的路径里,否则后面交叉编译工具链会报一些莫名其妙的错。
tar -xzvf MTK_SDK_XXXX.tar.gz -C ~/mediatek/
cd ~/mediatek/MTK_SDK_XXXX/
ls -l
解压后,你会看到类似这样的目录结构:
| 目录名 | 说明 |
|---|---|
| kernel/ | Linux内核源码及补丁 |
| bootloader/ | 引导加载程序(如U-Boot) |
| driver/ | 外设驱动源码(I2C、SPI、UART等) |
| hal/ | 硬件抽象层接口 |
| middleware/ | 中间件(如音频处理、网络协议栈) |
| example/ | 官方示例工程,强烈建议先跑一遍 |
| toolchain/ | 交叉编译工具链(有些SDK会自带) |
第三步:安装依赖库
SDK里的编译脚本依赖一些系统库。你想想看,如果缺了libncurses,配置内核时菜单都出不来。我建议先跑一遍这个:
sudo apt-get update
sudo apt-get install -y build-essential git libncurses-dev \
flex bison libssl-dev libelf-dev u-boot-tools
docs/目录下的Getting_Started.pdf。里面通常会列出所有依赖。别偷懒,这一步能省你后面很多时间。
3.2 配置交叉编译工具链
交叉编译,说白了就是在你的PC(x86架构)上编译出能在ARM或MIPS架构的MTK芯片上运行的程序。工具链就是干这个的。
3.2.1 获取工具链
MediaTek官方SDK里通常会自带工具链,就在toolchain/目录下。如果没有,你可以从Linaro或ARM官网下载。
我个人习惯用gcc-arm-10.3版本,稳定且对多核支持好。举个例子,MT7621是MIPS架构,MT8516是ARM Cortex-A系列,工具链完全不同。
# 以ARM 64位工具链为例
wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz
tar -xvf gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz -C ~/toolchains/
3.2.2 设置环境变量
这一步很关键。你想想看,如果不告诉系统工具链在哪,make命令怎么知道用哪个编译器?
export PATH=$PATH:~/toolchains/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin
export CROSS_COMPILE=aarch64-none-linux-gnu-
export ARCH=arm64
我建议把这些写到~/.bashrc里,这样每次打开终端就不用重新设了。
echo 'export PATH=$PATH:~/toolchains/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin' >> ~/.bashrc
echo 'export CROSS_COMPILE=aarch64-none-linux-gnu-' >> ~/.bashrc
echo 'export ARCH=arm64' >> ~/.bashrc
source ~/.bashrc
3.2.3 验证工具链
配置完一定要验证一下。跑个简单的测试程序,确保能编译通过。
aarch64-none-linux-gnu-gcc --version
# 应该输出类似:gcc (GNU Toolchain for the A-profile Architecture) 10.3-2021.07
# 写一个简单的hello.c
echo '#include <stdio.h>
int main() { printf("Hello MTK Multi-Core!\n"); return 0; }' > hello.c
aarch64-none-linux-gnu-gcc -o hello hello.c
file hello
# 输出应该包含:ELF 64-bit LSB executable, ARM aarch64
3.3 搭建Eclipse/VS Code开发环境
好,工具链配好了,接下来就是IDE。我个人更推荐VS Code,轻量、插件丰富。但如果你习惯Eclipse,也没问题,MTK官方对Eclipse的支持其实更成熟。
3.3.1 VS Code配置
第一步:安装必要插件
- C/C++(Microsoft官方)—— 代码补全、跳转、调试
- Cortex-Debug —— 如果你用ARM芯片,这个插件能直接连JTAG/SWD调试器
- Remote - SSH —— 我习惯在远程服务器上编译,本地用VS Code编辑
- GitLens —— 查看代码历史,方便回溯
第二步:配置编译任务
在项目根目录下创建.vscode/tasks.json,把编译命令写进去。这样按Ctrl+Shift+B就能一键编译。
{
"version": "2.0.0",
"tasks": [
{
"label": "Build MTK Project",
"type": "shell",
"command": "make",
"args": ["-j4"],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": ["$gcc"]
}
]
}
第三步:配置调试器
调试多核程序时,我习惯用launch.json配置GDB。注意要指定交叉编译版本的GDB,不能用PC自带的。
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug MTK Multi-Core",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/output.elf",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "aarch64-none-linux-gnu-gdb",
"setupCommands": [
{
"description": "Enable pretty printing",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
launch.json里设置"stopAtEntry": true。这样程序一启动就停在main函数入口,你可以手动切换到不同核心的线程去设断点。否则程序跑起来,你根本来不及抓。
3.3.2 Eclipse配置
如果你用Eclipse,步骤稍微多一点,但功能更全。
- 安装CDT插件 —— Eclipse的C/C++开发工具包
- 创建交叉编译工程 —— 新建C Project,选择"Cross GCC"
- 配置工具链路径 —— 在Project Properties -> C/C++ Build -> Settings -> Cross Settings 里,填入交叉编译器的前缀和路径
- 配置调试器 —— 使用GDB Hardware Debugging,选择对应的GDB可执行文件
说实话,Eclipse的配置界面有点繁琐。我建议新手先用VS Code,等熟悉了再转Eclipse。不过Eclipse有一个好处:它对多核调试的线程视图支持得更好,能直观看到每个核心的运行状态。
3.4 验证环境:编译第一个多核示例
环境搭好了,咱们跑个官方示例验证一下。SDK的example/目录下通常有一个hello_multicore的工程。
cd ~/mediatek/MTK_SDK_XXXX/example/hello_multicore
make clean
make -j4
如果一切顺利,你会看到类似这样的输出:
CC main.o
CC core0_task.o
CC core1_task.o
CC ipc.o
LD hello_multicore.elf
OBJCOPY hello_multicore.bin
看到hello_multicore.bin生成,说明你的环境已经搭好了。这个bin文件就是最终要烧录到MTK芯片上的固件。
- SDK版本必须与芯片型号严格匹配
- 交叉编译工具链的路径和环境变量必须正确设置
- IDE的调试配置要指定交叉编译版本的GDB
- 每次编译前,先
make clean,避免缓存干扰
嗯,到这里,你的开发环境就彻底搭好了。下一章,咱们开始真正写代码——创建第一个多核任务,让两个核心同时跑起来。到时候你会发现,前面这些环境配置的辛苦,都是值得的。