嘉楠堪智 CanMV K230 进行 Linux、RT-smart 系统开发

本文记录学习、使用 K230 SDK 进行 Linux、RT-smart 系统的开发的一些关键步骤,如何获取系统源代码,如何配置环境,如何使用 Docker 进行编译,获得系统文件。

具体详细的教程,可以学习 CanMV K230 教程。

目录

一、SDK 软件架构概述:

二、开发环境搭建:

SDK 开发包获取:

下载 toolchain:

三、SDK 编译

SDK 配置

生成 docker 镜像

进入 docker 环境

编译 SDK

四、编译输出系统文件:

五、小结:


一、SDK 软件架构概述:

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

K230 SDK 软件架构层次如图:

二、开发环境搭建:

K230 SDK 需要在 linux 环境下编译,官方推荐用 Ubuntu 20.04 LTS (x86_64),SDK 支持 docker 环境编译,SDK 开发包中发布了 docker file(tools/docker/Dockerfile),可以生成 docker 镜像。

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

SDK 开发包获取:

SDK 目前在 github 和 gitee 同步发布,可以直接下载压缩包,也可以通过 git clone 命令获取。

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

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

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环境变量、镜像配置文件、文件系统等

下载 toolchain:

k230_sdk 中提供了工具链,buildroot package 和 AI package,可用如下命令下载:

        cd k230_sdk

        source tools/get_download_url.sh && make prepare_sourcecode

大小核使用不同的工具链。分别在如下路径:

  • 大核 rt-samrt 工具链

        k230_sdk/toolchain/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu

  • 小核 linux 工具链

        k230_sdk/toolchain/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.0

也可通过以下链接下载工具链

wget https://download.rt-thread.org/rt-smart/riscv64/riscv64-unknown-linux-musl-rv64imafdcv-lp64d-20230222.tar.bz2
wget https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1659325511536/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.0-20220715.tar.gz

三、SDK 编译

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

  • SDK 配置

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

k230_canmv_defconfig基于 CanMV-K230 的默认 SDK 配置文件。

  • 生成 docker 镜像

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

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

  • 进入 docker 环境

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

  • 编译 SDK

#Docker 环境下执行下面命令,编译 CanMV-K230 板子镜像

make CONF=k230_canmv_defconfig

四、编译输出系统文件:

编译完成后,在 output/k230_canmv_defconfig/images 目录下可以看到编译输出

images 目录下镜像文件如下:

sysimage-sdcard.img ————-TF 卡的启动镜像;

sysimage-sdcard.img.gz ———TF 卡的启动镜像压缩包(sysimage-sdcard.img文件的 gzip 压缩包),烧录时需要先解压缩。

五、小结:

整个 SDK 编译完成,成生镜像 sysimage-sdcard.img,可烧录到 TF 卡启动系统。

                                                                                         老徐,2024/5/4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/8520.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

区间合并,CF 1102E Monotonic Renumeration

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 1102E - Codeforces 二、解题报告 1、思路分析 我们不难发现对…

.net 6.0 框架集成ef实战,步骤详解

一、代码框架搭建 搭建如下代码架构: 重点含EntityFrameworkCore工程,该工程中包含AppDbContext.cs和数据表实体AggregateObject 1、AppDbContext 代码案例 //AppDbContext 代码案例using Microsoft.EntityFrameworkCore;namespace EntityFrameworkCore {public class Ap…

思通数科大模型在智能数据查询系统中的深度应用:销售数据分析的革新

在企业决策支持系统中,销售数据分析占据着举足轻重的地位。思通数科的大模型技术,结合自然语言处理(NLP)和机器学习,为智能数据查询系统提供了强大的分析能力。本文将详细描述思通数科大模型在销售数据分析中的应用&am…

2024 GESP6级 编程第一题 游戏

题目描述 你有四个正整数 ,并准备用它们玩一个简单的小游戏。 在一轮游戏操作中,你可以选择将 减去 ,或是将 减去 。游戏将会进行多轮操作,直到当 时游戏结束。 你想知道游戏结束时有多少种不同的游戏操作序列。两种游戏操作…

科沃斯,「扫地茅」荣光恐难再现

作者 | 辰纹 来源 | 洞见新研社 科沃斯恐怕已经很难再回到被市场誉为“扫地茅”时的荣光了。 不久前,科沃斯发布2023年财报,报告期内营业收入155亿,同比仅增长1.16%,归母净利润6.12亿元,同比下降63.96%,直…

20240508请问GTX2080TI的300和300A核心的差异?

20240508请问GTX2080TI的300和300A核心的差异? 在拼多多/淘宝上,GTX2080TI的300A核心的会比300核心的贵100¥左右。 但是怎么区分呢? 300a核心和300请问怎么区分呢?[嘻嘻] devicr ID diviceid 1e07是300a 1e04是300 Gp…

