K230 SDK使用说明#

cover

版权所有©2023北京嘉楠捷思信息技术有限公司

免责声明#

您购买的产品、服务或特性等应受北京嘉楠捷思信息技术有限公司(“本公司”,下同)及其关联公司的商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,本公司不对本文档的任何陈述、信息、内容的正确性、可靠性、完整性、适销性、符合特定目的和不侵权提供任何明示或默示的声明或保证。除非另有约定,本文档仅作为使用指导参考。

由于产品版本升级或其他原因,本文档内容将可能在未经任何通知的情况下,不定期进行更新或修改。

商标声明#

logo、“嘉楠”和其他嘉楠商标均为北京嘉楠捷思信息技术有限公司及其关联公司的商标。本文档可能提及的其他所有商标或注册商标,由各自的所有人拥有。

版权所有 © 2023北京嘉楠捷思信息技术有限公司。保留一切权利。 非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。

目录#

[TOC]

前言#

概述#

本文档主要介绍K230 SDK 的安装和使用。

读者对象#

本文档(本指南)主要适用于以下人员:

  • 技术支持工程师

  • 软件开发工程师

缩略词定义#

简称

说明

修订记录#

文档版本号

修改说明

修改者

日期

V1.0

初版

杨光

2023-03-10

V1.1

新增安全镜像及emmc烧录说明

王建新

2023-04-07

V1.2

新增spinor镜像烧录说明

王建新

2023-05-05

V1.3

快起和安全镜像说明

王建新

2023-05-29

V1.4

大核自启动程序说明

郝海波

2023-06-1

v1.5

usip lp4

王建新

2023-06-12

V1.6

修改大核自启动程序说明

赵忠祥

2023-06-28

v1.7

增加启动介质分区章节,镜像烧录章节调整

王建新

2023-07-05

v1.8

增加CanMV-K230主板信息

陈海斌

2023-10-11

1. 概述#

1.1 SDK软件架构概述#

K230 SDK 是面向K230 开发板的软件开发包,包含了基于Linux&RT-smart 双核异构系统开发需要用到的源代码,工具链和其他相关资源。

K230 SDK 软件架构层次如图 1-1 所示:

logo

图1-1 K230 SDK 软件架构图

2. 开发环境搭建#

2.1 支持的硬件#

K230平台支持的硬件信息文档可以参考目录:00_hardware , 其中不同主板的硬件信息文档目录如下:

主板类型

主板硬件参考目录

K230-USIP-LP3-EVB

具体硬件信息参考: 00_hardware/K230_LP3

K230-USIP-LP4-EVB

具体硬件信息参考: 00_hardware/K230_LP4

K230-SIP-LP3-EVB

具体硬件信息参考: 00_hardware/K230D

CanMV-K230

具体硬件信息参考: 00_hardware

2.2 开发环境搭建#

2.2.1 编译环境#

主机环境

描述

Docker编译环境

SDK提供了dockerfile,可以生成docker镜像,用于编译SDK

Ubuntu 20.04.4 LTS (x86_64)

SDK可以在ubuntu 20.04环境下编译

K230 SDK需要在linux环境下编译,SDK支持docker环境编译,SDK开发包中发布了docker file(tools/docker/Dockerfile),可以生成docker镜像。具体dockerfile使用和编译步骤,详见4.3.1章节。

SDK使用的Docker 镜像以ubuntu 20.04 为基础,如果不使用docker编译环境,可以在ubuntu 20.04 主机环境下参考dockerfile的内容,安装相关HOST package和工具链后,编译SDK。

K230 SDK没有在其他Linux版本的主机环境下验证过,不保证SDK可以在其他环境下编译通过。

2.2.2 SDK开发包#

K230 SDK以压缩包的形式发布,或者自己使用git clone https://github.com/kendryte/k230_sdk命令下载。

2.3 单板准备#

