当前位置: 首页 > 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.jsqmd.com/news/1009703/

相关文章:

  • 告别命令行!用VSCode的Dev Containers在M1 Mac上秒配Java开发环境
  • 2026年新鲜茶叶行业深度观察:谁在定义高端茶饮的新标准? - 优质品牌商家
  • Java 流式编程(Stream)完整详解
  • 汽车MCU里的‘内存保镖’:手把手配置瑞萨芯片的ECC纠错功能(附寄存器详解)
  • 三步搞定显卡噪音:FanControl零基础调校指南
  • 多旋翼控制分配(Control Allocation)原理与实战指南
  • GPT-4参数规模与MoE稀疏激活的工程真相
  • FastAPI 2026性能本质:协议适配、类型即运行时、依赖即调度
  • 想发SCI四区交通类论文?聊聊这本开源期刊JAT的投稿避坑指南与APC费用详解
  • 从DDR3到DDR4,你的老电脑升级内存划算吗?实测性能提升与兼容性全解析
  • 给你的STM32项目加个“眼睛”:1.8寸ST7735屏的GUI界面快速上手教程
  • 物理AI落地实战:VLA模型的Agentic Skills增强方案
  • STM32F407内存不够用?手把手教你用.sct文件把FreeRTOS塞进CCM(64K专属RAM)
  • 2026长沙二手房整体翻新技术测评:长沙旧房改造价格/长沙旧房改造公司/长沙旧房改造工期/三家实力厂商工艺拆解 - 优质品牌商家
  • SketchUp STL插件终极指南:3D打印工作流的革命性突破
  • GPT-4参数量与MoE激活机制的工程真相
  • K210的KPU到底有多强?实测YOLO v2物体检测的帧率与功耗,对比树莓派Zero 2 W
  • Triton模型服务化与持续可观测性实战指南
  • 终极指南:如何免费使用Duplicity编辑器修改《缺氧》游戏存档
  • Python实盘组合优化:从cvxpy到PyPortfolioOpt的落地工作流
  • 在Visual Studio 2022里,用C#和OpenTK 4.x画个会转的彩色立方体(附完整代码)
  • 乌鲁木齐驾驶式洗地车2025年度品牌推荐榜 - 工业清洁测评社
  • Embedding实战指南:从词向量到语义搜索的工业级落地
  • CANN图引擎ge核心技术深度解析:从图编译优化到算子融合的昇腾NPU推理性能全链路提升实战
  • Java中String内部排序方法
  • 别再踩坑了!STM32F103C8T6的PB3/PB4/PA15引脚当普通IO口用的完整配置流程(附MDK设置截图)
  • 摘要任务下的RLHF实战:从reward建模到PPO收敛的可复现手记
  • 拆解一个开源四轴:Drone-Mercury硬件选型与成本控制实战分析
  • GPT-4的2%参数真相:MoE稀疏激活原理与工程实践
  • 2026成都工商代办注册公司机构深度盘点:哪家更懂本地中小企业的真实需求? - 优质品牌商家