【文章转载】ChatGPT 提示词十级技巧: 从新手到专家

学习了微博网友宝玉xp老师《ChatGPT 提示词十级技巧: 从新手到专家》 个人学习要点: 1、关于提示中避免使用否定句,播主说:“没有人能准确解释为什么,但大语言模型在你告诉它去做某事时,表现似乎比你让它不做某事时更…

Java进阶05 时间API异常

Java进阶05 一、递归算法 方法直接(自己调自己)或间接(方法调其他方法,其他方法又回调自己)调用自身 1、递归思想 把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。需要注意,设计递…

JavaSE——方法详解

1. 方法的概念 方法就是一个代码片段 . 类似于 C 语言中的 " 函数 " 。 方法存在的意义 : 1. 是能够模块化的组织代码(当代码规模比较复杂的时候). 2. 做到代码被重复使用, 一份代码可以在多个位置使用. 3. 让代码更好理解更简单. 4. 直接调用现有方法开发, 不…

QT实战百度语音识别

前言 随着学习的深入,感觉愈发缺乏满足感。刚好看到微信语音转文字的功能,经网上查询,发现可以使用 QT 百度语音识别技术 实现这一功能。当然,由于使用的 QT 和 百度语音识别,那么看不到一些具体的底层实现&#xff…

VALSE 2024 Workshop报告分享┆探索短视频生成与编辑的前沿技术

2024年视觉与学习青年学者研讨会(VALSE 2024)于5月5日到7日在重庆悦来国际会议中心举行。本公众号将全方位地对会议的热点进行报道,方便广大读者跟踪和了解人工智能的前沿理论和技术。欢迎广大读者对文章进行关注、阅读和转发。文章是对报告人…

Python高级编程-DJango1

Python高级编程 灵感并不是在逻辑思考的延长线上产生 而是在破除逻辑或常识的地方才有灵感 目录 Python高级编程 1.python学习之前的准备 ​编辑 2.DJango 开发网站 3.创建项目 4.djang项目结构介绍 1&…

Linux-信号保存

1. 概念 进程执行信号的处理动作,称为 信号递达(Delivery) 信号从产生到递达之间的状态,称为 信号未决(Pending) 进程可以选择 阻塞(Block)某个信号 过程: 信号产生 ——…

linux上go项目打包与部署

1.第一步把项目打包 1.确保本地goland的操作系统为linux go env找到GOOS如果为window就修改为Linux 修改命令为 go env -w GOOSlinux2.打包 在项目根目录下输入 go build main.go然后项目根目录下会出现一个mian的二进制文件 3.上传包 将 main 程序包放到服务的目录下&…

鸿蒙开发接口Ability框架:【 (ServiceExtensionAbility)】

ServiceExtensionAbility ServiceExtensionAbility模块提供ServiceExtension服务扩展相关接口的能力。 说明: 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 本模块接口仅可在Stage模型下使用。 导入…

【栈】Leetcode 1047. 删除字符串中的所有相邻重复项

题目讲解 1047. 删除字符串中的所有相邻重复项 算法讲解 使用栈这个数据结构,每一次入栈的时候观察此时的字符和当前栈顶字符是否相等,如相等:栈顶出栈;不相等:入栈 class Solution { public:string removeDuplica…

Linux-进程管理类命令实训

实训1:进程查看,终止,挂起及暂停等操作 1.使用ps命令显示所有用户的进程 2.在后台使用cat命令。查看进程cat,并杀死进程 3.使用top命令只显示某一用户的进程。 4.执行命令cat,把Ctrlz挂起进程,输入jobs命令…

「网络流 24 题」最小路径覆盖 【最小路径覆盖】

「网络流 24 题」最小路径覆盖 思路 具体可以看 这篇博客 对于有向无环图,我们只需要将假装将点裂成左点和右点(实际没有裂开),然后连边; 在上面跑二分图最大匹配后,剩下没有匹配的左点就是终点&#xff…

python与java用途区别有哪些

区别: 1.Python比Java简单,学习成本低,开发效率高。 2.Java运行效率高于Python,尤其是纯Python开发的程序,效率极低。 3.Java相关资料多,尤其是中文资料。 4.Java版本比较稳定,Python2和3不…

【第14章】spring-mvc之ajax

文章目录 前言一、准备二、单个值1.前端2.后端3. 结果 三、对象1.前端2.后端3. 结果 四、JSON对象1.前端2.后端3. 结果 五、JSON数组1.前端2.后端3. 结果 总结 前言 AJAX(Asynchronous JavaScript and XML)是一种用于创建快速动态网页的技术&#xff0c…