本章节以K230-USIP-LP3-EVB和CanMV-K230 主板使用为例

2.3.1 CanMV-K230#

请准备如下硬件:

  • CanMV-K230

  • TypeC USB线 至少1根

  • 网线一根(可选)

  • HDMI线一根

  • SD卡

  • 支持HDMI的显示器

说明:CanMV-K230主板电源和串口共用一个TypeC口,如下图:

图形用户界面, 文本, 应用程序 描述已自动生成

2.3.2 K230-USIP-LP3-EVB#

请准备如下硬件:

  • K230-USIP-LP3-EVB

  • Typec USB线 至少2根

  • TypeC USB 转以太网转换器(可选)

  • 网线一根(可选)

  • SD卡(可选)

说明:TypeC USB 转以太网推荐型号是 https://item.jd.com/5326738.html

参考《K230 DEMO BOARD 资源使用说明》准备开发板。

2.3.3 串口#

K230 主板通过USB提供两路调试串口,windows下使用调试串口,需要安装USB转串口驱动程序,驱动下载链接如下:

https://ftdichip.com/wp-content/uploads/2021/11/CDM-v2.12.36.4.U-WHQL-Certified.zip

安装了驱动后,板子上电,PC使用type C数据线连接主板的调试串口后,可以发现两个USB串口设备,如下图所示:

图形用户界面, 文本, 应用程序 描述已自动生成

图2-1 USB串口设备

以上图为例,COM47为小核的调试串口,COM48为大核的调试串口。

串口波特率设置: 115200 8N1

3. SDK 安装准备工作#

3.1 安装SDK#

K230 SDK开发包采用压缩包的方式发布,在linux环境下使用。

3.2 SDK 目录结构#

K230 SDK目录结构如下图所示:

k230_sdk
├── configs
│   ├── k230_evb_defconfig
│   └── k230_evb_usiplpddr4_defconfig
│   └── k230d_defconfig
├── Kconfig
├── LICENSE
├── Makefile
├── parse.mak
├── README.md
├── repo.mak
├── src
│   ├── big
│      ├── mpp
│      ├── rt-smart
│      └── unittest
│   ├── common
│      ├── cdk
│      └── opensbi
│   ├── little
│      ├── buildroot-ext
│      ├── linux
│      └── uboot
│   └── reference
│       ├── ai_poc
│       ├── business_poc
│       └── fancy_poc
├── board
│   ├── common
│      ├── env
│      └── gen_image_cfg
│      ├── gen_image_script
│      └── post_copy_rootfs
│   ├── k230_evb_doorlock
│   └── k230_evb_peephole_device
└── tools
    ├── docker
       └── Dockerfile
    ├── doxygen
    ├── firmware_gen.py
    └── get_download_url.sh

各个目录用途描述如下:

  • configs: 存放SDK的板级默认配置,主要包含如下信息:参考板类型,toolchain路径,

    内存布局规划,存储规划配置等

  • src:源代码目录,分为 大核代码(big),公共组件(common),小核代码(little)三个目录。

    大核代码包含:rt-smart操作系统代码,mpp代码,unittest代码

    公共组件包含:cdk代码和opensbi代码

    小核代码包含:linux内核代码,buildroot代码,uboot代码

  • tools:存放各种工具,脚本等。例如kconfigdoxygendockerfile

  • board:环境变量、镜像配置文件、文件系统等

4. SDK 编译#

4.1 SDK 编译介绍#

K230 SDK支持一键编译大小核操作系统和公共组件,生成可以烧写的镜像文件,用于部署到开发板启动运行。设备上linux系统的用户名是root无密码;

4.2 SDK 配置#

K230 SDK采用Kconfig作为SDK配置接口,默认支持的板级配置放在configs目录下。

4.2.1 配置文件说明#

