首页 虚拟现实

海思 Hi3516DV500/Hi3519DV500:环境搭建与固件编译避坑指南

分类:虚拟现实
字数: (6651)
阅读: (6606)
内容摘要:海思 Hi3516DV500/Hi3519DV500:环境搭建与固件编译避坑指南,

最近在搞 Hi3516DV500/Hi3519DV500 的项目,环境搭建和固件编译确实踩了不少坑。网上资料比较零散,特地整理一份详细的笔记,希望能帮助到大家。

1. 开发环境准备

首先,你需要一台 Linux 开发机。推荐 Ubuntu 18.04 LTS 或更高版本。之所以推荐 Ubuntu,是因为海思官方提供的 SDK 和工具链在 Ubuntu 上兼容性最好,可以避免一些不必要的麻烦。当然,如果你对 CentOS 或者其他 Linux 发行版比较熟悉,也可以尝试,但需要自行解决可能出现的依赖问题。

1.1 安装必要工具

# 更新软件源
sudo apt update

# 安装编译工具
sudo apt install -y build-essential gcc g++ make cmake autoconf automake libtool pkg-config

# 安装其他依赖
sudo apt install -y git wget unzip python python3 python3-pip openssh-server tftp-hpa

# 安装 minicom(可选,串口调试工具)
sudo apt install -y minicom

这里需要特别注意的是 openssh-server,这是通过 SSH 远程连接开发板的必要条件。安装完成后,你需要配置 SSH 服务,允许通过密码或者密钥登录。

1.2 安装交叉编译工具链

海思的交叉编译工具链是固件编译的核心。你需要从海思官方获取对应芯片型号的 SDK 包,里面包含了预编译好的工具链。解压 SDK 包后,找到 arm-himix100-linux 或者类似的目录,这就是我们要使用的交叉编译工具链。

# 假设 SDK 包解压到了 /opt/hisi-sdk 目录
export HISI_SDK_PATH=/opt/hisi-sdk
export PATH=$HISI_SDK_PATH/arm-himix100-linux/bin:$PATH

# 验证工具链是否安装成功
arm-himix100-linux-gcc -v

将工具链的路径添加到 PATH 环境变量中,这样就可以直接在命令行中使用交叉编译工具了。为了方便起见,可以将这两行命令添加到 ~/.bashrc 文件中,每次登录时自动设置。

1.3 安装 TFTP 服务器

TFTP (Trivial File Transfer Protocol) 用于将编译好的固件烧写到开发板上。tftp-hpa 是一个常用的 TFTP 服务器软件。

海思 Hi3516DV500/Hi3519DV500:环境搭建与固件编译避坑指南
# 配置 TFTP 服务器
sudo vim /etc/default/tftpd-hpa

修改配置文件,确保以下设置:

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

其中 TFTP_DIRECTORY 指定 TFTP 服务器的根目录,你需要将编译好的固件放到这个目录下。--secure 选项可以提高安全性,限制只能访问根目录下的文件。

# 创建 TFTP 根目录
sudo mkdir -p /srv/tftp
sudo chown tftp:tftp /srv/tftp
sudo chmod 777 /srv/tftp

# 重启 TFTP 服务
sudo systemctl restart tftpd-hpa

# 验证 TFTP 服务器是否启动
sudo systemctl status tftpd-hpa

1.4 安装 NFS 服务器 (可选)

NFS (Network File System) 允许开发板通过网络访问开发机上的文件系统,方便调试和开发。如果你的开发板支持 NFS,建议安装并配置 NFS 服务器。

# 安装 NFS 服务器
sudo apt install -y nfs-kernel-server

# 配置 NFS 共享目录
sudo vim /etc/exports

在配置文件中添加共享目录,例如:

/opt/hisi-sdk *(rw,sync,no_subtree_check,no_root_squash)

其中 /opt/hisi-sdk 是你要共享的目录,* 表示允许所有 IP 地址访问,rw 表示读写权限,sync 表示同步写入,no_subtree_checkno_root_squash 可以避免一些权限问题。

海思 Hi3516DV500/Hi3519DV500:环境搭建与固件编译避坑指南
# 导出 NFS 共享目录
sudo exportfs -a

# 重启 NFS 服务
sudo systemctl restart nfs-kernel-server

2. 固件编译

2.1 获取 SDK 源码

从海思官方获取对应芯片型号的 SDK 源码。SDK 源码通常是一个压缩包,解压后包含了 Bootloader、Kernel、Rootfs 等组件的源码。

2.2 配置编译选项

进入 SDK 源码目录,找到 Makefile 或者类似的配置文件。你需要根据你的硬件配置和需求修改编译选项,例如:

  • 芯片型号: 确保选择了正确的芯片型号 (HI3516DV500 或者 HI3519DV500)。
  • 内存大小: 设置正确的内存大小,这关系到 Kernel 的运行效率。
  • 文件系统: 选择合适的文件系统类型 (例如 yaffs2, squashfs, ubifs)。
  • 网络配置: 配置 IP 地址、网关、DNS 等网络参数。
  • 应用软件: 选择需要编译的应用软件,例如 RTSP 服务器、HTTP 服务器等。

