保姆级教程:在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.list1.2 获取K230 SDK源码
官方SDK在GitHub和Gitee同步更新,国内用户建议使用Gitee镜像:
git clone --depth=1 https://gitee.com/kendryte/k230_sdk.git cd k230_sdk若遇到网络问题导致clone失败,可以尝试以下替代方案:
- 使用开发者工具中的代理设置
- 分步clone不同深度的仓库
- 直接下载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-gnu | RT-smart系统编译 |
| 小核工具链 | toolchain/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.0 | Linux系统编译 |
若自动下载失败,可手动下载后放置到对应目录:
# 大核工具链 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.gz3. 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)编译过程监控技巧:
- 使用
htop观察CPU和内存使用情况 - 通过
df -h检查磁盘空间 - 遇到错误时查看
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烧录验证步骤:
- 使用
sync命令确保数据完全写入 - 通过
fdisk -l /dev/sdX检查分区表 - 挂载分区验证文件完整性
4.3 开发板首次启动
插入烧录好的TF卡,连接串口调试工具(推荐115200波特率),你应该会看到:
- Uboot启动日志
- Linux内核加载信息
- RT-smart系统初始化输出
- 最终进入Linux shell提示符
首次使用建议检查:
# 查看CPU信息 cat /proc/cpuinfo # 检查内存分配 free -h # 验证双核通信 ls /proc/rt-smart5. 进阶配置与优化技巧
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/bin5.3 性能优化建议
- 编译缓存:启用ccache加速重复编译
- 增量编译:修改代码后仅重新编译受影响组件
- 并行编译:根据主机核心数调整
-j参数 - 容器复用:保留Docker容器避免重复初始化
在项目开发中,我发现最耗时的往往是工具链下载和环境配置阶段。一旦基础环境搭建完成,后续的代码修改和增量编译会变得非常高效。建议开发者首次成功编译后,对Docker镜像进行提交保存:
docker commit <容器ID> my_k230_builder