2、开发环境搭建:交叉编译工具链安装、Exynos SDK配置、目标板连接与调试环境验证

好,咱们正式开始动手了。这一章要解决的是「工欲善其事,必先利其器」的问题。很多同学刚开始接触嵌入式开发,最容易卡在环境搭建这一步。我见过有人折腾了三天,最后发现是路径写错了。所以这一章,我会把每一步拆开揉碎了讲,你跟着做就行。

2.1 交叉编译工具链安装

先说说为什么需要交叉编译。你想想看,你的电脑是 x86 架构,而 Exynos 芯片是 ARM 架构。直接在电脑上编译出来的程序,ARM 芯片是跑不起来的。所以我们需要一个「翻译官」——交叉编译工具链。

我个人习惯用 Linaro 提供的 GCC 工具链,稳定且社区支持好。Exynos 官方也推荐这个。

2.1.1 下载与解压

去 Linaro 官网下载 aarch64-linux-gnu 版本。注意,Exynos 系列大多是 64 位 ARMv8 架构,别下错了 32 位的。

# 下载工具链(以 gcc-arm-9.2-2019.12-x86_64-aarch64-linux-gnu.tar.xz 为例)
wget https://releases.linaro.org/components/toolchain/binaries/latest-9/aarch64-linux-gnu/gcc-arm-9.2-2019.12-x86_64-aarch64-linux-gnu.tar.xz

# 解压到 /opt 目录
sudo tar -xvf gcc-arm-9.2-2019.12-x86_64-aarch64-linux-gnu.tar.xz -C /opt/
我的习惯:我会把工具链放在 /opt 下,而不是 /usr/local。这样方便管理多个版本。万一要切版本,直接改 PATH 就行。

2.1.2 配置环境变量

解压完只是第一步,你得让系统知道去哪找这些工具。编辑你的 ~/.bashrc 文件,加上下面这几行:

export PATH=$PATH:/opt/gcc-arm-9.2-2019.12-x86_64-aarch64-linux-gnu/bin
export CROSS_COMPILE=aarch64-linux-gnu-
export ARCH=arm64

然后 source ~/.bashrc 让它生效。验证一下:

aarch64-linux-gnu-gcc --version

如果能看到版本信息,说明工具链装好了。

注意:我曾经遇到过 PATH 写错导致编译时一直报「command not found」。排查了半天,发现是路径里多了一个空格。这种低级错误最坑人,你检查时仔细点。

2.2 Exynos SDK 配置

工具链装好了,接下来是 SDK。Exynos 的 SDK 通常包含三部分:内核源码、文件系统、以及一些板级支持包(BSP)。三星官方会提供一个压缩包,里面是完整的开发环境。

2.2.1 获取 SDK

假设你拿到了 Exynos 5422 的 SDK,解压后目录结构大概是这样:

exynos5422_sdk/
├── kernel/          # Linux 内核源码
├── u-boot/          # 引导加载程序
├── rootfs/          # 根文件系统
├── tools/           # 烧录工具、调试脚本
└── docs/            # 文档

嗯,这里要注意,不同版本的 SDK 目录名可能略有差异,但核心模块就这几个。

2.2.2 配置 SDK 环境

SDK 里通常会提供一个 envsetup.sh 脚本,用来一键设置环境变量。我个人建议你执行一下:

cd exynos5422_sdk
source envsetup.sh

这个脚本会帮你设置好内核编译路径、文件系统路径、以及一些常用的别名。比如我习惯用 mkernel 来编译内核,就是它定义的。

如果 SDK 里没有这个脚本,那你就得手动设置。核心变量就这几个:

变量名 说明 示例值
KERNEL_DIR 内核源码路径 /home/user/exynos5422_sdk/kernel
ROOTFS_DIR 根文件系统路径 /home/user/exynos5422_sdk/rootfs
CROSS_COMPILE 交叉编译前缀 aarch64-linux-gnu-
核心要点:SDK 配置的本质就是让编译系统知道「用什么工具链」、「编译什么架构」、「输出放哪里」。这三个点对了,后面基本不会出大问题。

2.3 目标板连接与调试环境验证

环境搭好了,得连上板子试试。这一步最直观,也最容易出问题。我见过有人串口线接反了,折腾半天。

2.3.1 串口连接

Exynos 开发板通常通过 UART 串口与电脑通信。你需要一根 USB 转串口线,比如 CP2102 或 CH340。连接方式:

  • 板子的 UART0 接口(通常是 3.3V 电平)
  • 电脑端用 minicom 或 screen 打开串口
# 查看串口设备
ls /dev/ttyUSB*

# 用 screen 连接,波特率 115200
sudo screen /dev/ttyUSB0 115200

给板子上电,如果看到启动日志,说明串口通了。如果没反应,检查一下:

  • 串口线 TX/RX 有没有接反?
  • 波特率是不是 115200?
  • 板子有没有供电?
避坑指南:我曾经遇到过 screen 退出后串口被占用的问题。用 sudo pkill screen 杀掉进程,或者用 stty -F /dev/ttyUSB0 115200 重置一下。

2.3.2 网络连接(可选但推荐)

串口调试虽然稳定,但传输文件太慢。我建议你同时配置网络。Exynos 板子一般有以太网口,用网线连到路由器或电脑:

# 在板子上设置 IP(假设路由器网段是 192.168.1.x)
ifconfig eth0 192.168.1.100 netmask 255.255.255.0 up

然后在电脑上 ping 一下:

ping 192.168.1.100

通了的话,就可以用 scp 传文件了,比串口快得多。

2.3.3 调试环境验证

最后一步,验证整个环境是否可用。写一个简单的 Hello World:

// hello.c
#include <stdio.h>

int main() {
    printf("Hello from Exynos!\n");
    return 0;
}

用交叉编译器编译:

aarch64-linux-gnu-gcc -o hello hello.c

然后用 scp 传到板子上:

scp hello root@192.168.1.100:/root/

在板子上运行:

./hello

如果看到「Hello from Exynos!」,恭喜你,环境搭建成功了!

我的经验:第一次跑通这个程序时,我特意在板子上多试了几次。因为之前遇到过编译出来是 x86 格式的,放到 ARM 板子上直接报「Exec format error」。所以一定要在目标板上验证,别偷懒。

2.4 本章小结

这一章我们做了三件事:装工具链、配 SDK、连板子。每一步都不难,但细节很多。你只要跟着做,大概率一次过。如果卡住了,先检查路径和权限,这两个是重灾区。

下一章,我们会开始真正接触 Exynos 的异构计算核心——用 OpenCL 写第一个并行程序。到时候你会发现,今天搭的环境,就是后面所有实验的基础。