2.3 编译 Bootloader

Bootloader 是系统启动的第一阶段,负责初始化硬件、加载 Kernel 和 Rootfs。编译 Bootloader 的方法通常是:

cd bootloader
make

编译完成后,会生成 uboot.bin 或者类似的二进制文件。

2.4 编译 Kernel

Kernel 是操作系统的核心,负责管理硬件资源、提供系统服务。编译 Kernel 的方法通常是:

海思 Hi3516DV500/Hi3519DV500:环境搭建与固件编译避坑指南
cd kernel
make ARCH=arm CROSS_COMPILE=arm-himix100-linux- hi3516dv500_defconfig # 或者 hi3519dv500_defconfig
make ARCH=arm CROSS_COMPILE=arm-himix100-linux- menuconfig # 可视化配置
make ARCH=arm CROSS_COMPILE=arm-himix100-linux- -j8 # -j8 并行编译

编译完成后,会生成 uImage 或者类似的 Kernel 镜像文件。

2.5 编译 Rootfs

Rootfs 是根文件系统,包含了系统的所有文件和目录。编译 Rootfs 的方法通常是:

cd rootfs
make

编译完成后,会生成 rootfs.img 或者类似的镜像文件。

2.6 打包固件

将 Bootloader、Kernel 和 Rootfs 打包成一个固件,例如 upgrade.img。海思官方通常提供了打包工具,你需要根据官方文档使用。

3. 烧写固件

3.1 连接开发板

通过串口或者网口连接开发板和开发机。如果使用串口,你需要使用 minicom 或者类似的串口调试工具。

海思 Hi3516DV500/Hi3519DV500:环境搭建与固件编译避坑指南

3.2 设置启动参数

通过串口进入 Bootloader 命令行,设置启动参数,例如:

setenv bootargs 'mem=256M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=yaffs2'
setenv bootcmd 'tftp 0x80000000 uImage; bootm 0x80000000'
saveenv

其中 bootargs 设置 Kernel 的启动参数,bootcmd 设置启动命令,saveenv 保存环境变量。

3.3 烧写固件

通过 TFTP 将固件烧写到开发板的 Flash 中。例如:

tftp 0x80000000 uboot.bin
erase 0x0 0x40000
cp.b 0x80000000 0x0 0x40000

tftp 0x80000000 uImage
erase 0x40000 0x200000
cp.b 0x80000000 0x40000 0x200000

tftp 0x80000000 rootfs.img
erase 0x240000 0x1000000
cp.b 0x80000000 0x240000 0x1000000

reset

这些命令将 Bootloader, Kernel, Rootfs 分别烧写到 Flash 的不同区域。请根据你的 Flash 分区情况修改地址。

4. 常见问题与解决

  • 编译错误: 检查交叉编译工具链是否安装正确,环境变量是否设置正确,依赖库是否安装完整。
  • TFTP 传输失败: 检查 TFTP 服务器是否启动,防火墙是否阻止 TFTP 端口,网络连接是否正常。
  • 开发板无法启动: 检查启动参数是否设置正确,固件是否烧写完整,硬件连接是否正常。
  • NFS 挂载失败: 检查 NFS 服务器是否启动,共享目录是否配置正确,开发板的网络配置是否正确。
  • 串口乱码: 检查串口波特率是否设置正确,串口线是否连接正常。

在 Hi3516DV500/Hi3519DV500 开发过程中,熟练掌握 Linux 系统的常用命令和工具,例如 grepfindvimtcpdump 等,可以大大提高开发效率。

另外,学会阅读海思官方的文档和 SDK 源码,可以帮助你更好地理解芯片的原理和功能。遇到问题时,善于利用搜索引擎和技术社区,可以找到很多有用的解决方案。

最后,不要害怕踩坑,每一次踩坑都是一次学习和成长的机会。祝你开发顺利!

海思 Hi3516DV500/Hi3519DV500:环境搭建与固件编译避坑指南

转载请注明出处: 加班到秃头

本文的链接地址: http://m.acea2.store/blog/555734.SHTML

本文最后 发布于2026-04-02 09:56:16,已经过了25天没有更新,若内容或图片 失效,请留言反馈

()
您可能对以下文章感兴趣
评论
  • 海王本王 6 天前
    学习了,最近也在搞海思,遇到不少坑,准备按照楼主的步骤再走一遍。
  • 太阳当空照 8 小时前
    海思的 SDK 确实坑多,文档也不够详细,感谢楼主总结的经验!避免了很多弯路。
  • 春风十里 6 天前
    海思的 SDK 确实坑多,文档也不够详细,感谢楼主总结的经验!避免了很多弯路。