Sigmastar Alkaid SDK 架构介绍

1. SDK 概述

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

Alkaid SDK的架构如下图所示:

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

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

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

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

  4. 硬件层:Sigmastar平台的硬件;


2. MI 功能模块

Sigmastar平台支持音频、图像处理,显示技术等多媒体功能,为了方便用户快速开发音视频应用,MI (Middle Interface),作为用户程序和Sigmastar Stream IP 中间层,向下实现对硬件IP的访问控制,向上为用户程序提供简单易用的的API。

Pcupid 平台支持的MI 功能模块有:

ModuleFunction
MI_SYSMI 系统初始化、内存缓冲池管理、各个模块之间数据流的管理
MI_SENSOR获取摄像头接口信息、调整分辨率和帧率等功能
MI_ISP图像信号处理,HDW、3D/2D降噪、3A算法,WDR等功能
MI_VIF启用视频输入设备、视频输入通道、绑定视频输入通道等功能
MI_SCL图像数据进行crop/scaling/mirror/flip/pixel转换等功能
MI_DISP视频显示驱动,对前端输入数据进行硬件拼图,最终输出到MIPI/HDMI/LVDS/TTL
MI_IPUAI模型的IPU推演加速,允许通过channel实现多个ai模型推演
MI_VDISP组合多份图像的数据成一张全幅输出
MI_RGN对图像进行Cover、OSD、画框等操作
MI_PSPIPSPI 从sensor获取图像数据,或将图像数据通过PSPI传输到panel
MI_IVE提供图像算法API,如滤波、色彩空间转换、阈值化、形态学处理等
MI_IQSERVER图像质量调校服务,用来完成调校工具和开发板之间的数据通信
MI_GFX为画UI提供快速的图形绘制功能
MI_FB管理UI图形层,将UI叠加到视频预览路径

3. SDK目录结构

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

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

  • SDK:包含mi_sdk、sensor driver、demo app等代码;

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

  • riscv:包含运行在riscv核上的rtos系统源码,以及mounriver工程文件。

3.1. boot

目录结构和原版U-Boot一致,用户主要关注以下目录:

.
├── ....
├── cmd
│   └── sstar  //sstar提供的uboot下相关cmd,其中包含estar.c涉及系统升级
├── drivers
│   └── sstar//sstar提供的外设驱动
├── configs
│   └──pcupid_comake_pi_d1_emmc_arm64_defconfig//项目配置文件,不同型号使用不同,
|                                //具体查看alkaid defconfig里面CONFIG_UBOOT_CONFIG参数的定义。
└── ....

3.2. kernel

目录和原版kernel基本一致,用户主要关注以下目录:

.
├── ....
├── arch
│   └── arm
│        ├──boot
│        │    └──dts
│        │        └── pcupid-comake-pi-d1-dual-sensor.dts//设备树文件
│        └── configs
│             └── pcupid_comake_pi_d1_emmc_dual_sensor_defconfig/项目配置文件,不同型号使用不同,
|                            //具体查看alkaid defconfig里面CONFIG_KERNEL_CONFIG参数的定义。
│   └── arm64
│        ├──boot
│        │    └──dts
│        │        └── pcupid-comake-pi-d1-dual-sensor.dts//设备树文件
│        └── configs
│             └── pcupid_comake_pi_d1_emmc_dual_sensor_defconfig/项目配置文件,不同型号使用不同,
|                            //具体查看alkaid defconfig里面CONFIG_KERNEL_CONFIG参数的定义。
├── drivers
│   └── sstar //sstar提供的外设驱动
└── ....

3.3. sdk

MI SDK的源码实现以及APP demo