k230_evb_defconfig :基于K230 USIP LP3 EVB的默认SDK配置文件 k230_evb_usiplpddr4_defconfig :基于K230 USIP LP4 EVB的默认SDK配置文件 k230d_defconfig :基于K230-SIP-LP3-EVB的默认SDK配置文件 k230_evb_nand_defconfig :基于K230 USIP LP3 EVB会生成nand镜像的默认SDK配置文件 k230_canmv_defconfig :基于CanMV-K230的默认SDK配置文件 k230_evb_doorlock_defconfig :基于K230 USIP LP3 EVB的门锁poc默认SDK配置文件 k230_evb_peephole_device_defconfig :基于K230 USIP LP3 EVB的猫眼POC k230d_doorlock_defconfig :基于K230-SIP-LP3-EVB的门锁POC

4.3 编译 SDK#

4.3.1 编译步骤#

说明:本章节命令仅供参考,文件名请根据实际情况进行替换。 Setp 1:下载代码

git clone https://github.com/kendryte/k230_sdk

Step 2:进入SDK根目录

cd k230_sdk

Step 3:下载toolchain

source tools/get_download_url.sh && make prepare_sourcecode

make prepare_sourcecode will download both Linux and RT-Smart toolchain, buildroot package and AI package from Microsoft Azure cloud server with CDN, the download cost time may based on your network connection speed.

Step 4:生成docker镜像(第一次编译需要,已经生成docker镜像后跳过此步骤)

docker build -f tools/docker/Dockerfile -t k230_docker tools/docker

Step 5: 进入docker环境,

docker run -u root -it -v $(pwd):$(pwd) -v $(pwd)/toolchain:/opt/toolchain -w $(pwd) k230_docker /bin/bash

Step 6: Docker环境下执行下面命令进行编译SDK

make CONF=k230_evb_defconfig  #编译K230-USIP-LP3-EVB板子镜像
#make CONF=k230_evb_usiplpddr4_defconfig  #编译K230-USIP-LP4-EVB板子镜像
#make CONF=k230d_defconfig  #编译K230-SIP-LP3-EVB板子镜像
#make CONF=k230_evb_nand_defconfig  #编译K230-USIP-LP3-EVB板子nand镜像
  • 编译K230-USIP-LP4-EVB板子镜像使用make CONF=k230_evb_usiplpddr4_defconfig命令

  • 编译K230-USIP-LP3-EVB板子镜像使用make CONF=k230_evb_defconfig 命令。

  • 编译K230-SIP-LP3-EVB板子镜像使用make CONF=k230d_defconfig 命令。

  • 编译K230-USIP-LP3-EVB板子的nand镜像使用 make CONF=k230_evb_nand_defconfig 命令

  • 编译CanMV-K230板子的镜像使用 make CONF=k230_canmv_defconfig 命令

备注: sdk不支持多进程编译,不要增加类似-j32多进程编译参数。

4.3.2 编译输出产物#

编译完成后,在output/xx_defconfig/images目录下可以看到编译输出产物。ls

文本 描述已自动生成

图4-1 编译产物

images目录下镜像文件说明如下:

sysimage-sdcard.img ————-是sd和emmc的非安全启动镜像;

sysimage-sdcard.img.gz ——–是SD和emmc的非安全启动镜像压缩包(sysimage-sdcard.img文件的gzip压缩包),烧录时需要先解压缩。

sysimage-sdcard_aes.img.gz是SD和emmc的aes安全启动镜像压缩包,烧录时需要先解压缩。

sysimage-sdcard_sm.img.gz是SD和emmc的sm安全启动镜像压缩包,烧录时需要先解压缩。

安全镜像默认不会产生,如果需要安全镜像请参考4.3.4使能安全镜像。

大核系统的编译产物放在images/big-core目录下。

小核系统的编译产物放在images/little-core目录下。

4.3.3 非快起镜像#

sdk默认编译的是快起镜像(uboot直接启动系统,不会进入uboot命令行),如果需要进入uboot命令行,请参考下面取消CONFIG_QUICK_BOOT配置:

在sdk主目录 执行 make menuconfig ,选择board configuration,取消quick boot 配置选项。

非快起系统变快起系统方法:进入uboot命行执行setenv quick_boot true;saveenv;

4.3.4 安全镜像#

sdk默认不产生安全镜像,如果需要安全镜像,请参考下面增加CONFIG_GEN_SECURITY_IMG配置:

在sdk主目录 执行make menuconfig ,选择board configuration,配上create security image 选项。

4.3.5 debug镜像#

sdk默认产生release镜像,如果需要调试镜像,请参考下面增加CONFIG_BUILD_DEBUG_VER配置:

在sdk主目录 执行make menuconfig ,选择build debug/release version,配上debug 选项。

5. SDK 镜像烧写#

根据不同主板的硬件特性和软件需求,请选择支持的镜像烧写方式。

CanMV-K230主板仅支持sd卡镜像启动。

5.1 sd卡镜像烧录#

5.1.1 ubuntu下烧录#

在sd卡插到宿主机之前,输入:

ls -l /dev/sd\*

查看当前的存储设备。

将sd卡插入宿主机后,再次输入:

ls -l /dev/sd\*

查看此时的存储设备,新增加的就是 sd 卡设备节点。

假设/dev/sdc 就是 sd卡设备节点,执行如下命令烧录SD卡:

sudo dd if=sysimage-sdcard.img of=/dev/sdc bs=1M oflag=sync

说明:sysimage-sdcard.img可以是images目录下的sysimage-sdcard.img文件,或者sysimage-sdcard_aes.img.gzsysimage-sdcard.img.gzsysimage-sdcard_sm.img.gz文件解压缩后的文件。

5.1.2 Windows下烧录#

Windows下可通过rufus工具对TF卡进行烧录(rufus工具下载地址 http://rufus.ie/downloads/)。

1)将TF卡插入PC,然后启动rufus工具,点击工具界面的”选择”按钮,选择待烧写的固件。

rufus-flash-from-file

2)点击“开始”按钮开始烧写,烧写过程有进度条展示,烧写结束后会提示“准备就绪”。

rufus-flash rufus-sure rufus-warning rufus-finish

5.2 Emmc镜像烧写参考#

5.2.1 Linux下烧写emm参考#

1)把镜像的压缩包下载到sd卡

从sd卡启动linux,在linux下可以参考如下命令把镜像的压缩包下载到sd卡

ifconfig eth0 up;udhcpc;mount /dev/mmcblk1p4 /mnt;cd /mnt/;

scp wangjianxin@10.10.1.94:/home/wangjianxin/k230_sdk/output/k230_evb_defconfig/images/sysimage-sdcard.img.gz  .

2)把压缩包解压缩到emmc

gunzip sysimage-sdcard.img.gz -c >/dev/mmcblk0

3)切成emmc启动,重启板子

5.2.1 Uboot下烧写emmc参考#

1)把ssysimage-sdcard.img.gz镜像下载到内存。

usb start; dhcp;  tftp 0x900000010.10.1.94:wjx/sysimage-sdcard.img.gz;
 #注意:需要根据内存大小替换下0x9000000,比如内存只有128M的话,可以替换为0x2400000 

2)把镜像写到emmc

gzwrite mmc  0   0x${fileaddr}  0x${filesize};

3)重启板子

5.3 Spinor镜像烧写参考#

5.3.1 Uboot下烧写参考#

1)把sysimage-spinor32m.img镜像下载到内存。

