当前位置: 首页 > news >正文

保姆级教程:在Ubuntu 20.04上从源码编译CanMV K230的Linux+RT-smart双系统镜像

从零构建CanMV K230双系统镜像:Ubuntu 20.04实战手册

当一块崭新的CanMV K230开发板放在你面前时,最令人兴奋的莫过于亲手构建它的操作系统镜像。作为嘉楠堪智推出的RISC-V架构开发板,K230独特的Linux+RT-smart双核异构设计为开发者提供了丰富的可能性。本文将带你从Ubuntu 20.04主机开始,逐步完成从环境配置到镜像生成的全过程,特别针对网络环境复杂、依赖关系繁琐等实际问题提供解决方案。

1. 开发环境准备与SDK获取

在开始编译前,确保你的Ubuntu 20.04系统满足以下基本要求:

  • 至少100GB可用磁盘空间(源码和编译中间文件会占用大量空间)
  • 已安装git、curl、wget等基础工具
  • 推荐使用SSD存储以加快编译速度

1.1 安装必要依赖包

执行以下命令安装基础编译工具链:

sudo apt update && sudo apt install -y \ build-essential \ bc \ flex \ bison \ libssl-dev \ libncurses-dev \ kmod \ cpio \ device-tree-compiler \ python3 \ python3-pip \ unzip \ rsync

对于国内用户,建议更换apt源以提高下载速度:

sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list

1.2 获取K230 SDK源码

官方SDK在GitHub和Gitee同步更新,国内用户建议使用Gitee镜像:

git clone --depth=1 https://gitee.com/kendryte/k230_sdk.git cd k230_sdk

若遇到网络问题导致clone失败,可以尝试以下替代方案:

  1. 使用开发者工具中的代理设置
  2. 分步clone不同深度的仓库
  3. 直接下载ZIP压缩包(但会丢失git历史)

2. Docker环境配置与工具链准备

2.1 构建Docker编译环境

K230官方推荐使用Docker进行编译以确保环境一致性。首先安装Docker CE:

sudo apt install -y docker.io sudo systemctl enable --now docker

构建专用镜像(首次执行约需15-30分钟):

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

常见问题处理:

  • 权限不足:将当前用户加入docker组后重新登录
  • 构建超时:配置Docker国内镜像加速器
  • 存储空间不足:清理已有镜像或指定其他存储位置

2.2 下载工具链与依赖

进入Docker环境前,先获取必要的工具链:

source tools/get_download_url.sh && make prepare_sourcecode

工具链存储路径说明:

工具链类型路径用途
大核工具链toolchain/riscv64-linux-musleabi_for_x86_64-pc-linux-gnuRT-smart系统编译
小核工具链toolchain/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.0Linux系统编译

若自动下载失败,可手动下载后放置到对应目录:

# 大核工具链 wget -P toolchain/ https://download.rt-thread.org/rt-smart/riscv64/riscv64-unknown-linux-musl-rv64imafdcv-lp64d-20230222.tar.bz2 # 小核工具链 wget -P toolchain/ 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

3. SDK配置与编译流程

3.1 进入Docker编译环境

启动容器并挂载必要目录:

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

注意:所有后续编译命令都应在Docker环境中执行

3.2 配置SDK参数

针对CanMV-K230开发板使用专用配置:

make CONF=k230_canmv_defconfig

关键配置项说明:

  • 内存布局:大核RT-smart与小核Linux的内存分配比例
  • 存储规划:NOR Flash与SD卡的分区方案
  • 外设支持:摄像头、显示屏等外设驱动选择

3.3 开始系统编译

执行完整编译(首次编译约需2-4小时):

make -j$(nproc)

编译过程监控技巧:

  1. 使用htop观察CPU和内存使用情况
  2. 通过df -h检查磁盘空间
  3. 遇到错误时查看build.log获取详细日志

常见编译问题处理:

问题现象可能原因解决方案
下载超时网络连接不稳定手动下载缺失文件到dl目录
头文件缺失依赖未正确安装在Docker中执行apt update && apt install -f
内存不足并行编译任务过多减少-j参数值或增加swap空间

4. 镜像生成与烧录准备

4.1 编译输出文件解析

成功编译后,输出文件位于:

output/k230_canmv_defconfig/images/

关键文件说明:

  • sysimage-sdcard.img:完整的SD卡镜像文件
  • sysimage-sdcard.img.gz:压缩版镜像(需解压后使用)
  • boot.vfat:启动分区镜像
  • rootfs.ext4:根文件系统镜像

4.2 镜像烧录到TF卡

将镜像写入SD卡(假设SD卡设备为/dev/sdX):

gunzip -c sysimage-sdcard.img.gz | sudo dd of=/dev/sdX bs=1M status=progress