sdk
├── linux    //mi sdk中与linux相关代码,用于修改kernel源码后,重新编译mi sdk
├── verify
│     └── common    //sample_code 大部分示例APP所需要组件
│     └── prebuild_libs    //部分sample_code编译所需的第三方库文件
│     └── sample_code
│          ├──source    //各种demo例子,用户也可以在这新增自己demo
│          │    └──Makefile    //要在这里DualOS on判断下加上demo名字才会编译到
│          └──out    //编译完毕后可以在这里找到bin档案
│     └── release_feature
│          ├──source
│          │    └──dla    //ipu 板端demo
│          └──out    //编译完毕后可以在这里找到bin档案
│     └── opendla     //为用户提供在sgs平台上进行快速部署的开源模型参考示例,
│     └── sstar_ota   //为用户提供在sgs平台上进行在线远程更新的参考示例
|── driver
|     └──SensorDriver //sensor drv源码,RTOS也是使用这里的drv源码
|     └──PspiDeiver   //pspi sensor drv的驱动源码

3.4. project

.
├── board//板子相关
│   ├── pcupid
│   │   ├── boot
│   │   │   └── nor/nand/emmc
│   │   │       ├── ipl //ipl是bootloader的一部分
│   │   │       │   ├── IPL.bin
│   │   │       │   └── IPL_CUST.bin
│   │   │       └── partition//用于存放flash list文件
│   │   │           ├── flash_list.nri
│   │   │           └── flash.nri
│   │   ├── dla_file//如果chip带ipu,会有对应的ipu fw bin和model bin
│   │   ├── iqfile//IQ文件
│   │   ├── json //mi获取的外部参数json文件
│   └── uboot//公版默认uboot打包文件
├── configs
│   └── verify
│   │   └── defconfigs
│   │       └──dispcam_pcupid.spinand.glibc-10.2.1-squashfs.comake_pi_d1.1024.bga_ddr4_riscv_defconfig//project的配置文件,例如KERNEL/MMA/SENSORIQ配置等等;不同型号使用不同配置文件,此处以SSM001A-S01A-S型号为例。
├── image//所有制作image的配置文件/工具/脚本。
│   ├── build//已经编译好的部分image制作工具,例:lfs/fwfs的制作工具
│   ├── busybox//已经裁剪编译好的busybox
│   ├── configs//分区相关的配置文件,请重点关注
│   │   └── general
│   │       ├── spinand.squashfs.riscv.partition.config//nand flash的分区脚本
│   │       └── nor.squashfs.partition.config//nor flash的分区脚本,所有分区信息都在这里配置。包括上面提到的IPL选择也在这里完成。
│   ├── packaging  //镜像打包脚本
│   │   └── common
│   │       ├── customer.mk//决定打包哪些文件到customer分区(UBI)下,并且输出执行命令到脚本
│   │       ├── misc.mk//决定打包哪些文件到misc分区(FWFS)下
│   │       ├── miservice.mk//决定打包哪些文件到miservice分区(UBI)下,一般放置MI动态库和kernel的KO
│   │       ├── ramdisk.mk//决定打包哪些文件到ramdisk,决定启动脚本中执行哪些应用。ramdisk也是真正第一个挂起的rootfs
│   │       ├── rootfs_fastboot.mk//rootfs fastboot版本
│   │       └── rootfs.mk//同上都是管理roofs的打包信息,这个是第二个挂载的rootfs,实际是挂到ramdisk上。细节可看ramdisk.mk。
│   ├── image.mk//分区的制作脚本,根据分区表信息,这里会调用对应工具去制作相应的bin档,在images/目录下。
│   │             //并且生成分区表images/boot/PARTINFO.pni。
│   ├── ota.mk//如果使用sstar提供的ota工具,这里是用于制作ota bin的对应脚本。
│   ├── script.mk//用于制作分区烧录的脚本,生成在images/scripts。一般uboot进行烧录的时候,会调用该脚本,对flash进行擦除/写入。
│   ├── etc
│   │   └── init.d//系统初始化配置
│   ├── firmwarefs-fuse//fwfs linux应用
│   ├── fuse//lfs or fwfs 执行需要依赖的库
│   ├── littlefs-fuse//lfs linux应用
│   ├── makefiletools//制作rootfs的工具
│   ├── rootfs//rootfs包
│   └── systemtap//内核调试工具
├── kbuild
│   └── customize
│       └── $(KERNEL_VERSION)
│           └── pcupid
│               └── dispcam //主要关注下面的脚本,决定会从kernel copy哪些ko到project
├── release
│   ├── chip
│   │   └── pcupid//SDK对应的库文件
│   │       └── dispcam//MI SDK的主要在这里面
│   └── include//SDK头文件
├── scripts//project使用的脚本,用户无需关注
└── tools//调试工具,iqtool等

