第一章 裸机开发环境搭建
说实话,做MTK平台裸机开发,第一步就是搭环境。很多人觉得这事简单,不就是装个编译器嘛。但我见过太多新手卡在这一步,一卡就是好几天。我自己刚开始搞的时候也踩过不少坑,今天就把这些经验一次性说清楚。
1.1 交叉编译工具链的选择与安装
先说说什么是交叉编译。你想想看,你的电脑是x86架构,但MTK芯片是ARM架构。在x86上编译出ARM能跑的程序,这就是交叉编译。说白了,就是让电脑帮手机芯片干活。
我个人习惯用GCC ARM Embedded,也就是arm-none-eabi-gcc。这套工具链是ARM官方出的,稳定可靠。我在项目中遇到过用其他工具链编译出来的程序,跑着跑着就莫名其妙死机,换成官方的就好了。
Windows下的安装步骤
- 去ARM官网下载gcc-arm-none-eabi的Windows安装包
- 双击安装,路径建议不要有中文和空格
- 我一般装到
C:\arm_gcc这个目录 - 安装完成后,把
C:\arm_gcc\bin加到系统环境变量PATH里
arm-none-eabi-gcc --version,如果能显示版本号,说明装好了。如果提示找不到命令,八成是环境变量没配好。
Linux下的安装步骤
Linux下就简单多了。我推荐用apt直接装:
sudo apt-get update
sudo apt-get install gcc-arm-none-eabi
嗯,这里要注意。有些老版本的Ubuntu仓库里可能没有这个包。如果遇到这种情况,可以去ARM官网下载Linux版本的tar包,手动解压到 /opt 目录下,然后同样配置环境变量。
我曾经在Ubuntu 16.04上遇到过这个问题,折腾了半天才发现是源的问题。后来换了清华的源,一下就装上了。
1.2 驱动安装——让电脑认识你的开发板
工具链装好了,接下来要让电脑能跟开发板通信。MTK开发板通常通过USB接口连接电脑,但Windows不会自动识别,需要装驱动。
常用的驱动有两种:
| 驱动类型 | 适用场景 | 备注 |
|---|---|---|
| VCP驱动 | 串口通信 | 最常用,下载调试都靠它 |
| DFU驱动 | 固件升级 | 某些MTK芯片专用 |
我个人建议先装VCP驱动。大部分MTK开发板用的都是FTDI或者CH340芯片。你可以看看板子上USB转串口芯片的型号,然后去官网下对应的驱动。
1.3 调试工具——SecureCRT与Putty
驱动装好了,开发板插上电脑,设备管理器里能看到一个新的COM口。这时候就需要一个串口工具来跟板子对话了。
常用的有两个:
- SecureCRT:功能强大,支持标签页,我平时主力用这个
- Putty:轻量级,免费开源,应急用很方便
Putty的配置
Putty配置很简单,打开后:
- Session页面,Connection type选Serial
- Serial line填你的COM口号(比如COM3)
- Speed填115200(MTK默认波特率)
- 点击Open,就能看到板子的输出信息了
SecureCRT的配置
SecureCRT稍微复杂一点,但用习惯了真的很顺手:
- File → Quick Connect
- Protocol选Serial
- Port选对应的COM口
- Baud rate填115200
- Data bits 8, Parity None, Stop bits 1
- Flow Control全部取消勾选
关键点:Flow Control一定要关掉!我曾经在这个问题上栽过跟头。开着RTS/CTS,板子死活不输出信息,我还以为是硬件坏了,折腾了两天才发现是软件设置的问题。
1.4 验证环境——跑个Hello World
环境都搭好了,我们来验证一下。写个最简单的程序:
// main.c
void main(void) {
volatile int i;
while(1) {
// 空循环,让板子别跑飞
for(i = 0; i < 100000; i++);
}
}
编译命令:
arm-none-eabi-gcc -c main.c -o main.o
arm-none-eabi-ld -Ttext 0x0 main.o -o main.elf
arm-none-eabi-objcopy -O binary main.elf main.bin
把生成的main.bin下载到开发板,打开串口工具,如果板子正常跑起来了,恭喜你,环境搭建成功!
说实话,第一次看到板子上的LED按照你的程序闪烁时,那种成就感真的很棒。我记得我第一次点亮LED时,盯着那个小灯看了好几分钟,心里美滋滋的。
1.5 常见问题与避坑指南
最后,分享几个我踩过的坑:
- 驱动装不上:试试禁用Windows的数字签名强制,很多国产USB芯片的驱动没签名
- 串口没输出:检查波特率是不是115200,Flow Control关了没
- 编译报错:看看环境变量配对了没,有时候装了多个版本的GCC会冲突
- 下载失败:检查开发板供电,有些板子USB供电不足会导致下载不稳定
我曾经有一次,板子怎么都连不上,换了三根USB线都不行。最后发现是电脑的USB口供电不足,换到机箱后面的USB口就好了。这种小问题最折腾人,所以建议大家一开始就用质量好的USB线,插在电脑原生USB口上。
好了,环境搭建就讲到这里。下一章我们开始真正写代码,让板子动起来。