烧录验证步骤:

  1. 使用sync命令确保数据完全写入
  2. 通过fdisk -l /dev/sdX检查分区表
  3. 挂载分区验证文件完整性

4.3 开发板首次启动

插入烧录好的TF卡,连接串口调试工具(推荐115200波特率),你应该会看到:

  1. Uboot启动日志
  2. Linux内核加载信息
  3. RT-smart系统初始化输出
  4. 最终进入Linux shell提示符

首次使用建议检查:

# 查看CPU信息 cat /proc/cpuinfo # 检查内存分配 free -h # 验证双核通信 ls /proc/rt-smart

5. 进阶配置与优化技巧

5.1 自定义根文件系统

修改buildroot配置添加额外软件包:

make menuconfig

常用配置路径:

  • Target packages → Networking applications
  • Target packages → Hardware handling
  • Filesystem images → 调整文件系统类型和大小

5.2 交叉编译应用程序

为K230开发应用程序时,需要设置正确的交叉编译工具链:

# 大核RT-smart应用 export PATH=$PATH:$(pwd)/toolchain/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu/bin # 小核Linux应用 export PATH=$PATH:$(pwd)/toolchain/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.0/bin

5.3 性能优化建议

  1. 编译缓存:启用ccache加速重复编译
  2. 增量编译:修改代码后仅重新编译受影响组件
  3. 并行编译:根据主机核心数调整-j参数
  4. 容器复用:保留Docker容器避免重复初始化

在项目开发中,我发现最耗时的往往是工具链下载和环境配置阶段。一旦基础环境搭建完成,后续的代码修改和增量编译会变得非常高效。建议开发者首次成功编译后,对Docker镜像进行提交保存:

docker commit <容器ID> my_k230_builder
http://www.rkmt.cn/news/1521514.html

相关文章:

  • 2026年知名的浙江泡沫混凝土/流态固化混凝土/宁波泡沫混凝土/宁波混凝土厂家对比推荐 - 行业平台推荐
  • 2026年新鲜茶叶行业深度观察:谁在定义高端茶饮的新标准? - 优质品牌商家
  • FastAPI 2026性能本质:协议适配、类型即运行时、依赖即调度
  • GPT-4参数量与MoE激活机制的工程真相
  • SketchUp STL插件终极指南:3D打印工作流的革命性突破
  • STM32F407内存不够用?手把手教你用.sct文件把FreeRTOS塞进CCM(64K专属RAM)
  • 终极指南:如何免费使用Duplicity编辑器修改《缺氧》游戏存档
  • Python实盘组合优化:从cvxpy到PyPortfolioOpt的落地工作流
  • 乌鲁木齐驾驶式洗地车2025年度品牌推荐榜 - 工业清洁测评社
  • Embedding实战指南:从词向量到语义搜索的工业级落地
  • 摘要任务下的RLHF实战:从reward建模到PPO收敛的可复现手记
  • 拆解一个开源四轴:Drone-Mercury硬件选型与成本控制实战分析
  • JWST揭示LRDs光谱多样性及其宇宙学意义
  • Wallpaper Engine壁纸备份指南:如何将pkg格式动态壁纸转为永久保存的JPG/PNG图片
  • 别再死记硬背了!一张图看懂X.25、帧中继、ATM的核心区别与联系
  • 14个NLP分词库底层机制深度对比:字符归一化到子词生成全解析
  • Java毕设项目:基于 SpringBoot 的智汇家园物业故障处理管理系统 智慧小区物业服务报修运维平台开发研究 (源码+文档,讲解、调试运行,定制等)
  • 时序预测自适应学习:面向非平稳数据的实时微调架构
  • 雷电模拟器dnconsole命令详解:从文件管理到性能调优,一篇搞定所有隐藏功能
  • 数据科学转行真相:行业经验才是你的核心竞争力
  • 告别虚拟机!手把手教你将Nuttx系统烧录到STM32F4开发板(Ubuntu环境,含串口与OpenOCD两种方法)
  • 用Streamlit构建生产级RAG问答应用的完整实践
  • 前端转AI Agent:收藏这份干货,让你的经验变成高薪资本!
  • Docker跑Java选哪个镜像?Alpine、Slim还是完整版?Eclipse Temurin镜像变体全解析与性能实测
  • STM32 HAL库实战避坑:从标准库转过来,我踩过的那些坑(附串口重构代码)
  • 手把手教你搞定SolidWorks 2021 SP5安装(附防火墙、.NET环境检查与破解文件复制避坑指南)
  • 别再死磕MQTT了!聊聊DDS通信中间件在自动驾驶和工业物联网里的实战应用
  • 农业机器人触觉夹爪:FruitTouch的创新设计与应用
  • 2026年西南地区游泳池工程公司服务能力深度观察:从设备选型到长效运维的实战解析 - 优质品牌商家
  • 损失函数工程:从业务代价到可导优化的实战指南