2. 开发环境总览:Ubuntu系统要求、必备工具链、SDK包结构说明
好,咱们正式开始搭建环境。这一节我带你从全局视角看一下,整个MTK8676的开发环境到底长什么样。说白了,就是搞清楚三件事:用什么系统、装什么工具、SDK里都有啥。
我个人习惯,在开始任何项目之前,先把环境总览搞清楚。不然你装到一半发现磁盘不够,或者编译器版本不对,那才叫一个头大。我在项目中遇到过好几次这种尴尬,所以这次咱们一步到位。
2.1 Ubuntu系统要求
MTK官方推荐的是 Ubuntu 18.04 LTS 64位。嗯,这里要注意,虽然20.04甚至22.04也能用,但我建议你老老实实用18.04。为什么?因为SDK里有些预编译的库和工具链,就是基于18.04的glibc版本打的。你换个新系统,可能会遇到动态库不兼容的问题。
我曾经试过在Ubuntu 20.04上硬跑,结果编译到一半报错,说某个.so文件版本不对。折腾了两天才发现是系统库版本的问题。所以,听我一句劝,别在这个地方省事。
硬件要求方面,我列个表,你对照着看:
| 项目 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 4核 | 8核及以上 |
| 内存 | 8GB | 16GB或更高 |
| 磁盘 | 100GB空闲 | 200GB SSD |
| 交换分区 | 4GB | 8GB |
你想想看,整个SDK解压出来就几十个G,再加上编译产生的中间文件,100GB真的只是勉强够用。我自己的开发机是512GB SSD,用起来才觉得舒坦。
2.2 必备工具链
系统装好了,接下来就是装工具。这部分我按「必须装」和「建议装」两个级别来说。
2.2.1 必须安装的工具
这些是编译SDK的硬性要求,少一个都跑不起来:
- gcc / g++:版本7.5.0(Ubuntu 18.04自带的就是这个版本)
- make:版本4.1以上
- cmake:版本3.10以上
- python:版本2.7和3.6都要装(SDK里有些脚本还是python2的)
- git:版本2.17以上
- repo:Google的版本管理工具,用于拉取SDK源码
- openssh-server:远程调试必备
安装命令很简单,一行搞定:
sudo apt-get update
sudo apt-get install -y build-essential cmake python python3 git repo openssh-server
2.2.2 建议安装的工具
这些是我个人觉得好用的,能提升不少效率:
- vim 或 vscode:看代码用。我习惯用vscode,插件多,特别是C/C++的IntelliSense很香。
- tree:看目录结构用的,一目了然。
- htop:监控CPU和内存,编译的时候看看资源占用。
- minicom 或 putty:串口调试工具,连开发板必备。
- samba:如果你在Windows上写代码,在Ubuntu上编译,用samba共享目录会方便很多。
2.3 SDK包结构说明
好,工具装完了,咱们来看看SDK里到底有什么。MTK8676的SDK,解压后大概长这样:
mtk8676_sdk/
├── bsp/ # 板级支持包,包含芯片驱动、启动代码
├── kernel/ # Linux内核源码,版本4.19
├── uboot/ # 引导加载程序
├── vendor/ # 第三方库和中间件
├── frameworks/ # 应用框架层
├── packages/ # 应用包和示例代码
├── toolchain/ # 交叉编译工具链
├── build/ # 编译脚本和配置文件
├── docs/ # 文档(嗯,虽然不多,但有总比没有好)
├── out/ # 编译输出目录
└── Makefile # 顶层Makefile
我来逐个说一下每个目录是干嘛的,这样你以后找东西心里有数。
bsp/ — 板级支持包
这是最底层的代码。包含芯片的初始化、时钟配置、GPIO、I2C、SPI、UART等外设驱动。如果你要调试硬件,或者修改某个引脚的复用功能,就来这里找。
kernel/ — Linux内核
MTK8676用的是Linux 4.19内核。这个版本比较成熟,而且MTK做了大量针对车规级的优化。比如启动速度、内存管理、电源管理这些。一般情况下你不用动它,但如果你要加新的硬件驱动,就得在这里改。
uboot/ — 引导加载程序
负责从Flash里把内核加载到内存,然后启动。这里主要关注的是分区表和启动参数。我曾经遇到过一个问题,改了分区大小后忘了更新uboot的环境变量,结果系统死活起不来。嗯,这个坑后面我会专门讲。
vendor/ — 第三方库
这里面放的是MTK集成的第三方中间件,比如音频编解码库、图像处理库、蓝牙协议栈等等。你开发应用时,直接调用这些库的API就行。
frameworks/ — 应用框架
这是MTK自己封装的一套应用层框架。说白了,就是帮你把底层的复杂操作封装成简单的接口。比如你要显示一个界面,不用直接操作framebuffer,调用框架的API就行。
packages/ — 示例代码
这个目录我建议你重点看。里面有很多官方提供的示例工程,比如如何点亮屏幕、如何播放音频、如何获取GPS数据。我刚开始做MTK开发时,就是靠啃这些示例代码上手的。
toolchain/ — 交叉编译工具链
这个不用你装,SDK里自带了。MTK用的是arm-linux-gnueabihf-gcc,版本7.5.0。你编译的时候,Makefile会自动调用这个工具链。
2.4 环境验证小测试
装完环境后,我建议你做个快速验证。打开终端,敲下面几行命令:
gcc --version
make --version
python --version
git --version
repo --version
如果每个命令都能正常输出版本号,恭喜你,环境基本就绪了。如果哪个报错,回头检查一下是不是漏装了。
好了,这一节的内容就这么多。你先把环境搭起来,下一节咱们开始拉取SDK源码,然后跑第一个编译。到时候你会发现,前面这些准备工作做得越扎实,后面就越顺。