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文件版本不对。折腾了两天才发现是系统库版本的问题。所以,听我一句劝,别在这个地方省事。

⚠️ 避坑指南: 不要用Ubuntu 22.04或更新的版本。MTK的编译工具链对glibc版本很敏感。如果你实在想用新系统,记得用Docker或者虚拟机跑18.04。

硬件要求方面,我列个表,你对照着看:

项目 最低要求 推荐配置
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 建议安装的工具

这些是我个人觉得好用的,能提升不少效率:

  • vimvscode:看代码用。我习惯用vscode,插件多,特别是C/C++的IntelliSense很香。
  • tree:看目录结构用的,一目了然。
  • htop:监控CPU和内存,编译的时候看看资源占用。
  • minicomputty:串口调试工具,连开发板必备。
  • samba:如果你在Windows上写代码,在Ubuntu上编译,用samba共享目录会方便很多。
💡 小技巧: 装完工具后,建议把 ~/bin 目录加到PATH里。我习惯把一些自己写的脚本放进去,比如一键编译、一键烧录之类的,省得每次敲长串命令。

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会自动调用这个工具链。

📌 重点: 交叉编译工具链的路径不要乱改。SDK里的Makefile写死了路径,你一动,整个编译就崩了。如果你非要改,记得同步修改build/目录下的配置文件。

2.4 环境验证小测试

装完环境后,我建议你做个快速验证。打开终端,敲下面几行命令:

gcc --version
make --version
python --version
git --version
repo --version

如果每个命令都能正常输出版本号,恭喜你,环境基本就绪了。如果哪个报错,回头检查一下是不是漏装了。

好了,这一节的内容就这么多。你先把环境搭起来,下一节咱们开始拉取SDK源码,然后跑第一个编译。到时候你会发现,前面这些准备工作做得越扎实,后面就越顺。