2. 开发环境搭建:Ubuntu开发机配置、交叉编译工具链安装、SDK源码下载与编译、板端镜像烧录

说实话,做图像质量评测,环境搭建这一步最容易被忽视。很多人觉得不就是装个系统、配个工具链嘛,结果真上手了,各种报错能把人搞疯。我刚开始接触安霸平台时,光编译环境就折腾了两天。后来我把流程梳理清楚了,基本上一小时就能搞定。

这一章,咱们就把开发环境从头到尾捋一遍。你跟着做就行。

2.1 Ubuntu开发机配置

安霸的SDK对操作系统版本有要求。我个人习惯用 Ubuntu 18.04 LTS 或 20.04 LTS。太新的版本(比如22.04)反而容易出兼容性问题。

注意: 不要用Ubuntu 22.04及以上版本。安霸的交叉编译工具链依赖的库版本较老,新版系统可能缺少某些32位库,导致工具链无法运行。

安装完系统后,第一件事就是装依赖包。打开终端,执行以下命令:

sudo apt update
sudo apt install -y build-essential git vim cmake
sudo apt install -y libncurses5-dev libncursesw5-dev
sudo apt install -y libssl-dev libelf-dev
sudo apt install -y python3 python3-pip
sudo apt install -y u-boot-tools device-tree-compiler
sudo apt install -y lib32z1 lib32ncurses5 lib32stdc++6

这里有个坑——lib32ncurses5 这个包。我记得有一次在新装的Ubuntu 20.04上,死活装不上这个包。后来发现是系统源里没有启用i386架构。解决办法是:

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install lib32ncurses5

嗯,这个细节卡了我半小时。你提前加上,能省不少事。

2.2 交叉编译工具链安装

安霸平台用的是ARM架构的芯片。咱们的PC是x86架构,所以需要交叉编译工具链。说白了,就是在PC上编译出能在ARM芯片上跑的程序。

工具链一般放在SDK包里的 toolchain 目录下。以安霸CV系列为例,工具链名称通常是 arm-cv-linux-gnueabihf- 开头。

安装步骤:

  1. 解压工具链:找到SDK中的 ambarella_toolchain.tar.gz,解压到 /opt/ 目录下。
  2. 配置环境变量:编辑 ~/.bashrc,添加以下内容。
export PATH=/opt/arm-cv-linux-gnueabihf/bin:$PATH
export CROSS_COMPILE=arm-cv-linux-gnueabihf-
export ARCH=arm

然后执行 source ~/.bashrc 使配置生效。

验证是否安装成功:

arm-cv-linux-gnueabihf-gcc --version

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

小技巧: 我习惯把工具链路径放在 /opt/ 下,而不是 /usr/local/。这样重装系统时,只要备份 /opt/ 目录,工具链就能直接恢复使用。

2.3 SDK源码下载与编译

安霸的SDK通常通过Git仓库管理。你需要先向安霸FAE申请访问权限。拿到权限后,克隆代码:

git clone git@github.com:ambarella/ambarella_sdk.git -b cv2x_linux
cd ambarella_sdk

SDK的目录结构大致如下:

目录/文件 说明
build/ 编译输出目录
configs/ 板级配置(defconfig)
linux/ Linux内核源码
bootloader/ U-Boot源码
app/ 用户态应用程序
toolchain/ 交叉编译工具链

编译SDK前,先选择板级配置。以CV2x系列为例:

make cv2x_defconfig

然后开始编译:

make -j$(nproc)

第一次编译会比较慢,大概20-40分钟,取决于你的机器性能。编译完成后,生成的镜像文件在 build/images/ 目录下。

关键文件:
  • uImage — Linux内核镜像
  • rootfs.squashfs — 根文件系统
  • u-boot.bin — Bootloader
  • ambarella.dtb — 设备树文件

我曾经犯过一个低级错误——编译前忘了执行 make clean。结果改了内核配置后,编译出来的镜像还是旧的。折腾了半天才发现是缓存问题。所以,每次修改配置后,建议先 make clean 再重新编译。

2.4 板端镜像烧录

镜像编译好了,接下来就是烧录到板子上。安霸平台支持多种烧录方式:

  • SD卡烧录:最常用,适合量产和开发调试。
  • USB烧录:通过USB OTG接口,适合裸板第一次烧录。
  • 网络烧录(TFTP/NFS):适合频繁修改代码的开发阶段。

这里我重点讲SD卡烧录,因为这是最稳定的方式。

2.4.1 制作SD卡启动盘

你需要一张至少8GB的SD卡。在Ubuntu上,用 dd 命令烧录:

sudo dd if=build/images/sd_card.img of=/dev/sdX bs=4M status=progress
sync

注意:/dev/sdX 是你的SD卡设备名。千万别写错了!我见过有人把 /dev/sda(系统盘)当成SD卡,结果系统直接崩了。

警告: 烧录前一定要确认设备名。用 lsblk 或 fdisk -l 查看。SD卡一般是 /dev/sdb 或 /dev/mmcblk0。

2.4.2 板子启动设置

烧录完成后,把SD卡插入板子。板子上一般有拨码开关或跳线,用来选择启动方式。以安霸CV2x开发板为例:

启动模式 SW1-1 SW1-2 SW1-3
SD卡启动 ON OFF OFF
USB烧录模式 OFF ON OFF
SPI Flash启动 OFF OFF ON

设置好拨码开关,上电。通过串口连接板子(波特率115200),你会看到U-Boot的启动信息。如果一切正常,系统会进入Linux命令行。

2.4.3 验证烧录是否成功

进入系统后,执行以下命令确认:

uname -a
cat /proc/cpuinfo
free -m

如果能正确显示内核版本、CPU信息和内存大小,说明烧录成功。

经验之谈: 我建议第一次烧录成功后,先备份一份SD卡镜像。用 dd 把SD卡读出来:sudo dd if=/dev/sdX of=backup.img bs=4M。这样万一后面把系统搞坏了,直接恢复备份就行,不用重新编译。

2.5 环境搭建知识体系

下面这张图把整个环境搭建的流程串起来了。你对照着看,心里就有数了。

安霸平台开发环境搭建流程 安霸平台开发环境搭建流程 ① Ubuntu开发机 ② 交叉编译工具链 ③ SDK源码编译 ④ 板端镜像烧录 Ubuntu 18.04/20.04 LTS 安装依赖库 配置i386架构 arm-cv-linux-gnueabihf- 解压到 /opt/ 配置 PATH 环境变量 make cv2x_defconfig make -j$(nproc) 输出:uImage、rootfs等 SD卡 / USB / 网络 dd 烧录镜像 拨码开关选择启动模式 ✅ 开发环境就绪 💡 开发调试建议 频繁改代码 → 网络烧录 首次烧录 → SD卡 裸板 → USB烧录

这张图把四个阶段串起来了。你从Ubuntu开发机开始,装好工具链,编译SDK,最后烧录到板子上。虚线表示如果你只想更新应用程序,可以直接用工具链编译,然后通过网络烧录,不用每次都编译整个SDK。

好了,环境搭建就讲到这里。你按这个流程走一遍,应该不会出大问题。如果遇到报错,先检查依赖包有没有装全,再看工具链路径配没配对。这两步最容易出问题。