Hi3519DV500 编译环境搭建与嵌入式Linux完整开发方案
Hi3519DV500 编译环境搭建与嵌入式Linux完整开发方案
从零搭建海思 Hi3519DV500 编译开发环境,掌握嵌入式 Linux Bootloader→内核→文件系统→驱动→应用的全链路开发流程。
前言
Hi3519DV500 是海思推出的智慧视觉 SoC,集成 Cortex-A55 处理器与 2.5T NPU,广泛应用于 AI 摄像头、无人机目标跟踪等场景。本文基于实际开发经验,系统整理了:
- 编译环境搭建:从 Ubuntu 24.04 裸机到完整 SDK 编译
- 嵌入式 Linux 开发方案:Bootloader → 内核 → 文件系统 → 驱动 → 应用
- 磁盘空间管理:合理规划编译资源
无论你是刚拿到开发板的新手,还是需要系统化开发方案的老手,这篇文章都能帮你节省大量"踩坑"时间。
第一部分:编译环境搭建方案
1.1 环境概述
| 项目 | 内容 |
|---|---|
| 宿主机OS | Ubuntu 24.04.4 LTS x86_64 |
| 目标芯片 | Hi3519DV500 (Cortex-A55) |
| 已装依赖 | build-essential ✅ |
| 交叉工具链 | 未安装 ❌ |
1.2 安装系统依赖
sudo apt install -y \
libncurses-dev flex bison \
libssl-dev device-tree-compiler \
u-boot-tools python3 \
xxd lzop
这些是嵌入式 Linux 编译的常用依赖包,包括内核配置工具(ncurses)、设备树编译器(dtc)、U-Boot 打包工具等。
1.3 安装交叉编译工具链
海思 SDK 提供两套交叉工具链,根据需求选择:
| 工具链 | 大小 | 链接方式 | 适用场景 |
|---|---|---|---|
gcc-*-linux-gnu.tgz | 97MB | glibc 动态链接 | 推荐,通用开发,体积大但调试方便 |
gcc-*-linux-musl.tgz | 83MB | musl 静态链接 | 体积小,适合嵌入式场景 |
推荐使用 glibc 版本,操作步骤如下:
# 1. 创建工具链目录
sudo mkdir -p /opt/hisi
# 2. 解压工具链(从共享目录复制到本地再解压,避免共享目录I/O瓶颈)
cp /path/to/gcc-20240819-aarch64-v01c01-linux-gnu.tgz /tmp/
cd /opt/hisi
sudo tar -xzf /tmp/gcc-20240819-aarch64-v01c01-linux-gnu.tgz
# 3. 查看解压后的工具链路径
ls /opt/hisi/gcc-*/bin/aarch64-linux-gnu-gcc
# 预期输出:/opt/hisi/gcc-20240819-aarch64-v01c01-linux-gnu/bin/aarch64-linux-gnu-gcc
# 4. 添加到 PATH(写进 ~/.bashrc 永久生效)
echo 'export PATH=/opt/hisi/gcc-*-linux-gnu/bin:$PATH' >> ~/.bashrc
echo 'export CROSS_COMPILE=aarch64-linux-gnu-' >> ~/.bashrc
echo 'export ARCH=arm64' >> ~/.bashrc
source ~/.bashrc
# 5. 验证安装
aarch64-linux-gnu-gcc --version
# 预期输出:aarch64-linux-gnu-gcc (Hisilicon_v01c01) ...
1.4 解压 SDK 源码
适配后的 SDK 通常位于共享目录(只读),需要复制到本地文件系统才能编译(避免共享目录 I/O 瓶颈和权限问题):
# SDK约4-5GB,复制到本地
mkdir -p ~/hisi/hi3519dv500
cp /path/to/Hi3519DV500_SDK_V2.0.2.0.tar.gz ~/hisi/
cd ~/hisi
tar -xzf Hi3519DV500_SDK_V2.0.2.0.tar.gz
1.5 编译 BSP 层
BSP(Board Support Package)包含 bootloader、内核、驱动、文件系统等底层支持,是嵌入式系统的基础。
# 进入 BSP 编译目录
cd ~/hisi/hi3519dv500/Hi3519DV500_SDK_V2.0.2.0/smp/a55_linux/source/bsp
# 编译 Hi3519DV500 平台
make EBAINA_BOARD=38C LIB_TYPE=glibc CHIP=hi3519dv500 all
编译产物(在 bsp/pub/ 目录下):
| 文件 | 说明 |
|---|---|
u-boot-hi3519dv500.bin | Bootloader 引导程序 |
uImage_hi3519dv500 | Linux 内核镜像 |
rootfs_hi3519dv500_glibc.cramfs | cramfs 格式根文件系统 |
rootfs_hi3519dv500_glibc.squashfs | squashfs 格式根文件系统 |
*.dtb | 设备树二进制文件 |
1.6 编译 MPP Sample(多媒体处理)
MPP(Media Process Platform)是海思多媒体处理平台,提供视频编解码、图像处理等 API。
# 解压MPP Sample包
cd ~/hisi/hi3519dv500
tar -xzf /path/to/Hi3519DV500_SDK_V2.0.2.0_MPP_Sample-main.tar.gz
# 进入MPP目录编译
cd Hi3519DV500_SDK_V2.0.2.0_MPP_Sample-main
make
1.7 应用补丁进行硬件适配
如果使用适配后的 SDK,补丁已集成,直接编译即可。
如果需要从原厂 SDK 自行适配,则需要打补丁:
cd ~/hisi/hi3519dv500/Hi3519DV500_SDK_V2.0.2.0
mkdir hi3519dv500_adapt
# 复制补丁文件
cp /path/to/adapt.sh hi3519dv500_adapt/
cp /path/to/ebaina_hi3519dv500_adapt.patch hi3519dv500_adapt/
# 执行补丁
chmod +x hi3519dv500_adapt/adapt.sh
cd hi3519dv500_adapt
./adapt.sh
# 重新编译
cd ../smp/a55_linux/source/bsp
make distclean
make EBAINA_BOARD=38C LIB_TYPE=glibc CHIP=hi3519dv500 all
1.8 编译固件打包工程
cd ~/hisi/hi3519dv500
tar -xzf /path/to/Hi3519DV500_Firmware_Building-main.tar.gz
cd Hi3519DV500_Firmware_Building-main
# 参考内部文档进行打包
第二部分:嵌入式 Linux 整体开发方案
Hi3519DV500 使用海思 SDMP(SMP Linux)方案,即在 A55 大核上运行标准 Linux,整体架构如下:
┌─────────────────────────────────────┐
│ Application │ ← 你的应用层代码
├─────────────────────────────────────┤
│ Busybox / 用户态工具 │ ← 命令行工具集
├─────────────────────────────────────┤
│ 根文件系统 (rootfs) │ ← squashfs / ubifs
├─────────────────────────────────────┤
│ Linux Kernel │ ← 含驱动 + 海思MPP模块
├─────────────────────────────────────┤
│ Bootloader (U-Boot) │ ← 启动引导
├─────────────────────────────────────┤
│ 硬件层 (Hi3519DV500) │
└─────────────────────────────────────┘
掌握这五个层级,就能驾驭嵌入式 Linux 的完整开发链路。
2.1 Bootloader(U-Boot)
U-Boot 源码在 SDK 中的位置:
~/hisi/hi3519dv500/Hi3519DV500_SDK_V2.0.2.0/smp/a55_linux/source/bsp/uboot/
U-Boot 开发流程:
| 阶段 | 操作 | 说明 |
|---|---|---|
| ①配置 | make hi3519dv500_defconfig | 使用海思默认配置 |
| ②修改 | 编辑 include/configs/hi3519dv500.h | 修改启动参数、DDR 配置等 |
| ③编译 | make CROSS_COMPILE=aarch64-linux-gnu- | 生成 u-boot.bin |
| ④烧录 | 通过串口/网口烧写到 SPI Flash | 参考烧录章节 |
常用 U-Boot 修改场景:
- 启动参数(bootargs):修改内核启动命令行,如
mem=512M、console=ttyAMA0,115200 - 启动命令(bootcmd):修改启动方式(NFS/SD卡/Flash)
- DDR 配置:参考
.xlsm时序配置文件调整内存参数 - 网络配置:设置 MAC 地址、IP 地址
2.2 Linux Kernel
内核源码位置:
~/hisi/hi3519dv500/Hi3519DV500_SDK_V2.0.2.0/smp/a55_linux/source/bsp/kernel/
内核开发流程:
| 阶段 | 操作 | 说明 |
|---|---|---|
| ①配置 | make ARCH=arm64 hisilicon/hi3519dv500_defconfig | 海思默认配置 |
| ②菜单配置 | make ARCH=arm64 menuconfig | 增删内核模块/驱动 |
| ③编译 | make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j4 | 生成 Image |
| ④制作uImage | mkimage -A arm64 ... | 打包为 U-Boot 可引导格式 |
| ⑤设备树 | make ARCH=arm64 dtbs | 编译设备树 .dtb |
常见内核定制场景:
# 1. 解压内核源码后进入目录
cd ~/hisi/kernel/linux-5.10.y/
# 2. 添加新驱动模块(如SPI、I2C设备)
make ARCH=arm64 menuconfig
# Device Drivers → SPI support / I2C support → 选择你的设备驱动
# 3. 修改设备树(DTS)添加新硬件
vim arch/arm64/boot/dts/hisilicon/hi3519dv500.dts
# 添加节点描述新外设(如I2C传感器、GPIO控制等)
# 4. 重新编译内核和设备树
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j4 Image dtbs
2.3 根文件系统 & Busybox
海思 SDK 默认方式: 使用 buildroot 或 SDK 自带的 rootfs 生成脚本。
~/hisi/hi3519dv500/Hi3519DV500_SDK_V2.0.2.0/smp/a55_linux/source/bsp/rootfs/
如果你要自己定制根文件系统(包括 Busybox 工具集):
# 方案A:使用 Buildroot(推荐)
# Buildroot 可以一键生成完整的 rootfs + busybox + 各种工具
# 1. 下载 Buildroot
cd ~/hisi
git clone https://git.buildroot.net/buildroot -b 2025.02.x
cd buildroot
# 2. 配置(选择aarch64目标)
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- aarch64_efi_defconfig
# 3. 细调配置
make menuconfig
# Target packages → 选择你需要安装的包
# Busybox → 配置命令行工具
# Filesystem images → 选择 squashfs / ext4 / ubifs 格式
# 4. 编译(-j4并行编译)
make -j4
# 产物在 output/images/ 下
手动编译 Busybox(更灵活的方式):
# 1. 下载 Busybox
cd ~/hisi
wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2
tar -xf busybox-1.36.1.tar.bz2
cd busybox-1.36.1
# 2. 配置
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
# 3. 个性化配置(选择需要的命令)
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
# Busybox Settings → Build Options → Cross Compiler prefix: aarch64-linux-gnu-
# 在命令列表中勾选需要的工具:ls, cat, cp, mv, vi, ifconfig 等
# 4. 编译
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j4
# 5. 安装到目录
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- install CONFIG_PREFIX=~/hisi/rootfs
2.4 外设驱动开发
SDK 提供了外设驱动和例程包:
| 包名 | 用途 |
|---|---|
Peripherals_Driver-main.tar.gz | 外设内核驱动源码 |
Peripherals_Sample-main.tar.gz | 外设使用例程(用户态) |
驱动开发常见类型:
| 驱动类型 | 说明 | 示例 |
|---|---|---|
| GPIO 驱动 | 控制 IO 口高低电平 | 按键、LED、蜂鸣器 |
| I2C 驱动 | 连接 I2C 传感器 | 温湿度、陀螺仪、A/D 转换 |
| SPI 驱动 | SPI 通信设备 | 显示屏、ADC、Flash |
| UART 驱动 | 串口通信 | 与外部 MCU 通信 |
| PWM 驱动 | 脉宽调制 | 电机控制、调光 |
| 摄像头驱动 | Sensor 驱动 | OS04A10、IMX347 |
驱动开发基本步骤:
# 1. 编写驱动源文件 xx_drv.c
# 2. 添加到内核源码 drivers/ 相应目录
# 3. 修改 Kconfig + Makefile
# 4. make menuconfig 选择该驱动(可以编入内核或模块)
# 5. 编译内核或模块
# 6. 拷贝到开发板测试
2.5 应用程序开发
交叉编译应用:
# 编译C程序
aarch64-linux-gnu-gcc -o hello hello.c -static
# 编译CMake项目
mkdir build && cd build
cmake .. -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc \
-DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ \
-DCMAKE_SYSTEM_NAME=Linux
make -j4
# 通过NFS挂载或SCP传到开发板运行
scp hello root@192.168.x.x:/tmp/
应用层技术栈推荐:
| 功能 | 推荐方案 |
|---|---|
| 命令行界面 | Busybox shell + 自定义脚本 |
| QT 图形界面 | QT5 交叉编译(参考海思 QT 移植文档) |
| OpenCV 视觉 | OpenCV 移植(参考 Opencv 移植说明) |
| 网络通信 | Socket / MQTT / HTTP |
| 数据库 | SQLite(轻量,可交叉编译) |
| 视频处理 | MPP 提供 API(VENC/VDEC/VPS) |
2.6 开发工作流整体流程
日常开发迭代循环:
┌──────┐ ┌──────────┐ ┌────────┐ ┌──────────┐
│ 编辑 │───→│ 交叉编译 │───→│ 部署 │───→│ 板端测试 │
│ 代码 │ │ (PC端) │ │ (SCP/ │ │ (开发板) │
└──────┘ └──────────┘ │ NFS) │ └──────────┘
└────────┘ │
↑ │
└─────────────┘
调试反馈
推荐开发环境结构:
~/hisi/hi3519dv500/
├── toolchain/ # 交叉工具链(已安装到/opt)
├── Hi3519DV500_SDK_V2.0.2.0/ # SDK源码(4-5GB)
│ └── smp/a55_linux/source/bsp/
│ ├── uboot/ # U-Boot源码
│ ├── kernel/ # Linux内核源码
│ ├── rootfs/ # 根文件系统
│ └── drivers/ # 板级驱动
├── buildroot/ # (可选)Buildroot构建系统
├── busybox-1.36.1/ # (可选)自己定制的Busybox
├── mpp_sample/ # MPP Sample例程
├── peripherals/ # 外设驱动+例程
├── my_apps/ # 你自己的应用程序
└── images/ # 编译产物(u-boot/kernel/rootfs)
第三部分:磁盘空间分析与清理建议
3.1 空间需求预估
| 项目 | 大小 |
|---|---|
| 交叉工具链(解压后) | ~300MB |
| 适配后 SDK(tar.gz) | 1.2GB |
| SDK 解压后 | ~4-5GB |
| MPP Sample | ~200MB |
| 外设包 | ~100MB |
| 固件打包工程 | ~50MB |
| Buildroot 构建 | ~2GB |
| 编译中间产物 | ~1-2GB |
| 总计 | ~9-10GB |
3.2 空间管理建议
- 建议起始至少 20GB 磁盘空间,确保编译过程顺畅
- 编译完成后可以删除 SDK 的 tar.gz 压缩包,释放 1.2GB
- 如果使用 Buildroot 完整构建,建议清理 apt 缓存:
sudo apt clean - 虚拟机用户可以使用 VirtualBox 动态扩容功能
总结:两步走战略
第一步:搭建编译环境
# ① 安装依赖
sudo apt install libncurses-dev flex bison libssl-dev \
device-tree-compiler u-boot-tools lzop -y
# ② 安装交叉工具链
sudo mkdir -p /opt/hisi
cp /path/to/gcc-*-linux-gnu.tgz /tmp/
sudo tar -xzf /tmp/gcc-*-linux-gnu.tgz -C /opt/hisi/
echo 'export PATH=/opt/hisi/gcc-*-linux-gnu/bin:$PATH' >> ~/.bashrc
echo 'export CROSS_COMPILE=aarch64-linux-gnu-' >> ~/.bashrc
source ~/.bashrc
# ③ 复制并解压SDK
mkdir -p ~/hisi/hi3519dv500
cp /path/to/Hi3519DV500_SDK_V2.0.2.0.tar.gz ~/hisi/
cd ~/hisi && tar -xzf Hi3519DV500_SDK_V2.0.2.0.tar.gz
# ④ 测试编译BSP
cd Hi3519DV500_SDK_V2.0.2.0/smp/a55_linux/source/bsp
make EBAINA_BOARD=38C LIB_TYPE=glibc CHIP=hi3519dv500 all
第二步:深入嵌入式 Linux 开发
按需深入 Bootloader → Kernel → Rootfs → 驱动 → 应用的完整链路,每一个环节都有对应的 SDK 源码和资料支持。建议按照以下顺序逐步推进:
- 先跑通 U-Boot 编译和烧录
- 定制内核配置,添加所需驱动
- 裁剪根文件系统,按需集成工具
- 编写外设驱动
- 开发应用程序
写在最后: 嵌入式 Linux 开发的门槛不低,但有了系统化的开发方案,每一步都有路可循。本文涵盖了 Hi3519DV500 从编译环境搭建到各层开发的完整链路,希望能为正在学习或从事海思平台开发的朋友提供参考。
如果你觉得有收获,欢迎关注分享,后续会继续更新更多嵌入式 AI 开发实战内容。
参考文档:
- Ubuntu 开发环境搭建指导手册
- 基于海思原厂 SDK 快速编译指导手册
- 适配后 SDK 说明
- 补丁使用说明
- 常用工具移植指南
- 海思 QT 移植文档
- OpenCV 移植说明
更多推荐



所有评论(0)