Sunrise camera 开发说明
Sunrise camera 系统设计
系统框图
Sunrise camera 实现了智能摄像机、智能分析盒等多种应用方案。
Sunrise camera 源码包括用户操作层的 WebPages、通信模块层、功能模块层;本文档主要介绍这三个模块的设计。
Hal 层模块包括多媒体相关模块调用接口库, BPU 模块推理库等;
Kernel 版本包含标准驱动库的基础上,系统 BSP。
软件框图如下所示:

微核设计
微核架构( microkernel architecture )又称为“插件架构”( plug-in architecture ),指的是软件的内核相对较小,主要功能和业务逻辑都通过插件实现。
内核( core )通常只包含系统运行的最小功能。插件则是互相独立的,插件之间的通信,应该减少到最低,避免出现互相依赖的问题。
架构优缺点
优点
良好的功能延伸性,需要什么功能,开发插件即可。
功能之间是隔离的,插件可以独立的加载和卸载,容易部署。
可定制性高,适应不同的开发需要。
可以渐进式开发,逐步添加功能。
缺点
扩展性差,内核通常是一个独立单元,不容易做成分布式。
开发难度相对较高,因为涉及到插件与内核的通信,以及插件登记。
Sunrise camera 架构视图
模块划分
| 模块 | 目录 | 描述 |
|---|---|---|
| 事件总线模块 | communicate | 实现模块的事件注册、事件接收、事件分发 |
| 公共库模块 | common | 公共操作函数, log/lock,线程操作,队列操作等 |
| Camera 模块 | Platform | 芯片平台相关代码,实现硬件差异部分的封装 |
| 对外交互模块 | Transport | 设备和外接交互部分, rtspserver、 websocket 等 |
| 主程序入口 | Main | Main 函数入口 |
顶层代码结构
.
├── common # 公共库模块代码
├── communicate # 事件总线模块
├── config # 编译配置目录
├── main # 主入口程序
├── Makefile # 编译脚本
├── makefile.param # 编译配置
├── Platform # Camera 模块,平台、应用场景代码,芯片 IP 相关代码都在本目录下实现
├── start_app.sh # 启动脚本
├── sunrise_camera.service # 开启自启动配置文件
├── third_party # 依赖的第三方库
├── Transport # rtspserver 和 websocket 模块代码实现
├── VERSION # 版本信息
└── WebServer # web 页面的程序和资源文件