`usb start; dhcp; tftp 0x9000000 10.10.1.94:wjx/sysimage-spinor32m.img; #注意:需要根据内存大小替换下0x9000000,比如内存只有128M的话,可以替换为0x2400000

2)把镜像写到spi nor flash

sf probe 0:0;sf erase 0 0x2000000;sf write 0x$fileaddr 0 0x$filesize; sf remove;

3)重启板子

5.3.2 linux烧写spinor#

1)把spinor镜像sysimage-spinor32m.img下载到sd卡

从sd卡启动linux,在linux下可以参考如下命令把镜像到sd卡

ifconfig eth0 up; udhcpc; mount /dev/mmcblk1p4 /mnt;cd /mnt/;
scp wangjianxin@10.10.1.94:/home/wangjianxin/k230_sdk/output/k230_evb_defconfig/images/sysimage-spinor32m.img  .

2)参考下面命令把镜像写入spi nor flash

[root@canaan /mnt ]#flashcp -v sysimage-spinor32m.img  /dev/mtd9
Erasing blocks: 508/508 (100%)
Writing data: 32512k/32512k (100%)
Verifying data: 32512k/32512k (100%)
[root@canaan /mnt ]#

3)切成spi nor启动,重启板子

5.3.3 Spinor镜像说明#

由于spinor flash比较小, linux删掉了ko、rtt删掉了部分demo程序。

5.4. Spinand镜像烧写参考#

5.4.1 Uboot下烧写参考#

1)把sysimage-spinand32m.img镜像下载到内存。

usb start; dhcp;  tftp 0x9000000 10.10.1.94:wjx/sysimage-spinand32m.img;

2)把镜像写到spi nand flash

mtd erase spi-nand0 0 0x2000000;mtd write spi-nand0 0x$fileaddr  0 0x$filesize;

3)重启板子

6. sdk启动介质分区及修改#

6.1 spi nor#

6.1.1 spi nor默认分区#

image-spi_nor_default_part

spinor分区

内容

开始地址

大小

大小MB

大小

一级uboot

0x0

512KB

0.5

512KB

二级uboot

0x80000

0x160000

1.375

1.375MB

uboot环境变量

0x1e0000

128KB

0.125

128KB

快起参数

0x200000

512KB

0.5

512KB

人脸特性

0x280000

512kB

0.5

512kB

标定参数

0x300000

256KB

0.25

256KB

ai模型

0x340000

3MB

3

3MB

散斑

0x640000

2MB

2

2MB

rtt

0x840000

0x1c0000

1.75

1.75MB

rtapp

0xa00000

0x5c0000

5.75

3.75MB

linux

0xfc0000

0x700000

7

7MB

rootfs

0x16c0000

0xb00000

13

13MB

6.1.2 分区修改及实现说明#

在sdk主目录执行 make menuconfig —>storage configurations—>spi nor partion config 进行分区修改(界面如下);修改完后执行下make build-image;

image-image-menuconfig_spi_nor_part

通过menuconfig修改分区详细实现说明:

make menuconfig配置完后会生成.config(部分内容如下)

CONFIG_SPI_NOR_SENSOR_CFG_CFG_BASE=0x300000
CONFIG_SPI_NOR_SENSOR_CFG_CFG_SIZE=0x40000
CONFIG_SPI_NOR_AI_MODE_CFG_BASE=0x340000
CONFIG_SPI_NOR_AI_MODE_CFG_SIZE=0x300000
CONFIG_SPI_NOR_SPECKLE_CFG_BASE=0x640000
CONFIG_SPI_NOR_SPECKLE_CFG_SIZE=0x200000
CONFIG_SPI_NOR_RTTK_BASE=0x840000
CONFIG_SPI_NOR_RTTK_SIZE=0x1c0000
CONFIG_SPI_NOR_RTT_APP_BASE=0xa00000
CONFIG_SPI_NOR_RTT_APP_SIZE=0x5c0000
CONFIG_SPI_NOR_LK_BASE=0xfc0000
CONFIG_SPI_NOR_LK_SIZE=0x700000
CONFIG_SPI_NOR_LR_BASE=0x16c0000
CONFIG_SPI_NOR_LR_SIZE=0x900000

tools/menuconfig_to_code.sh 脚本会根据这些定义动态(关键脚本如下)修改linux设备树和board/common/gen_image_cfg/genimage-spinor.cfg文件;

image sysimage-spinor32m.img {
    flash  {}
    flashtype = "spinor-32M-gd25lx256e"
    .....
    partition quick_boot_cfg {
        offset = ${CONFIG_SPI_NOR_QUICK_BOOT_CFG_BASE}
        image = "${quick_boot_cfg_data_file}"
        size = ${CONFIG_SPI_NOR_QUICK_BOOT_CFG_SIZE}
    }

    partition face_db {
        offset = ${CONFIG_SPI_NOR_FACE_DB_CFG_BASE}
        image = "${face_database_data_file}"
        size = ${CONFIG_SPI_NOR_FACE_DB_CFG_SIZE}
    }

    partition sensor_cfg {
        offset = ${CONFIG_SPI_NOR_SENSOR_CFG_CFG_BASE}
        image = "${sensor_cfg_data_file}"
        size = ${CONFIG_SPI_NOR_SENSOR_CFG_CFG_SIZE}
    }

    partition ai_mode {
        offset = ${CONFIG_SPI_NOR_AI_MODE_CFG_BASE}
        image = "${ai_mode_data_file}"
        size = ${CONFIG_SPI_NOR_AI_MODE_CFG_SIZE}
    }

    partition speckle_cfg {
        offset = ${CONFIG_SPI_NOR_SPECKLE_CFG_BASE}
        image = "${speckle_data_file}"
        size = ${CONFIG_SPI_NOR_SPECKLE_CFG_SIZE}
    }

    partition rtt {
        offset = ${CONFIG_SPI_NOR_RTTK_BASE}
        image = "big-core/rtt_system.bin"
        size = ${CONFIG_SPI_NOR_RTTK_SIZE}
    }
    partition rtt_app {
        offset = ${CONFIG_SPI_NOR_RTT_APP_BASE}
        image = "${rtapp_data_file}"
        size = ${CONFIG_SPI_NOR_RTT_APP_SIZE}
    }

    partition linux {
        offset = ${CONFIG_SPI_NOR_LK_BASE}
        image = "little-core/linux_system.bin"
        size = ${CONFIG_SPI_NOR_LK_SIZE}
    }
    partition rootfs_ubi {
        offset = ${CONFIG_SPI_NOR_LR_BASE}
        image = "rootfs.ubi"
        size = ${CONFIG_SPI_NOR_LR_SIZE}
    }
}

最后genimage 会解析board/common/gen_image_cfg/genimage-spinor.cfg 文件并生成正确的镜像。

genimage --rootpath little-core/rootfs/ --tmppath genimage.tmp --inputpath images --outputpath images
--config board/common/gen_image_cfg/genimage-spinor.cfg

6.1.3分区数据格式及生成过程#

目前快起参数、人脸特性、标定参数、ai模型、散斑、rtt、rtapp等参数分区的数据均不加密,其格式及生成过程如下:

image-20230705151949318

主要生成脚本如下:

#更详细的生成细节请阅读 board/common/gen_image_script/gen_image_comm_func.sh 脚本的gen_cfg_part_bin函数
${k230_gzip} -f -k ${filename}  #gzip
sed -i -e "1s/\x08/\x09/"  ${filename}.gz
#add uboot head
${mkimage} -A riscv -O linux -T firmware -C gzip -a ${add} -e ${add} -n ${name}  -d ${filename}.gz  ${filename}.gzu;
python3  ${firmware_gen}   -i ${filename}.gzu -o fh_${filename} ${arg}; #add k230 firmware head

对应执行过程打印如下:
## + k230_priv_gzip -n8 -f -k speckle.bin
## + sed -i -e '1s/\x08/\x09/' speckle.bin.gz
## + mkimage -A riscv -O linux -T firmware -C gzip -a 0x14040000 -e 0x14040000 -n speckle -d speckle.bin.gz speckle.bin.gzu
## Image Name:   speckle
## Created:      Wed Jul  5 15:37:49 2023
## Image Type:   RISC-V Linux Firmware (gzip compressed)
## Data Size:    45 Bytes = 0.04 KiB = 0.00 MiB
## Load Address: 14040000
## Entry Point:  14040000
## + python3 /home/wangjianxin/k230_sdk/tools/firmware_gen.py -i speckle.bin.gzu -o fh_speckle.bin -n
## the magic is:  b'K230'
## ----- NO ENCRYPTION + HASH-256 -----
## the encryption type:  0
## mesg_hash:  b'3543e2038aedad88a29f8ee98983064367cc79f6e709ed7571df9b391884b8b1'

uboot启动的时候会解析校验参数分区(快起参数、人脸特性、标定参数、ai模型、散斑、rtt、rtapp)数据,并把解析后的原始数据读到内存的正确位置。

各个参数分区在内存的位置可以通过make menuconfig–Memory configuration进行配置(参考界面如下)

image-20230705153242437

6.1.4 rtapp和ai mode分区特殊说明#

rtapp分区的app不能重复执行,设计这个分区的目的是节省内存,这个分区的app执行一遍后内存可能会被释放掉,不能重复执行;

编译的时候会把大核romfs文件系统里面模型文件的指针修改到ai模型区域(见下面脚本),使用方法和普通文件一样使用就行。

#详见board/common/gen_image_script/gen_image.sh 文件
for f in ${all_kmode};
    do
        eval fstart="\${${f%%\.*}_start}"
        eval fsize="\${${f%%\.*}_size}"
        fstart=$(printf "0x%x" $((${fstart} + ${CONFIG_MEM_AI_MODEL_BASE})))
        fsize=$(printf "0x%x" ${fsize})
        sed -i "s/_bin_$f,/(char*)${fstart},/g" ${RTSMART_SRC_DIR}/kernel/bsp/maix3/applications/romfs.c
        sed -i "s/sizeof(_bin_$f)/${fsize}/g" ${RTSMART_SRC_DIR}/kernel/bsp/maix3/applications/romfs.c
    done

6.1.5 spi nor验证过的型号#

gd25lx256e

6.2 sd和emmc#

6.2.1 sd和emmc默认分区#

image-20230705100321637

SD、emmc卡默认分区

内容

开始地址

大小值

大小MB

大小

mbr分区表

0x0

0x100000

1

1MB

一级uboot

0x100000

0x80000

0.5

512KB

备用一级boot

0x180000

0x60000

0.375

384KB

uboot环境变量

0x1e0000

0x20000

0.125

128KB

二级uboot

0x200000

0x800000

0.5

8MB

rtt

0xa00000

0x1400000

20

20MB

linux

0x1e00000

0x6200000

98

98MB

rootfs

0x8000000

0x5000000

80

80MB

测试分区

0xd000000

0x10000000

256

256MB

6.2.2 sd和emmc分区修改#

如果需要分区请修改board/common/gen_image_cfg/genimage-sdcard.cfg 文件,修改完后执行下make build-image

6.3 spi nand#

6.3 spi nand默认分区#

image-20230705111015174

spinand分区

内容

开始地址

大小

开始地址

大小MB

大小

一级uboot

0x0

512KB

0x0

0.5

512KB

二级uboot

0x80000

0x160000

0x80000

1.375

1.375MB

uboot环境变量

0x1e0000

128KB

0x1e0000

0.125

128KB

rtt

0x200000

0x800000

0x200000

8

8MB

linux

0xa00000

0x700000

0xa00000

7

7MB

rootfs

0x1100000

0xf00000

0x1100000

15

15MB

6.3.2 spi nand分区修改#

如果需要分区请修改board/common/gen_image_cfg/genimage-spinand.cfg 文件,修改完后执行下make build-image

6.3.4 spi nand验证过的型号#

w25n01gw

7. SDK内存配置#

在k230_sdk下运行make menuconfig->Memory configuration可以配置各个区域使用的内存空间,也可以直接编译configs/k230_evb_defconfig修改,各区域说明如下

CONFIG_MEM_TOTAL_SIZE="0x20000000"      #内存总体容量          不支持配置
CONFIG_MEM_PARAM_BASE="0x00000000"      #参数分区起始地址       不支持配置
CONFIG_MEM_PARAM_SIZE="0x00100000"      #参数分区大小           不支持配置
CONFIG_MEM_IPCM_BASE="0x00100000"       #核间通讯起始地址       不支持配置
CONFIG_MEM_IPCM_SIZE="0x00100000"       #核间通讯共享内存大小    不支持配置
CONFIG_MEM_RTT_SYS_BASE="0x00200000"    #大核RTT起始地址        支持配置
CONFIG_MEM_RTT_SYS_SIZE="0x07E00000"    #大核RTT使用的地址范围   支持配置
CONFIG_MEM_AI_MODEL_BASE="0x1FC00000"   #AI模型加载起始地址      支持配置
CONFIG_MEM_AI_MODEL_SIZE="0x00400000"   #AI模型加载地址区域      支持配置
CONFIG_MEM_LINUX_SYS_BASE="0x08000000"  #小核linux起始地址       支持配置
CONFIG_MEM_LINUX_SYS_SIZE="0x08000000"  #小核linux地址区域       支持配置
CONFIG_MEM_MMZ_BASE="0x10000000"        #mmz共享内存其实地址     支持配置
CONFIG_MEM_MMZ_SIZE="0x0FC00000"        #mmz 共享内存区域       支持配置
CONFIG_MEM_BOUNDARY_RESERVED_SIZE="0x00001000"  #隔离区         不支持配置

CONFIG_MEM_LINUX_SYS_BASE 地址需要2MB对齐

8. SDK单板调试#

CanMV-K230主板由于没有引出调试GPIO,因此,不支持单板调试方式。

8.1 调试前准备#

1.从 T-Head公司的OCC平台 https://occ.t-head.cn/community/download 下载T-Head-DebugServer软件和《DebugServer User Guide v5.6》,并参考《DebugServer User Guide v5.6》在pc电脑上安装T-Head-DebugServer软件;

图形用户界面, 文本, 应用程序 描述已自动生成

图形用户界面, 文本, 应用程序, 电子邮件 描述已自动生成

2.准备下图所示平头哥 cklink、usb线、k230 evb板

图片包含 游戏机, 电缆, 电路 描述已自动生成

8.2 调试#

1.参考下图把cklink 、k230 evb板子、pc电脑 连接起来,随后给evb上电。

电子仪器被放在电脑旁边 中度可信度描述已自动生成

2.电脑上打开第1步安装的T-HeadDebugServer软件,看到类似如下图打印说明连接成功,如果连接失败请参考《DebugServer User Guide v5.6》排查失败原因。

文本 描述已自动生成

3.在编译代码的服务器上启动riscv64-unknown-linux-gnu-gdb执行target remote xx.xx.xx.xx1025 命令连接板子,连接成功后进行gdb调试。

文本 描述已自动生成

9. SDK启动#

当前版本默认编译生成的镜像,烧录到板子上后,大核会自动运行一个人脸检测程序,显示屏上会显示摄像头采集的图片;启动后可以在大核的控制台端输入’q’退出该程序。

  1. EVB系列主板如果没有连接IMX335摄像头,则自启动程序报错,程序自动退出,按回车即可回到控制台。

  2. 若需要取消大核的自启动功能,需将 k230_sdk/src/big/rt-smart/init.sh 中的内容注释掉。

10.k230 debian和ubuntu 镜像说明#

镜像及构建方法详见K230_debian_ubuntu说明.md