SSU_SDK架构


1. SDK概述

SSU pure linux SDK是基于xxx 版本的软件开发包,其中包含bootloader、kernel、project及sdk各部分代码,与大部分主流linux SDK开发包相同,用户可以 通过makeflie及相关config配置编译出一个完成可以直接烧写到机器上运行的系统文件。

image.png

其中SDK从上至下分为App应用层(user mode),lib层,kernel层(kernel mode), 同时为了方便客户使用及调试,sigmastar将与芯片相关的驱动、逻辑及功能抽象出来独立分装为mi_sdk,对应如下:

  1. mi_api: 提供对应函数功能接口方便用户app调用实现功能.

  2. mi_implement: 提供用户层与kernel调用接口,减少kernel与user mode之间来回调用,提高运行效率。

  3. mhal: 硬件抽象层,剥离底层硬件驱动与上层功能之间的耦合。

  4. driver: 具体hw驱动及控制.


2. MI功能模块

MI_SDK是由多个mi功能模块组成,客户可以通过上层app调用mi_api来使用mi各模块的功能,也可以根据实际功能需求来配置和调用不同的MI模块:

Module Fuction
MI_SYS 实现 MI 系统初始化、内存缓冲池管理、各个模块之间数据流的管理
MI_ISP 实现图像信号处理,HDW、3D/2D降噪、3A算法,WDR等功能
MI_VIF 实现启用视频输入设备、视频输入通道、绑定视频输入通道等功能
MI_SCL 实现图像数据进行crop/scaling/mirror/flip/pixel转换等功能
MI_VENC 实现图像数据H.264/265/jpeg编码
MI_VDEC 实现图像数据H.264/265/jpeg解码
MI_DISP 实现视频显示驱动,对前端输入数据进行硬件拼图,最终输出到MIPI/HDMI/LVDS/TTL
MI_IPU 实现AI模型的IPU推演加速,允许通过channel实现多个ai模型推演
MI_AI 实现AMIC/DMIC/I2s等多种信号的音频数据采集
MI_AO 实现音频数据播放,以及功放控制
MI_VDISP 实现软件图像数据拼接

3. SDK目录结构

  1. boot:uboot相关启动代码,支持系统升级、支持多种升级方式(目前支持sd卡升级、网络升级、usb升级等多种方法)及开机启动画面等功能

  2. kernel:linux相关环境设置、设备树、网卡、触摸屏、usb、sdmmc、Gsensor等多种外设驱动

  3. SDK:包含mi_sdk、drm、sensordriver、demo app等代码。

  4. project: 包含整个工程所用环境变量、配置信息、其他目录下生成需要打包烧录到机器上的驱动、库等文件以及最终烧录到机器上所需要的相关文件。


4. SDK编译流程

SSU purelinux SDK 在project下编译时会默认编译并自动复制boot、kernel及sdk-sensordirver下的内容到project目录下,无需单独手动release。

具体编译流程可以参考文档ssu938x环境搭建指南

Project config举例:

Chip Packaging Memory Flash Type Toolchain Other Defconfig
SSU9383 BGA16 ext-mem SPI-NOR glibc 不带wifi dispcam_p5.nor.glibc-6.4.0-squashfs.028A.512bga_demo.defconfig
SSU9383 BGA16 ext-mem SPI-Nand glibc sdio-wifi dispcam_p5.spinand.glibc-6.4.0-squashfs.028A.512bga_demo.defconfig
SSU9383 BGA16 ext-mem EMMC glibc 不带wifi dispcam_p5.emmc.glibc-6.4.0-ext4fs.028A.512bga_demo_defconfig

5. SDK生成文件

SDK会根据用户选择的配置(nandflash、norflash或者emmc)生成不同的烧录文件及烧录脚本,并将对应文件放在project\image\output\images目录下

注意: 编译之前一定要确认toolchain路径要设置正确。

  • spi-nor

    glibc:

    1. 选取合适config

      cd project
      #make dispcam_p5.nor.glibc-6.4.0-squashfs.028A.512bga_demo.defconfig
      
    2. clean并编译

      #make clean;make image -j8
      
  • spi-nand

    glibc:

    1. 选取合适config

      cd project
      #make dispcam_p5.spinand.glibc-6.4.0-squashfs.028A.512bga_demo.defconfig
      
    2. clean并编译

      #make clean;make image -j8
      
  • emmc

    glibc:

    1. 选取合适config

      cd project
      #make dispcam_p5.emmc.glibc-6.4.0-ext4fs.028A.512bga_demo_defconfig
      
    2. clean并编译

      #make clean;make image -j8
      

5.1. spi-nor image文件

file memo
boot.bin IPL、uboot.bin会被打包为统一的boot.bin,用于引导系统启动
kernel linux核心,包含设备树、gpio、Gsensor等外设驱动。
rootfs.sqfs linux根文件系统,需要开机启动及系统必须且不修改的配置存在这个文件中
misc.fwfs 存放开机logo图片配置等信息,uboot、kernel都可以访问
customer.jffs2 存放用户根据自己需求定义的lib及app,如wifi的驱动、网络依赖库
miservice.sqfs 存放mi_lib及mi相关驱动
partition_layout.txt nor flash 分区信息表

5.2. spi-nand image文件

file memo
boot.bin IPL、uboot.bin会被打包为统一的boot.bin,用于引导系统启动
kernel linux核心,包含设备树、gpio、Gsensor等外设驱动。
rootfs.sqfs linux根文件系统,需要开机启动及系统必须且不修改的配置存在这个文件中
misc.fwfs 存放开机logo图片配置等信息,uboot、kernel都可以访问
customer.ubifs 存放用户根据自己需求定义的lib及app,如wifi的驱动、网络依赖库
miservice.ubifs 存放mi_lib及mi相关驱动
ubia.bin 客户自定义分区
partition_layout.txt nandflash 分区信息表

5.3. emmc image文件

file memo
boot.bin IPL、uboot.bin会被打包为统一的boot.bin,用于引导系统启动
kernel linux核心,包含设备树、gpio、Gsensor等外设驱动。
rootfs.ext4 linux根文件系统,需要开机启动及系统必须且不修改的配置存在这个文件中
misc.fwfs 存放开机logo图片配置等信息,uboot、kernel都可以访问
customer.ext4 存放用户根据自己需求定义的lib及app,如wifi的驱动、网络依赖库
miservice.ext4 存放mi_lib及mi相关驱动