SDK阅读指南¶
1. SDK概述¶
Alkaid SDK是基于Linux内核的软件开发包,其中包含bootloader、kernel、rootfs以及MI多媒体模块,用户可以通过makefile 配置并编译出一个可以在Sgs平台运行的软件。
Alkaid SDK的架构如下图所示:

整个架构从上到下分为应用层,软件库层,驱动层以及硬件层。
-
应用层:即用户开发的Linux 应用程序,运行在Linux用户态;
-
MI 用户接口层:MI SDK在用户态的接口,应用程序通过该层访问到MI Driver,从而操作硬件;
-
驱动层:MI 驱动的具体实现;
-
硬件层:Sgs平台的硬件;
2. 模块介绍¶
| 简称 | 全称 | 职责 |
|---|---|---|
| SYS | System | 实现MI系统初始化、内存管理、各个模块之间数据流的管理 |
| SCL | Scaler | 缩放/裁剪/格式转换等功能 |
| VDISP | Virtual Display | 软件拼图 |
| DISP | Display Engine | DISP对VDEC/SCL 处理单元输出的图像做硬件拼图,并连同AO输出音频信号一起编码成HDMI/VGA/CVBS 输出信号的单元 |
| VENC | Video Encoder | H264/H265/MotionJpeg编码器 |
| AI | Audio Input Interface | audio input采集单元 |
| AO | Audio Output Interface | 音频输出 |
| FB | FrameBuffer | UI显示 |
| SENSOR | Sensor | 获取摄像头接口信息、调整分辨率和帧率等功能 |
| VIF | VIDEO Input Interface | MIPI/BT656/BT1120信号采集单元 |
| ISP | Image Signal Processing | 实现 HDR,3D/2D 降噪,3A 算法,WDR 等相关功能 |
| RGN | Region | 区域管理模块,对SCL数据进行遮挡或叠加 |
| IVE | Intelligent Video Engine | 提供图形智能识别算法中的基本算子支援 |
| VDF | Video Detection Framework | 整合各个视频算法识别库的中间件架构,包括MD/OD/VG |
| IPU | Intelligent Process Unit | 智能处理器,模块实现了AI 模型的推演功能加速 |
| CIPHER | Cipher | 提供数据的加解密功能,包括 AES\RSA\SHA 加解密算法 |
模块间依赖关系可在kernel下通过lsmod命令查看。
mi_venc、mi_scl依赖mi_rgn。
mi_isp依赖mi_vif。
mi_ai、mi_ao依赖mi_aio。
mi_isp、mi_vif依赖mi_sensor。
mi_debug、mi_venc、mi_vdf、mi_ao、mi_ai、mi_ive、mi_scl、mi_rgn、mi_isp、mi_ipu、mi_vif、mi_dummy、mi_sensor依赖mi_sys。
mi_sys、mi_debug、mi_venc、mi_vdf、mi_ao、mi_ai、mi_ive、mi_scl、mi_rgn、mi_isp、mi_ipu、mi_vif、mi_dummy、mi_sensor依赖mi_common。
3. SDK目录结构¶
3.1. SDK目录结构详解¶
具体内容请参考:SDK目录结构详解
3.2. sdk与kernel解耦说明¶
sdk与kernel不可避免的会有一些耦合,导致客户自行配置和裁剪Kernel时,需要依赖Sgs重新release sdk ko;
为此将sdk部分需要依赖kernel源码的source code,开源到sdk/linux目录,客户在自行配置和裁剪Kernel时,可以自行重新编译sdk ko。
修改kernel后,重新编译ko方式,注意先配置工具链环境变量:
完整编译:
cd project
make clean ;make image -j32
快速编译:
1、配置以下必要路径
export PROJ_DIR=/home/xxx/project
export KDIR=/home/xxx/kernel
export SENSOR_DRIVER_DIR=/home/xxx/sdk/driver/SensorDriver/
这里的PROJ_DIR即project_xxx.tar.gz解压后的目录
这里的KDIR即kernel_xxx.tar.gz解压后的目录
这里的SENSOR_DRIVER_DIR即sdk_xxx.tar.gz解压后的目录下的sdk/driver/SensorDriver目录
2、编译 & 打包
cd sdk/linux
make clean ;make all -j32
make install -j32
cd ../../project
make image-fast -j32
3、编译单个mi_xxx.ko
以mi_ai.ko为例
cd sdk/linux
make ai -j32
4、make all时忽略编译某些模块
编译之前设置变量FILTER_OUT_MODULES
如因某些原因不能或者不想编译mi_shadow.ko,可以设置:
export FILTER_OUT_MODULES=shadow
如想忽略多个,用空格隔开:
export FILTER_OUT_MODULES=shadow ipu
4. menuconfig 配置系统¶
menuconfig 是一个图形化的配置界面,提供了全面的 SDK 配置选项。通过 make menuconfig 命令可以启动该配置界面。
4.1. 主要配置类别¶
menuconfig 主要包含以下配置类别:
- 芯片型号系列名称 - 配置具体的芯片系列型号
- 产品形态 - 选择 ipc、usbcam、nvr、dispcam 等不同产品形态
- 开发板 - 配置开发板型号和名称相关软硬件配置
- 工具链配置 - 设置编译工具链、架构和版本信息
- Uboot配置 - 配置 Uboot 的构建参数和二进制文件
- Linux kernel配置 - 设置内核版本和配置文件
- Image打包相关配置 - 配置分区布局、文件系统等打包选项
- Sensor摄像头传感器配置 - 配置 IQ 文件和传感器驱动列表
- 客户功能配置 - 配置 MI debug、电源管理等功能选项
- DRAM_LAYOUT配置 - 调整各个运行时模块的内存大小和布局
- RTOS配置 - 配置双系统和 RTOS 相关选项
- Sdk 配置 - 配置 SDK 中各个模块的编译选项
4.2. 配置流程¶
- 执行
make menuconfig启动配置界面 - 根据需求选择相应的配置选项
- 保存配置并退出
- 执行
make image -j32进行编译
详细配置说明请参考:alkaid_defconfig 配置说明
5. 内存管理¶
5.1. 内存分配方式¶
详细说明请参考:Memory_layout
6. 基本概念¶
-
数据流:各个MI Module 可以看成是一个纯数据处理单元,数据流推送由MI SYS内部统一调度。输入数据流表示该数据单元的input数据,输出数据流表示该处理单元处理过的output数据。
-
控制流:APP 对各个MI Module 数据处理过程进行参数控制的过程,比如设置MI_VDEC解码参数,启动停止MI_VDEC 通道,设置MI_VDEC通道输出端口之分辨率及format等
-
Channel(通道)
对于需要处理或者输出stream的MI模组,一个channel代表该MI 模组处理或者输出一路stream的分时复用的上下文(context)及相关控制流设定
对于可分时复用之模组如MI_VDEC, MI_DIVP, MI_DISP,可支援多个channel
-
Port(端口)
Port分为2种,input port和output port。input port为channel输入数据流的位置,而output port则是channel输出数据流的位置。
一个channel可以有多个input port及多个output port.
7. 根文件系统¶
请参考文档:系统分区
8. 启动流程¶
请参考文档:启动流程