从零构建华山派CV1812H开发环境:Ubuntu 20.04固件编译全指南
当你第一次拿到华山派CV1812H这块搭载RISC-V架构的开发板时,最令人头疼的往往不是硬件连接,而是那个看起来永远装不完的依赖列表。作为过来人,我清楚地记得自己第一次面对 apt-get install 后面那串长达30多个包名时的绝望——这还不包括那些版本不对需要手动编译的工具链。本文将用最接地气的方式,带你穿越这片"依赖沼泽"。
1. 开发环境准备:避开那些新手必踩的坑
在Ubuntu 20.04上搭建嵌入式开发环境就像玩俄罗斯方块——稍有不慎就会堆出无法解决的依赖冲突。我们先从最基础的虚拟机配置说起:
虚拟机分配建议 (实测最优配置):
- CPU核心:≥4核(编译时
make -j4能显著提速) - 内存:≥8GB(低于此值可能因swap导致编译失败)
- 磁盘空间:≥50GB(SDK解压后约15GB,编译中间文件很占空间)
安装必备工具时,官方列表里那些看似重复的包其实各有玄机。比如 libssl-dev 出现了两次不是笔误——某些工具链会检查特定路径下的SSL库。以下是经过分类整理的依赖清单:
| 类别 | 关键包 | 作用说明 |
|---|---|---|
| 编译工具 | build-essential | 包含gcc/g++等基础编译套件 |
| 构建系统 | cmake/ninja-build | 现代项目构建工具组合 |
| 自动化工具 | autoconf/automake | 处理老式Makefile项目 |
| 文件处理 | squashfs-tools | 处理嵌入式系统常见的squashfs镜像 |
| 开发辅助 | device-tree-compiler | 编译设备树(dts→dtb)的必备工具 |
遇到CMake版本过低时,别急着按照过时教程下载源码编译。试试这个更优雅的方案:
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc | sudo apt-key add -
sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ focal main'
sudo apt update
sudo apt install cmake=3.21.0-1kitware1ubuntu20.04.1
这个官方PPA提供的CMake 3.21既不会破坏系统依赖,又能满足华山派SDK的要求。
2. SDK获取与环境配置:那些手册没写的细节
从GitHub克隆SDK时,国内用户常会遇到速度慢甚至连接中断的问题。除了配置git代理,更推荐使用镜像仓库:
git clone https://gitee.com/mirrors/sophpi-huashan.git
cd sophpi-huashan
git submodule update --init --recursive
执行 source build/cvisetup.sh 时如果报错,八成是因为shell环境问题。建议先运行:
chmod +x build/cvisetup.sh
bash build/cvisetup.sh
这个脚本主要做了三件事:
- 设置交叉编译工具链路径
- 添加必要的环境变量
- 检查依赖工具版本是否达标
3. 固件编译实战:读懂编译器的"潜台词"
进入正式编译阶段, defconfig cv1812h_wevb_0007a_emmc 这个命令背后其实隐藏着重要信息:
-
cv1812h:芯片型号 -
wevb:板型标识(对应华山派开发板) -
emmc:存储介质类型
编译过程中最耗时的通常是Linux内核构建。这时候可以观察CPU使用率:
- 如果
make进程始终无法吃满CPU,可能是虚拟机核心数设置不足 - 频繁的磁盘读写可能意味着内存不够,系统在使用swap
典型错误处理指南 :
error: unrecognized command line option '-mabi=lp64d'
这说明你的工具链配置错误,RISC-V需要特定的ABI支持。重新执行 cvisetup.sh 通常能解决。
fatal error: openssl/evp.h: No such file or directory
这是典型的开发包缺失,安装 libssl-dev 后问题消失。
4. 固件烧写与验证:TF卡的那些"玄学"问题
Windows 11下格式化TF卡时,FAT32选项消失确实是个反直觉的设计。除了分区小于4GB的解决方案,更专业的做法是使用第三方工具:
跨平台TF卡格式化方案 :
- Windows :使用 Rufus 工具,在"文件系统"明确选择FAT32
- macOS :终端执行
diskutil eraseDisk FAT32 UNTITLED MBRFormat /dev/disk2 - Linux :
sudo mkfs.vfat -F 32 /dev/sdX1
烧录成功后,通过串口调试时如果出现乱码,检查三点:
- 波特率是否准确设置为115200
- 流控(Flow Control)是否已禁用
- 线材质量(劣质USB转串口线会导致数据丢失)
第一次启动时常见的卡住位置及解决方法:
- 停在
Starting kernel...:设备树加载失败,检查dtb文件是否匹配板型 - 卡在
mmcblk0 mount error:文件系统损坏,重新烧写镜像 - 循环重启:uboot环境变量配置错误,尝试
env default -a
5. 进阶准备:为ncnn移植铺路
完成基础固件编译只是第一步,要为后续的ncnn移植做好准备,还需要特别注意:
编译器ABI兼容性检查 :
riscv64-unknown-linux-gnu-gcc -v
输出应包含 --with-abi=lp64d ,这是CV1812H的浮点运算支持关键。
内存带宽优化 : 在 build_all 之前,可以编辑 configs/cv1812h_wevb_0007a_emmc_defconfig ,修改:
CONFIG_CMA_SIZE_MBYTES=32 → 64
这对后续运行神经网络模型至关重要。
文件系统扩容 : 默认镜像只分配了约200MB空间,安装ncnn依赖前需要:
sudo apt install parted
sudo parted /dev/mmcblk0
resizepart 2 100%
exit
sudo resize2fs /dev/mmcblk0p2
记得在虚拟机里保留完整的编译环境——后续调试ncnn时,你可能需要反复修改并重新编译内核模块。建议在完成基础编译后立即创建虚拟机快照,标注为"Clean Build Environment"。
&spm=1001.2101.3001.5002&articleId=102376935&d=1&t=3&u=3ac06c4126124e7c9905cef23d305c60)
473

被折叠的 条评论
为什么被折叠?



