System Flashing
NE503 整机软件分为两层:
| 层级 | 名称 | 内容 | 更新方式 |
|---|---|---|---|
| 系统镜像 | hailo-os | Linux 内核、设备树、根文件系统 | 烧录/升级(本文档) |
| 平台软件 | hailo-ne503 | 平台服务、HAL、Web 控制台 | Software Deployment |
本文档说明系统镜像的首次烧录和后续升级。平台软件的构建和部署请参阅 Software Deployment。
流程概览
根据设备当前状态选择路径:
- 首次部署 / 全量烧录(全新板或引导损坏):§1 准备 → §2 烧引导链 → §3 烧系统镜像 → §4 登录 → §6 验证
- 仅升级系统镜像(设备已能正常启动):§1.3 TFTP → §5.1 升级 → §6 验证
何时跳过 §2: 设备能进入 U-Boot 菜单或已能正常启动到 Linux,说明引导链完好,直接做 §3 或 §5。只有引导损坏(上电无 U-Boot 输出)或全新板才需要 §2。
1. 准备工作
1.1 固件包
从 CamThink 技术支持 获取固件包,解压后包含以下文件。按用途分为两组:
引导链组件(§2 使用,共 9 个)
| 文件 | 用途 |
|---|---|
hailo15_uart_recovery_fw.bin | UART 恢复固件 |
hailo15_scu_bl.bin | SCU 引导加载器 |
scu_bl_cfg_a.bin | SCU 引导配置 |
hailo15_scu_fw.bin | SCU 固件 |
u-boot.dtb.signed | U-Boot 设备树(签名) |
u-boot-spl.bin | U-Boot SPL |
u-boot-initial-env | U-Boot 初始环境变量 |
customer_certificate.bin | 客户证书 |
u-boot-tfa.itb | U-Boot TF-A 镜像 |
| 文件 | 用途 |
|---|---|
fitImage | Linux 内核镜像 |
swupdate-image-hailo15-ne503.ext4.gz | 系统根文件系统 |
hailo-update-image-hailo15-ne503.swu | SWUpdate 升级包 |
1.2 主机工具
仅 §2 烧录引导链 需要;只做 §3/§5 系统镜像烧录或升级的可跳过本节。
§2 引导链烧录支持 Ubuntu 和 macOS(验证的 hailo15_board_tools 版本 1.9.0)。hailo15_board_tools 是跨平台 Python wheel,两个平台的差异只在依赖安装方式和串口设备节点。
关键依赖
mkenvimage: §2.3 的hailo15_spi_flash_program会调用mkenvimage生成 U-Boot env 镜像。若主机未安装,烧录会在写入第 5 个组件(U-Boot env)时崩溃,留下半写的引导链。两个平台都必须先装好——Ubuntu 由apt-get install u-boot-tools提供,macOS 由brew install u-boot-tools提供。
Ubuntu
# Hailo 烧录工具(将 <VERSION> 替换为实际版本号,当前验证版本 1.9.0)
pip install hailo15_board_tools-<VERSION>.whl
# U-Boot 辅助工具(提供 mkenvimage,§2.3 必需)
sudo apt-get update && sudo apt-get install u-boot-tools



