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. 根文件系统¶
请参考文档:系统分区
7. 立即开始
加入Comake开发者社区
主页地址: CoMake开发者社区
SDK下载: CoMake开发者社区
文档中心: CoMake开发者社区
马上购买 : 首页-Comake开发者社区商店
原文链接:SDK架构介绍 - sigdoc