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

整个架构从上到下分为应用层,软件库层,驱动层以及硬件层。
-
应用层:即用户开发的Linux 应用程序,运行在Linux用户态;
-
MI 用户接口层:MI SDK在用户态的接口,应用程序通过该层访问到MI Driver,从而操作硬件;
-
驱动层:MI 驱动的具体实现;
-
硬件层:Sigmastar平台的硬件;
2. MI 功能模块¶
Sigmastar平台支持音频、图像处理,显示技术等多媒体功能,为了方便用户快速开发音视频应用,MI (Middle Interface),作为用户程序和Sigmastar Stream IP 中间层,向下实现对硬件IP的访问控制,向上为用户程序提供简单易用的的API。
Pcupid 平台支持的MI 功能模块有:
| Module | Function |
|---|---|
| MI_SYS | MI 系统初始化、内存缓冲池管理、各个模块之间数据流的管理 |
| 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_IPU | AI模型的IPU推演加速,允许通过channel实现多个ai模型推演 |
| MI_VDISP | 组合多份图像的数据成一张全幅输出 |
| MI_RGN | 对图像进行Cover、OSD、画框等操作 |
| MI_PSPI | PSPI 从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.txt | uboot、kernel 的加载地址范围 |
| 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文件¶
| 文件 | 描述 |
|---|---|
| auto_update.txt | 网络升级时uboot的命令,执行scripts下的脚本 |
| load_addr.txt | uboot、kernel 的加载地址范围 |
| OnebinnandBurnImgConfig.cfg | ISP_TOOL烧录SPINand的脚本 |
| 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 分区信息表 |
| riscvfw | risc-v 固件 |
5.3. emmc image文件¶
| 文件 | 描述 |
|---|---|
| auto_update.txt | 网络升级时uboot的命令,执行scripts下的脚本 |
| load_addr.txt | uboot、kernel 的加载地址范围 |
| 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相关驱动 |
6. 根文件系统¶
请参考文档:系统分区