macOS
# 1. mkenvimage(§2.3 必需,否则烧录中途崩溃)
brew install u-boot-tools
# 2. 在 venv 中安装 wheel(Homebrew Python 受 PEP 668 限制,不能直接 pip install)
python3 -m venv hailo-venv
./hailo-venv/bin/pip install hailo15_board_tools-<VERSION>.whl
# 之后用 ./hailo-venv/bin/uart_boot_fw_loader 与 ./hailo-venv/bin/hailo15_spi_flash_program
串口设备节点: Ubuntu 一般为
/dev/ttyACM0;macOS 一般为/dev/cu.usbserial-*或/dev/tty.usbserial-*。传入--serial-device-name时用本机实际节点(确认方法见 §1.4 硬件连接)。
1.3 TFTP 服务器
系统镜像较大(100MB+),通过 TFTP 网络协议传输到设备。
Ubuntu
# 安装 TFTP 服务端
sudo apt install tftpd-hpa
# 编辑配置
sudo nano /etc/default/tftpd-hpa
配置内容:
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
启动服务并部署镜像文件:
sudo mkdir -p /var/lib/tftpboot
sudo chmod -R 777 /var/lib/tftpboot
sudo systemctl restart tftpd-hpa
# 将固件文件拷贝到 TFTP 目录
cp fitImage swupdate-image-hailo15-ne503.ext4.gz hailo-update-image-hailo15-ne503.swu /var/lib/tftpboot/
macOS
macOS 自带 tftpd,通过 launchd 按需启动:
# 创建固件目录
mkdir -p ~/Downloads/Firmware
chmod 777 ~/Downloads/Firmware
# 写入 launchd 配置
sudo tee /Library/LaunchDaemons/com.tftp.local.plist > /dev/null << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.tftp.local</string>
<key>ProgramArguments</key>
<array>
<string>/usr/libexec/tftpd</string>
<string>-i</string>
<string>/Users/<USER>/Downloads/Firmware</string>
</array>
<key>inetdCompatibility</key>
<dict>
<key>Wait</key>
<true/>
</dict>
<key>InitGroups</key>
<true/>
<key>Sockets</key>
<dict>
<key>Listeners</key>
<dict>
<key>SockServiceName</key>
<string>tftp</string>
<key>SockType</key>
<string>dgram</string>
</dict>
</dict>
</dict>
</plist>
EOF
# 启动服务
sudo launchctl load -w /Library/LaunchDaemons/com.tftp.local.plist
# 验证
sudo lsof -i :69
将
<USER>替换为你的 macOS 用户名。将固件文件放入~/Downloads/Firmware/目录。 如果 TFTP 报 "Operation not permitted",在 系统设置 → 隐私与安全性 → 完全磁盘访问权限 中添加/usr/libexec/tftpd,或改用/private/tftpboot作为 TFTP 目录。
1.4 硬件连接
- 使用 USB 转串口线连接 NE503 调试串口和主机
NE503 调试串口为 1.8V 电平,需使用 1.8V 兼容的 USB 转串口线(常见 3.3V 串口线可能无法正常通信)。建议从 CamThink 获取配套串口小板。
- 使用网线连接 NE503 网口和主机(直连或同一交换机)
CamThink 串口小板:

接入 NE503 主板:

- 确认串口设备节点:
ls /dev/serial/by-id/* -lh
# 输出示例:usb-1a86_USB_Serial_5B1E071587-if00 -> ../../ttyACM0

下文以
/dev/ttyACM0为例,请根据实际设备节点修改。macOS 下设备节点通常为/dev/tty.usbmodem*或/dev/tty.usbserial*。
打开串口终端(波特率 115200),后续烧录日志、U-Boot 菜单交互与系统登录均在此终端中完成:
# Ubuntu(也可使用 minicom)
screen /dev/ttyACM0 115200
# macOS
screen /dev/tty.usbmodem* 115200
Windows 可使用 SecureCRT 或 PuTTY,波特率同为 115200。退出 screen:依次按
Ctrl+A、K、Y。
拨码开关模式
NE503 通过两个拨码开关(BOOT0、BOOT1)选择上电后的行为。后文涉及拨码操作时只标注模式名,对照此表即可:
| 模式 | BOOT0 | BOOT1 | 何时使用 |
|---|---|---|---|
| UART 恢复(烧引导链) | OFF | ON | 仅 §2 烧录引导链 |
| 正常启动 | OFF | OFF | §3 烧录系统镜像 及以后、日常运行 |
2. 烧录引导链
引导链烧录仅在首次部署或引导损坏时需要。正常使用中跳过此步骤。
2.1 进入 UART 恢复模式
将拨码开关拨到 UART 恢复模式(BOOT0 OFF、BOOT1 ON,见 §1.4 拨码开关模式):

操作步骤:
- 拨到 UART 恢复模式(BOOT0 OFF、BOOT1 ON)
- 通过 PoE(RJ45 网口)为设备上电
- 按下 Reset 复位键,进入烧录等待状态
