3. 开发环境搭建:HiTool工具链安装、SDK编译环境配置、板端与PC通信设置
说实话,很多做ISP调试的朋友,最后卡住的往往不是算法本身,而是环境没搭好。我见过不少新人,拿到海思开发板第一周全在跟驱动和编译环境较劲。这一章,我就把那些容易踩坑的地方,一个一个给你捋清楚。
本章核心目标:让PC能编译海思SDK,让板子能跑起来,让PC和板子能互相说话。这三件事搞定,后面所有调试才有基础。
3.1 HiTool工具链安装——别小看这一步
HiTool是海思官方提供的烧录、调试一体化工具。我个人习惯,拿到新板子第一件事就是装它。为什么?因为它集成了串口、网口、USB三种烧录方式,后面调试过程中几乎天天要用。
3.1.1 安装步骤
- 获取安装包:从海思官方或供应商获取HiTool安装包,注意版本要与芯片型号匹配。比如Hi3516DV300对应HiTool 5.0以上版本。
- 运行安装程序:Windows环境下直接双击exe,建议安装路径不要带中文和空格。我习惯装到
D:\HiTool\这种纯英文路径。 - 安装驱动:安装过程中会提示安装USB转串口驱动和网络驱动。这里要注意——一定要先插板子再装驱动,否则驱动可能认不到设备。
- 验证安装:打开设备管理器,查看端口(COM和LPT)下是否有“USB Serial Port”出现。如果没有,手动更新驱动指向HiTool安装目录下的driver文件夹。
我曾经遇到过:装完HiTool死活找不到串口,折腾了两小时才发现是驱动没装对。后来我学乖了,每次装完都先跑一遍HiTool自带的“驱动检测工具”,确认所有端口都识别了再往下走。
3.1.2 工具链版本选择
海思的交叉编译工具链分两类:
| 类型 | 适用平台 | 典型版本 | 注意事项 |
|---|---|---|---|
| arm-hisiv500-linux | Hi3516A/C V300等 | gcc 4.9.4 | 较老,但稳定 |
| arm-himix100-linux | Hi3516DV300等 | gcc 6.3.0 | 支持C++11/14 |
| arm-himix200-linux | Hi3559A等 | gcc 7.3.0 | 性能优化更好 |
怎么选?看SDK包里的 toolchain 文件夹,里面一般有说明文档。我建议直接用SDK配套的版本,别自己升级——我试过一次,编译出来的程序在板子上跑出段错误,查了三天才发现是工具链版本不匹配。
3.2 SDK编译环境配置——Linux虚拟机是标配
海思SDK必须在Linux环境下编译。我个人推荐Ubuntu 16.04或18.04 LTS,这两个版本兼容性最好。如果你用Windows,装个VMware或VirtualBox跑虚拟机就行。
3.2.1 安装交叉编译工具链
以arm-himix100-linux为例,步骤很固定:
# 解压工具链
tar -xzf arm-himix100-linux.tar.gz
# 进入安装目录
cd arm-himix100-linux
# 执行安装脚本
sudo ./arm-himix100-linux.install
# 验证安装
arm-himix100-linux-gcc --version
安装脚本会自动把工具链路径加到 /etc/profile 或 /etc/bash.bashrc 里。但有个坑——安装完要重新打开终端,或者手动 source /etc/profile,否则环境变量不生效。
小技巧:安装完成后,用 which arm-himix100-linux-gcc 检查一下路径。如果返回空,说明环境变量没加载成功。我习惯在 ~/.bashrc 里手动加一行:export PATH=$PATH:/opt/hisi-linux/x86-arm/arm-himix100-linux/bin
3.2.2 编译SDK
海思SDK的编译流程,说白了就是三步:配置、编译、打包。
# 解压SDK
tar -xzf Hi3516DV300_SDK_V1.0.1.0.tgz
# 进入SDK目录
cd Hi3516DV300_SDK_V1.0.1.0
# 第一步:配置
make menuconfig
# 第二步:编译
make -j4
# 第三步:打包生成镜像
make image
这里说几个关键点:
- make menuconfig:这一步会打开图形化配置界面。你需要选择芯片型号、传感器类型、文件系统等。我第一次用的时候,忘了选传感器驱动,结果编译出来的固件在板子上跑不起来,屏幕一片黑。
- make -j4:-j后面的数字是并行编译的线程数,一般设成CPU核心数的1.5倍。我笔记本是4核8线程,用-j6最稳。
- make image:这一步会生成u-boot、kernel、rootfs等镜像文件,放在
out/目录下。
注意:编译过程中如果报错,别急着重来。先看错误信息——90%的情况是缺少依赖包。比如 ncurses-dev、zlib1g-dev、libssl-dev 这些,用 apt-get install 装上就行。我踩过最深的坑是编译到99%报错,结果只是少了个 uuid-dev。
3.3 板端与PC通信设置——让数据跑起来
环境搭好了,SDK编译通过了,接下来就是让PC和板子连上。通信方式主要有三种:串口、网口、USB。我一般这样用:
- 串口:用于uboot阶段和内核启动时的调试信息输出
- 网口:用于文件传输(tftp/nfs)和远程调试(ssh/gdb)
- USB:用于烧录固件和ADB调试
3.3.1 串口通信设置
串口是最基础的通信方式。板子上电后,所有启动信息都会从串口输出。设置方法:
- 硬件连接:用USB转串口线连接板子的调试串口(一般是UART0)和PC的USB口。
- 确认端口号:在设备管理器里查看串口号,比如COM3。
- 打开终端软件:我习惯用SecureCRT或MobaXterm。设置参数:波特率115200、数据位8、停止位1、无校验、无流控。
- 上电测试:给板子上电,如果看到uboot启动信息,说明串口通了。
我曾经遇到过:串口只输出乱码。检查了半天,发现是波特率设成了9600。海思板子的串口波特率默认是115200,别搞错了。
3.3.2 网口通信设置
网口是调试阶段最常用的通信方式。文件传输、远程登录、GDB调试都靠它。
PC端设置:
- IP地址:192.168.1.100(固定,不要用自动获取)
- 子网掩码:255.255.255.0
- 网关:192.168.1.1
板端设置(uboot下):
setenv ipaddr 192.168.1.10
setenv serverip 192.168.1.100
setenv netmask 255.255.255.0
setenv gatewayip 192.168.1.1
saveenv
验证连通性:
# 在板子上ping PC
ping 192.168.1.100
# 在PC上ping板子
ping 192.168.1.10
如果ping不通,先检查网线——我遇到过好几次,网线插上去灯不亮,换根线就好了。另外,PC的防火墙也可能拦截ICMP包,建议先关掉防火墙测试。
3.3.3 使用tftp传输文件
tftp是调试阶段最常用的文件传输方式。PC上需要装tftp服务器:
# Ubuntu下安装tftp服务器
sudo apt-get install tftpd-hpa
# 配置tftp目录
sudo mkdir /tftpboot
sudo chmod 777 /tftpboot
# 修改配置文件 /etc/default/tftpd-hpa
TFTP_DIRECTORY="/tftpboot"
TFTP_OPTIONS="-l -c -s"
# 重启服务
sudo systemctl restart tftpd-hpa
板子上使用tftp下载文件:
# 在uboot下下载内核镜像
tftp 0x82000000 uImage
# 在Linux下下载文件
tftp -g -r test.bin 192.168.1.100
小技巧:tftp传输速度慢?试试nfs。把PC上的目录挂载到板子上,传输速度能快10倍。配置方法:PC上装nfs-kernel-server,板子上用 mount -t nfs 192.168.1.100:/nfsroot /mnt -o nolock。
3.4 本章知识体系总览
下面这张图,把开发环境搭建的整个流程串起来了。你可以把它当成一张检查清单,每完成一步就打个勾。
3.5 常见问题与避坑指南
最后,我把这些年遇到的环境搭建问题整理了一下。你如果遇到类似情况,直接对照着排查:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| HiTool找不到设备 | 驱动未安装或版本不对 | 重新安装驱动,检查设备管理器 |
| 编译报错:找不到头文件 | 缺少依赖库或路径未配置 | 安装对应dev包,检查环境变量 |
| 串口输出乱码 | 波特率设置错误 | 确认波特率为115200 |
| 网口ping不通 | IP冲突或防火墙拦截 | 检查IP设置,关闭防火墙 |
| tftp传输失败 | tftp服务未启动或目录权限不对 | 重启tftp服务,检查目录权限 |
| 板子上电无输出 | 串口线接错或板子未供电 | 检查硬件连接,测量供电电压 |
我的经验:环境搭建这件事,急不得。我见过太多人一上来就想跑demo,结果卡在编译环境上浪费一整天。我的建议是——按流程一步一步来,每完成一步就验证一步。串口能输出、网口能ping通、tftp能传文件,这三个验证点过了,后面基本不会有大问题。