第二章 开发环境搭建:SDK安装、交叉编译工具链配置、ADB调试与日志系统

说实话,很多做嵌入式开发的朋友,一开始就被环境搭建给劝退了。我见过太多人,拿到一块联发科的开发板,光装SDK就折腾了一周。嗯,今天咱们就把这事彻底捋清楚。

2.1 SDK安装——别急着双击安装包

联发科的SDK,说白了就是一套完整的软件开发包。里面包含了芯片的驱动库、硬件抽象层、还有各种示例代码。我个人习惯,拿到SDK后第一件事不是安装,而是先看README文件。

注意:联发科SDK对操作系统有严格要求。我建议用Ubuntu 18.04或20.04 LTS版本。Windows?嗯,不是不行,但坑太多。

安装步骤其实很简单:

  1. 解压SDK压缩包到工作目录
  2. 运行./setup.sh脚本
  3. 根据提示安装依赖库

这里有个坑。我曾经在项目里遇到过,setup.sh执行到一半报错,说缺少libncurses5。你想想看,一个库没装,整个环境就废了。所以我的建议是:

我的经验:在执行setup.sh之前,先把这些依赖装好:
sudo apt-get install libncurses5 libncurses5-dev lib32z1 lib32stdc++6

2.2 交叉编译工具链配置——这是核心

交叉编译,说白了就是在你的电脑上编译出能在开发板上运行的程序。联发科平台用的是aarch64-linux-android-arm-linux-gnueabihf-系列工具链。

配置工具链,我习惯分三步走:

  • 第一步:把工具链路径加到PATH环境变量里
  • 第二步:验证工具链是否可用
  • 第三步:写个测试程序跑一下

具体操作是这样的:

# 编辑 ~/.bashrc 文件
export PATH=$PATH:/opt/mediatek/toolchain/bin

# 验证
aarch64-linux-android-gcc --version

# 写个hello world
#include <stdio.h>
int main() {
    printf("Hello, MTK!\n");
    return 0;
}

# 编译
aarch64-linux-android-gcc -o hello hello.c

# 查看文件信息
file hello
# 输出应该是:ELF 64-bit LSB executable, ARM aarch64

为什么会强调file命令?因为我曾经吃过亏。有一次编译出来的程序,怎么都跑不起来,折腾了半天才发现——工具链配错了,编译出来的是x86的程序。你想想看,ARM开发板怎么可能跑x86的程序?

关键点:交叉编译工具链的版本必须和SDK版本匹配。联发科每个芯片平台都有对应的工具链版本,别混用。

2.3 ADB调试——你的远程控制台

ADB(Android Debug Bridge)是联发科平台最常用的调试工具。它就像一根无形的线,把你的电脑和开发板连在一起。

配置ADB其实很简单:

  1. 安装ADB:sudo apt-get install adb
  2. 用USB线连接开发板
  3. 运行adb devices查看设备

如果adb devices显示设备未授权,别慌。我遇到过这种情况,原因是开发板的USB调试模式没打开。解决方法:

  • 在开发板上进入设置 -> 开发者选项 -> 开启USB调试
  • 如果还不行,试试adb kill-server然后adb start-server
小技巧:我习惯用adb shell直接进入开发板的Linux终端。这样调试起来特别方便,就像在本地操作一样。

2.4 日志系统——调试的第三只眼

联发科平台的日志系统,核心就是logcat。它会把系统里所有的日志都打印出来。但说实话,默认的logcat输出太乱了,根本没法看。

我常用的logcat命令:

# 查看所有日志
adb logcat

# 按标签过滤
adb logcat -s MTK_DEBUG

# 保存到文件
adb logcat -d > log.txt

# 清空日志缓冲区
adb logcat -c

这里有个重要的概念——日志级别。联发科平台定义了6个级别:

级别 含义 使用场景
VERBOSE 详细信息 调试时临时打印
DEBUG 调试信息 开发阶段使用
INFO 普通信息 关键流程打印
WARN 警告信息 潜在问题提示
ERROR 错误信息 异常情况记录
FATAL 致命错误 系统崩溃前打印

我曾经在项目里遇到过一个问题:系统跑着跑着就重启了,但logcat里什么错误都没有。后来才发现,是日志缓冲区太小,关键日志被覆盖了。解决方法:

避坑指南:联发科平台的日志缓冲区默认只有64KB。我建议在调试阶段改成256KB:
adb logcat -G 256K

2.5 实战:搭建一个完整的调试环境

好了,理论说完了,咱们来点实际的。我一般搭建调试环境会按这个顺序来:

  1. 安装SDK和工具链
  2. 配置环境变量
  3. 连接开发板并验证ADB
  4. 测试日志系统
  5. 编译一个简单的驱动模块

最后一步特别重要。我会写一个最简单的内核模块,编译后加载到开发板上。如果这一步能成功,说明整个环境是通的。

# 一个简单的内核模块
#include <linux/module.h>
#include <linux/kernel.h>

int init_module(void) {
    printk(KERN_INFO "Hello, MTK Module!\n");
    return 0;
}

void cleanup_module(void) {
    printk(KERN_INFO "Goodbye, MTK Module!\n");
}

MODULE_LICENSE("GPL");

编译这个模块,用insmod加载,然后用dmesg查看内核日志。如果看到"Hello, MTK Module!",恭喜你,环境搭建成功了。

总结一下:环境搭建这事,说白了就是三个东西——SDK、工具链、调试工具。把这三点搞定了,后面的开发就顺了。我刚开始做联发科平台时,光环境就搭了三天。但现在回头看,那些坑都是宝贵的经验。

嗯,第二章就到这里。下一章咱们聊聊联发科平台的启动流程,那可是个有意思的话题。