2、开发环境搭建:SDK下载与编译、ADB与Fastboot工具链、串口调试配置
好,咱们直接进入正题。做嵌入式视觉开发,环境搭建是第一道坎。很多人一上来就卡在SDK编译不过、ADB连不上设备、串口乱码这些破事儿上。我当年刚接触MTK平台时,光搭环境就折腾了两天。今天我把这些坑都给你指出来,你照着做,半天内肯定能跑起来。
2.1 SDK下载与编译
MTK8678的SDK,说白了就是一套完整的Linux源码加Android框架,再加上MTK自己的硬件抽象层。你拿到手的压缩包大概有20GB左右,解压后接近40GB。嗯,硬盘空间要留够。
下载SDK后,第一步是安装依赖库。MTK官方文档里列了一长串,但实际常用的就这几个:
sudo apt-get update
sudo apt-get install git-core gnupg flex bison build-essential \
zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev \
lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip
这里有个坑——Python版本。MTK8678的SDK要求Python 3.8以上,但Ubuntu 18.04默认是3.6。我曾经在这上面浪费了半天,编译到一半报错说找不到某个模块。解决办法很简单:
sudo apt-get install python3.8 python3.8-dev
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
接下来是编译。进入SDK根目录,执行:
source build/envsetup.sh
lunch
lunch命令会列出所有可选的编译目标。你选aosp_xxx-userdebug那个,一般对应你手上的开发板型号。选好后:
make -j$(nproc)
第一次编译大概需要2-3小时,取决于你的机器配置。我建议用-j$(nproc),让CPU跑满。如果内存小于16GB,改成-j4,否则容易OOM。
htop,观察CPU和内存使用情况。如果swap占用过高,说明内存不够,赶紧停掉重来。
2.2 ADB与Fastboot工具链
ADB和Fastboot是Android开发的左膀右臂。MTK平台也不例外。这两个工具在SDK的out/host/linux-x86/bin/目录下已经编译好了,但你最好装系统级的版本:
sudo apt-get install adb fastboot
装完后验证一下:
adb version
fastboot --version
如果版本号低于1.0.41,建议从Google官方下载最新版。为什么?因为老版本的ADB在MTK平台上偶尔会断连,尤其是传输大文件时。我遇到过好几次,刷机刷到一半ADB掉了,板子变砖,只能重新烧录。
连接开发板时,注意这几点:
- 用USB 3.0口,不要用USB 2.0。MTK8678的USB控制器对3.0支持更好。
- 数据线要质量好的。我曾经用一根劣质线,ADB logcat一直丢数据,换了根线就好了。
- 如果
adb devices显示unauthorized,检查板子屏幕上的授权弹窗,点允许就行。
Fastboot主要用于刷机。进入fastboot模式的方法:按住板子上的某个按键(具体看你的开发板手册)同时上电,或者用命令:
adb reboot bootloader
进入后执行:
fastboot devices
能看到设备ID就说明连上了。刷机命令我常用的是:
fastboot flash boot boot.img
fastboot flash system system.img
fastboot reboot
2.3 串口调试配置
串口是嵌入式开发的最后一道防线。当ADB连不上、网络不通时,串口就是你唯一的救命稻草。MTK8678开发板上一般会引出UART0作为调试串口,通常是3.3V电平,用USB转串口模块连接。
接线方式:
| 开发板引脚 | USB转串口模块 |
|---|---|
| TX | RX |
| RX | TX |
| GND | GND |
注意:TX接RX,RX接TX。这个交叉连接我刚开始时搞反过,折腾了半小时才发现。嗯,谁还没犯过这种低级错误呢。
Linux下用screen或minicom连接。我个人习惯用screen,简单直接:
sudo apt-get install screen
sudo screen /dev/ttyUSB0 115200
波特率是115200,8N1格式。如果显示乱码,检查波特率设置,或者看看USB转串口模块的驱动装没装。CH340和CP2102是常见的芯片,一般系统自带驱动。如果不行,手动装一下:
sudo apt-get install ch340-dkms
串口输出能看到什么?板子上电后,你会看到uboot启动日志,然后是kernel的启动信息,最后进入Android系统。如果卡在某个地方,比如waiting for root device,说明内核没找到文件系统,可能是分区表问题。
screen -L启动,日志会写入screenlog.0文件。我每次调试新板子都会开这个,方便回头翻看。
最后,提一下串口权限问题。Linux下默认只有root用户能访问串口设备。你可以把当前用户加到dialout组:
sudo usermod -a -G dialout $USER
然后注销重新登录,就不用每次加sudo了。
总结一下今天的内容:
- SDK下载后先装依赖,注意Python版本
- 编译用make -j$(nproc),内存不够就减线程数
- ADB和Fastboot装系统版,数据线要用好的
- 串口接线TX-RX交叉,波特率115200
环境搭好了,下一章咱们开始写第一个摄像头驱动。到时候你会发现,今天这些准备工作有多重要。