2. 开发环境搭建:Ubuntu 20.04环境配置、NXP SDK安装、交叉编译链配置、VS Code远程开发设置

好,咱们正式开始动手。这一章是整个课程的基石,说白了就是给你的开发板“配电脑”。环境搭不好,后面代码写得再漂亮也跑不起来。我见过太多新手卡在这一步,一卡就是好几天。别急,跟着我的节奏来,稳得很。

2.1 Ubuntu 20.04 环境配置

我个人习惯用 Ubuntu 20.04 LTS,为什么?因为 NXP 的官方 SDK 对这个版本支持最成熟,坑最少。你非要用 22.04 或者 24.04 也行,但有些依赖库的版本会变,到时候报错你得自己扛。

2.1.1 系统安装与基础设置

建议你装双系统或者直接用一台独立的 Linux 主机。虚拟机?嗯,这里要注意,如果你用虚拟机,USB 和网络桥接的配置会麻烦一些,特别是后面要连雷达和摄像头的时候。我曾经在虚拟机上折腾了整整一个下午,就为了把 USB 摄像头识别出来,后来一气之下换了双系统。

装好系统后,第一件事就是换源。国内用户你懂的,不换源 apt update 能等到你怀疑人生。

# 备份原源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 替换为清华源(我用的是这个,稳定)
sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list

# 更新
sudo apt update && sudo apt upgrade -y

2.1.2 必备工具链安装

接下来装一些基础包。别偷懒,这些是后面编译 SDK 和跑例程的硬性要求。

sudo apt install -y build-essential cmake git vim curl wget \
    python3 python3-pip python3-dev \
    libssl-dev libusb-1.0-0-dev libgtk-3-dev \
    libavcodec-dev libavformat-dev libswscale-dev \
    libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

为什么装这么多?你想想看,ADAS 系统要处理图像、视频流,GStreamer 和 FFmpeg 是绕不开的。我建议你装完后再跑一遍 sudo apt autoremove,把没用的依赖清掉,保持系统干净。

我的小技巧: 装完这些后,顺手装个 neofetch,看一眼系统信息,确认一切正常。命令:sudo apt install neofetch && neofetch

2.2 NXP SDK 安装

NXP 的 SDK 全名叫 NXP eIQ® Toolkit 或者 MCUXpresso SDK,具体看你用的是哪款芯片。咱们课程里用的是 S32V234 系列,所以下载对应的 S32V234 BSP

2.2.1 下载与解压

去 NXP 官网注册个账号,下载 s32v234_sdk_xxx.tar.gz。我记得第一次下载时,文件有 2 个多 G,等得我差点睡着。

# 假设下载到了 ~/Downloads 目录
mkdir -p ~/nxp_sdk
tar -xzvf ~/Downloads/s32v234_sdk_*.tar.gz -C ~/nxp_sdk

2.2.2 安装依赖与编译测试

SDK 里自带了一个安装脚本,但别直接跑。先看看 README 文件,确认你的系统版本。我遇到过有人直接跑脚本,结果因为缺少 libncurses5 报错。

cd ~/nxp_sdk
# 先装这个,不然编译内核时会卡住
sudo apt install -y libncurses5-dev

# 运行安装脚本
./setup.sh

脚本跑完后,编译一个最简单的 hello world 例程试试水。

cd ~/nxp_sdk/examples/hello_world
make
# 如果没报错,说明 SDK 安装成功
注意: 如果你用的是 Ubuntu 22.04,libncurses5-dev 可能已经被 libncurses6-dev 替代。这时候需要手动安装兼容包:sudo apt install libncurses5。我曾经在这上面浪费了半小时,最后发现是版本号对不上。

2.3 交叉编译链配置

咱们的代码是在 x86 电脑上写,但最终要跑到 ARM 架构的 S32V234 上。所以必须装交叉编译链。说白了,就是让电脑能生成 ARM 芯片能识别的机器码。

2.3.1 下载交叉编译工具链

NXP 官方推荐用 Linaro GCC 或者 ARM GCC。我个人习惯用 Linaro 的,因为社区活跃,遇到问题好搜。

# 下载 ARM 64位交叉编译链(aarch64)
wget https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz

# 解压到 /opt 目录
sudo tar -xvf gcc-linaro-*.tar.xz -C /opt/
sudo mv /opt/gcc-linaro-* /opt/gcc-arm-aarch64

2.3.2 配置环境变量

每次编译都要指定工具链路径,太麻烦。我建议你直接写到 ~/.bashrc 里,一劳永逸。

echo 'export PATH=$PATH:/opt/gcc-arm-aarch64/bin' >> ~/.bashrc
echo 'export CROSS_COMPILE=aarch64-linux-gnu-' >> ~/.bashrc
source ~/.bashrc

# 验证是否生效
aarch64-linux-gnu-gcc --version

如果看到版本号,恭喜你,交叉编译链配好了。如果提示 command not found,检查一下路径写没写对。

核心要点: 交叉编译链的 CROSS_COMPILE 前缀一定要和 SDK 里的 Makefile 保持一致。否则编译出来的程序在板子上跑不起来,会报 Illegal instruction 错误。

2.4 VS Code 远程开发设置

你不可能一直蹲在开发板旁边敲代码。VS Code 的 Remote-SSH 插件能让你在 Windows 上写代码,在 Linux 服务器上编译,在板子上调试。爽得很。

2.4.1 安装 Remote-SSH 插件

打开 VS Code,左侧扩展栏搜 Remote - SSH,安装。装完后左下角会出现一个绿色的 >< 图标,点它。

2.4.2 配置 SSH 连接

假设你的 Ubuntu 主机 IP 是 192.168.1.100,用户名是 nxp

# 在 VS Code 中按 F1,输入 Remote-SSH: Add New SSH Host
# 然后输入:
ssh nxp@192.168.1.100

# 选择配置文件保存位置,默认是 ~/.ssh/config

连接成功后,VS Code 会自动在远程主机上安装一些依赖。第一次连接会慢一点,后面就快了。

2.4.3 配置编译任务

在远程主机上打开你的 SDK 工程目录,按 Ctrl+Shift+B 配置编译任务。创建一个 .vscode/tasks.json 文件,内容如下:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build sdk",
            "type": "shell",
            "command": "cd ~/nxp_sdk && make",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": []
        }
    ]
}

以后按 Ctrl+Shift+B 就能一键编译,不用再切到终端敲命令了。

避坑指南: 我曾经在 VS Code 里远程连接后,发现代码提示和跳转都不生效。后来发现是没装 C/C++ 扩展。记得在远程主机上也装一遍 C/C++CMake Tools 插件。

2.5 验证环境

最后,咱们写个简单的测试程序,确保整个链路是通的。

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

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

用交叉编译链编译:

aarch64-linux-gnu-gcc test.c -o test_arm
file test_arm
# 输出应该包含:ELF 64-bit LSB executable, ARM aarch64

然后把 test_arm 拷贝到开发板上运行。如果看到 Hello from S32V234!,说明你的开发环境搭建成功了。

总结一下: 环境搭建就三步——装系统、装 SDK、配交叉编译链。VS Code 远程开发是锦上添花,但强烈建议你配好,后面写代码效率能翻倍。

好,这一章就到这。下一章咱们开始真正接触 ADAS 感知系统的核心——摄像头驱动和图像采集。到时候你会用到今天配好的所有东西。