2. 开发环境搭建:Ubuntu开发机配置、交叉编译工具链安装、SDK源码下载与编译、板端镜像烧录
说实话,做图像质量评测,环境搭建这一步最容易被忽视。很多人觉得不就是装个系统、配个工具链嘛,结果真上手了,各种报错能把人搞疯。我刚开始接触安霸平台时,光编译环境就折腾了两天。后来我把流程梳理清楚了,基本上一小时就能搞定。
这一章,咱们就把开发环境从头到尾捋一遍。你跟着做就行。
2.1 Ubuntu开发机配置
安霸的SDK对操作系统版本有要求。我个人习惯用 Ubuntu 18.04 LTS 或 20.04 LTS。太新的版本(比如22.04)反而容易出兼容性问题。
安装完系统后,第一件事就是装依赖包。打开终端,执行以下命令:
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- 开头。
安装步骤:
- 解压工具链:找到SDK中的
ambarella_toolchain.tar.gz,解压到/opt/目录下。 - 配置环境变量:编辑
~/.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— Bootloaderambarella.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信息和内存大小,说明烧录成功。
dd 把SD卡读出来:sudo dd if=/dev/sdX of=backup.img bs=4M。这样万一后面把系统搞坏了,直接恢复备份就行,不用重新编译。
2.5 环境搭建知识体系
下面这张图把整个环境搭建的流程串起来了。你对照着看,心里就有数了。
这张图把四个阶段串起来了。你从Ubuntu开发机开始,装好工具链,编译SDK,最后烧录到板子上。虚线表示如果你只想更新应用程序,可以直接用工具链编译,然后通过网络烧录,不用每次都编译整个SDK。
好了,环境搭建就讲到这里。你按这个流程走一遍,应该不会出大问题。如果遇到报错,先检查依赖包有没有装全,再看工具链路径配没配对。这两步最容易出问题。