3.4 riscv(可选)

.
├── kernel
│   └── rtk
│        ├──proj //riscv rtos系统源码
├── mounriver //mounriver项目相关文件
└──

4. SDK编译流程

具体的编译流程请查看《编译环境搭建》《SDK编译打包介绍》,这里只做简单介绍:

当执行make image 时,makefile会自动编译boot、kernel、riscv(可选)、sdk 源码,并将编译输出文件拷贝到project/image下,最后制作分区表、文件系统等,打包到project/image/output/images目录。


5. SDK生成的文件

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

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

5.1. spi-nor image文件

文件描述
auto_update.txt网络升级时uboot的命令,执行scripts下的脚本
load_addr.txtuboot、kernel 的加载地址范围
boot.binIPL、uboot.bin会被打包为统一的boot.bin,用于引导系统启动
kernellinux核心,包含设备树、gpio、Gsensor等外设驱动。
rootfs.sqfslinux根文件系统,存放开机启动及系统必须的配置的文件
misc.fwfs存放开机logo图片配置等信息,uboot、kernel都可以访问
customer.jffs2存放用户根据自己需求定义的lib及app,如wifi的驱动、网络依赖库
miservice.sqfs存放mi_lib及mi相关驱动
partition_layout.txtnor flash 分区信息表

5.2. spi-nand image文件

文件描述
auto_update.txt网络升级时uboot的命令,执行scripts下的脚本
load_addr.txtuboot、kernel 的加载地址范围
OnebinnandBurnImgConfig.cfgISP_TOOL烧录SPINand的脚本
boot.binIPL、uboot.bin会被打包为统一的boot.bin,用于引导系统启动
kernellinux核心,包含设备树、gpio、Gsensor等外设驱动。
rootfs.sqfslinux根文件系统,存放开机启动及系统必须的配置的文件
misc.fwfs存放开机logo图片配置等信息,uboot、kernel都可以访问
customer.ubifs存放用户根据自己需求定义的lib及app,如wifi的驱动、网络依赖库
miservice.ubifs存放mi_lib及mi相关驱动
ubia.bin客户自定义分区
partition_layout.txtnandflash 分区信息表
riscvfwrisc-v 固件

5.3. emmc image文件

文件描述
auto_update.txt网络升级时uboot的命令,执行scripts下的脚本
load_addr.txtuboot、kernel 的加载地址范围
boot.binIPL、uboot.bin会被打包为统一的boot.bin,用于引导系统启动
kernellinux核心,包含设备树、gpio、Gsensor等外设驱动。
rootfs.ext4linux根文件系统,存放开机启动及系统必须的配置的文件
misc.fwfs存放开机logo图片配置等信息,uboot、kernel都可以访问
customer.ext4存放用户根据自己需求定义的lib及app,如wifi的驱动、网络依赖库
miservice.ext4存放mi_lib及mi相关驱动

6. 根文件系统

请参考文档:系统分区

7.  立即开始

加入Comake开发者社区

 主页地址: CoMake开发者社区

SDK下载: CoMake开发者社区

文档中心: CoMake开发者社区

马上购买 : 首页-Comake开发者社区商店

原文链接SDK架构介绍 - sigdoc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值