跳转至

SDK阅读指南


1. SDK概述

Alkaid SDK是基于Linux内核的软件开发包,其中包含bootloader、kernel、rootfs以及MI多媒体模块,用户可以通过makefile 配置并编译出一个可以在Sgs平台运行的软件。

Alkaid SDK的架构如下图所示:

整个架构从上到下分为应用层,软件库层,驱动层以及硬件层。

  1. 应用层:即用户开发的Linux 应用程序,运行在Linux用户态;

  2. MI 用户接口层:MI SDK在用户态的接口,应用程序通过该层访问到MI Driver,从而操作硬件;

  3. 驱动层:MI 驱动的具体实现;

  4. 硬件层: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. 配置流程

  1. 执行 make menuconfig 启动配置界面
  2. 根据需求选择相应的配置选项
  3. 保存配置并退出
  4. 执行 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. 启动流程

请参考文档:启动流程