Hi3519DV500 编译环境搭建与嵌入式Linux完整开发方案

从零搭建海思 Hi3519DV500 编译开发环境,掌握嵌入式 Linux Bootloader→内核→文件系统→驱动→应用的全链路开发流程。


前言

Hi3519DV500 是海思推出的智慧视觉 SoC,集成 Cortex-A55 处理器与 2.5T NPU,广泛应用于 AI 摄像头、无人机目标跟踪等场景。本文基于实际开发经验,系统整理了:

  • 编译环境搭建:从 Ubuntu 24.04 裸机到完整 SDK 编译
  • 嵌入式 Linux 开发方案:Bootloader → 内核 → 文件系统 → 驱动 → 应用
  • 磁盘空间管理:合理规划编译资源

无论你是刚拿到开发板的新手,还是需要系统化开发方案的老手,这篇文章都能帮你节省大量"踩坑"时间。


第一部分:编译环境搭建方案

1.1 环境概述

项目内容
宿主机OSUbuntu 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.tgz97MBglibc 动态链接推荐,通用开发,体积大但调试方便
gcc-*-linux-musl.tgz83MBmusl 静态链接体积小,适合嵌入式场景

推荐使用 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.binBootloader 引导程序
uImage_hi3519dv500Linux 内核镜像
rootfs_hi3519dv500_glibc.cramfscramfs 格式根文件系统
rootfs_hi3519dv500_glibc.squashfssquashfs 格式根文件系统
*.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
④制作uImagemkimage -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 空间管理建议

  1. 建议起始至少 20GB 磁盘空间,确保编译过程顺畅
  2. 编译完成后可以删除 SDK 的 tar.gz 压缩包,释放 1.2GB
  3. 如果使用 Buildroot 完整构建,建议清理 apt 缓存:
    sudo apt clean
    
  4. 虚拟机用户可以使用 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 源码和资料支持。建议按照以下顺序逐步推进:

  1. 先跑通 U-Boot 编译和烧录
  2. 定制内核配置,添加所需驱动
  3. 裁剪根文件系统,按需集成工具
  4. 编写外设驱动
  5. 开发应用程序

写在最后: 嵌入式 Linux 开发的门槛不低,但有了系统化的开发方案,每一步都有路可循。本文涵盖了 Hi3519DV500 从编译环境搭建到各层开发的完整链路,希望能为正在学习或从事海思平台开发的朋友提供参考。

如果你觉得有收获,欢迎关注分享,后续会继续更新更多嵌入式 AI 开发实战内容。


参考文档:

  • Ubuntu 开发环境搭建指导手册
  • 基于海思原厂 SDK 快速编译指导手册
  • 适配后 SDK 说明
  • 补丁使用说明
  • 常用工具移植指南
  • 海思 QT 移植文档
  • OpenCV 移植说明

更多推荐