第一章:海思平台全景概览
各位同学,咱们今天聊聊海思平台。说实话,我第一次接触海思SDK时,也被那庞大的文件结构吓了一跳。但别担心,跟着我一步步来,你会发现它其实很有章法。
1.1 海思芯片家族:Hi35xx系列
海思的芯片,说白了就是为视频监控和智能视觉而生的。我最早接触的是Hi3516A,那时候做网络摄像头,一颗芯片搞定编码和网络传输,确实省了不少事。
目前主流的几个系列,我给大家列个表:
| 芯片型号 | 核心定位 | 典型应用 |
|---|---|---|
| Hi3516EV200 | 入门级IPC | 家用摄像头、门铃 |
| Hi3516AV300 | 中高端IPC | 专业安防、智能分析 |
| Hi3559AV100 | 旗舰级 | 8K视频、多路拼接 |
| Hi3519AV100 | AI视觉 | 人脸识别、车牌识别 |
核心要点:选芯片时,别只看主频。我踩过坑——Hi3516C功耗低但编码能力有限,做双路1080P就吃力了。一定要看ISP和编码器的规格。
1.2 SDK包整体架构
海思SDK,我习惯叫它「一包走天下」。你解压后会发现,里面包含了从底层驱动到上层应用的所有东西。
它的目录结构大概是这样的:
Hi3516EV200_SDK_V1.0.0/
├── osdrv/ # 操作系统驱动
├── mpp/ # 媒体处理平台(核心)
├── sample/ # 示例代码
├── tools/ # 工具链
├── doc/ # 文档
└── scripts/ # 编译脚本
这里我要重点说说mpp目录。它是整个SDK的灵魂,包含了视频输入、编码、解码、显示等所有模块。我刚开始做项目时,总喜欢直接改sample里的代码,结果发现根本跑不通。后来才明白,得先理解mpp的调用流程。
我的经验:拿到SDK后,先别急着编译。花半天时间把doc目录下的《MPP开发指南》翻一遍,能省你后面一周的调试时间。
1.3 开发环境搭建:Ubuntu + 交叉编译链
搭建环境这事儿,说简单也简单,说坑也多。我建议用Ubuntu 18.04或20.04 LTS版本,太新的版本反而容易出兼容性问题。
具体步骤:
- 安装Ubuntu——虚拟机或双系统都行,我个人偏爱双系统,性能好一些
- 安装依赖库——比如libncurses5、lib32z1这些,少了它们编译会报错
- 配置交叉编译链——海思用的是arm-himix200-linux-gcc,记得加到PATH里
交叉编译链的配置,我给大家一个脚本参考:
# 解压交叉编译工具链
tar -xvf arm-himix200-linux.tar.bz2 -C /opt/
# 配置环境变量
export PATH=/opt/arm-himix200-linux/bin:$PATH
export CROSS_COMPILE=arm-himix200-linux-
export ARCH=arm
# 验证是否成功
arm-himix200-linux-gcc --version
注意:我曾经因为忘记设置CROSS_COMPILE变量,结果编译出来的程序在板子上跑不起来。嗯,这个坑我替你们踩过了。
1.4 第一个Hello World:验证环境
环境搭好了,咱们写个简单的程序验证一下:
#include <stdio.h>
int main() {
printf("Hello, HiSilicon!\n");
return 0;
}
编译命令:
arm-himix200-linux-gcc -o hello hello.c
把生成的hello文件拷贝到板子上,运行看看。如果打印出"Hello, HiSilicon!",恭喜你,环境没问题了。
避坑指南:我曾经在板子上运行程序时,发现printf没输出。查了半天,原来是串口终端没配置好。你想想看,程序跑起来了但看不到输出,多郁闷。所以记得检查串口波特率,一般是115200。
1.5 小结
这一章我们聊了海思芯片的选型、SDK的结构,还有开发环境的搭建。说白了,这些都是基本功。但基本功扎实了,后面做项目才能游刃有余。
下一章,咱们会深入mpp模块,看看视频采集和编码到底是怎么玩的。到时候我会分享一些实际项目中的调优经验,保证让你少走弯路。
好了,今天就到这里。有问题随时交流,咱们下章见。