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 输出信号的单元 |
| VDEC | Video Decoder | H264/H265 等视频码流解码,提供解码通道管理、码流输入以及输出图像裁剪/缩放等功能 |
| VENC | Video Encoder | H264/H265/MotionJpeg编码器 |
| JPD | JPEG Decoder | JPEG 解码模块,提供解码通道创建、码流输入及解码控制等功能 |
| AI | Audio Input Interface | audio input采集单元 |
| AO | Audio Output Interface | 音频输出 |
| RGN | Region | 区域管理模块,对SCL数据进行遮挡或叠加 |
| IVE | Intelligent Video Engine | 提供图形智能识别算法中的基本算子支援 |
| VDF | Video Detection Framework | 整合各个视频算法识别库的中间件架构,包括MD/OD/VG |
| IPU | Intelligent Process Unit | 智能处理器,模块实现了AI 模型的推演功能加速 |
| IPU_CASCADE | IPU Cascade | 面向多 IPU 并行级联推演大模型的接口,用于在本地/远端 IPU 板卡上协同加速 LLM 等离线级联模型推理 |
| GFX | Graphic Engine | 图形引擎模块,提供矩形/直线绘制、位图搬移、缩放、旋转、镜像、格式转换、Alpha 混合及 Color Key 等图形处理功能 |
| FB | Framebuffer | 基于 Linux Framebuffer 的图形层驱动,负责图形层缓冲区管理及与视频路径的叠加显示 |
模块间依赖关系可在kernel下通过lsmod命令查看。
mi_venc、mi_scl依赖mi_rgn。
mi_ai、mi_ao依赖mi_aio。
mi_debug、mi_venc、mi_vdf、mi_ao、mi_ai、mi_ive、mi_scl、mi_rgn、mi_ipu依赖mi_sys。
mi_sys、mi_debug、mi_venc、mi_vdf、mi_ao、mi_ai、mi_ive、mi_scl、mi_rgn、mi_ipu、mi_jpd、mi_fb、mi_gfx依赖mi_common。
mi_vdec依赖mi_sys、mi_common。
IPU_CASCADE 接口基于 MI_IPU 模块实现级联能力,实际使用时需要同时加载 mi_ipu 及其依赖的基础模块。
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 # project 根目录
export KDIR=/home/xxx/kernel # kernel 根目录
其中 PROJ_DIR 一般为 project 工程所在路径,KDIR 为 kernel 源码所在路径。
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打包相关配置 - 配置分区布局、文件系统等打包选项
- 客户功能配置 - 配置 MI debug、电源管理等功能选项
- DRAM_LAYOUT配置 - 调整各个运行时模块的内存大小和布局
- 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. 启动流程¶
请参考文档:启动流程