Milk-V Duo开发板实战:从零构建Ubuntu开发环境到系统启动全指南
第一次拿到Milk-V Duo开发板时,那种既兴奋又忐忑的心情记忆犹新。作为RISC-V架构的新锐力量,这款小巧的开发板蕴含着巨大的可能性,但对于习惯纯软件开发的工程师来说,从裸板到可编程状态的跨越往往充满未知的"坑"。本文将分享我完整的上手历程,特别针对Windows/Linux混合环境下那些容易忽略的细节,提供一站式解决方案。
1. 开发环境准备:构建稳定的Ubuntu基础
工欲善其事,必先利其器。对于Milk-V Duo开发,Ubuntu 20.04 LTS是最稳妥的选择——其长期支持特性和广泛的社区资源能大幅降低环境配置的复杂度。我推荐采用虚拟机方案,既保持主机系统纯净,又能随时创建开发环境快照。
关键组件清单:
- VMware Workstation Player(免费版足够使用)
- Ubuntu 20.04.6 LTS镜像(约2.6GB)
- 至少50GB的虚拟磁盘空间
- 8GB以上主机内存(分配4GB给虚拟机)
安装过程中有几个易错点需要特别注意:
- 在VMware创建虚拟机时,务必选择"稍后安装操作系统",手动指定为Linux/Ubuntu 64位,避免自动识别错误
- 磁盘分区建议手动设置:
/根分区:30GBswap交换分区:物理内存的1.5倍/home:剩余空间
- 安装开放SSH服务选项,方便后续远程访问
安装完成后立即执行以下基础配置:
sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential git cmake libncurses5-dev提示:建议在此时创建虚拟机快照,命名为"Base System",作为干净的恢复点。
2. 开发工具链配置:搭建完整的SDK环境
Milk-V Duo采用CV1800B芯片,需要特定的工具链才能进行开发。不同于常见的ARM架构,RISC-V的工具链配置有其特殊性,这也是新手最容易卡壳的环节。
2.1 获取官方SDK
官方推荐使用duo-buildroot-sdk,通过以下命令获取:
git clone --recursive https://github.com/milkv-duo/duo-buildroot-sdk.git cd duo-buildroot-sdk这个仓库包含:
- 预配置的buildroot系统
- 交叉编译工具链
- 硬件抽象层(HAL)库
- 示例代码
2.2 安装依赖项
执行SDK中的环境准备脚本前,需补充几个易遗漏的依赖:
sudo apt install -y flex bison texinfo gperf libssl-dev bc然后运行环境准备:
source milkvsetup.sh这个脚本会:
- 下载预编译的工具链
- 设置环境变量
- 检查必要的开发工具
注意:如果遇到权限问题,可能需要先执行
chmod +x milkvsetup.sh
2.3 编译测试镜像
验证环境是否配置成功的最佳方式就是尝试编译一个基础镜像:
make milkv_duo_sd_defconfig make -j$(nproc)成功编译后,你会在out/目录下得到:
milkv-duo-*.img:完整系统镜像rootfs.cpio.gz:根文件系统u-boot.bin:引导加载程序
编译时间视硬件性能而定,在4核8G的虚拟机上大约需要30-45分钟。
3. 镜像烧录实战:Windows环境下的完整流程
虽然开发环境建议使用Linux,但很多用户仍习惯在Windows下进行烧录操作。这个跨平台过程存在几个关键注意事项。
3.1 TF卡准备要点
| 参数 | 推荐规格 | 注意事项 |
|---|---|---|
| 容量 | ≥8GB | 2GB仅够基础系统 |
| 速度 | Class10 | 影响系统响应速度 |
| 品牌 | 知名厂商 | 避免兼容性问题 |
操作流程:
- 使用读卡器将TF卡连接至Windows电脑
- 下载并安装Rufus工具
- 选择编译好的.img文件(从Linux虚拟机导出)
- 分区类型选择"MBR",文件系统选"FAT32"
- 点击"开始"等待完成
常见问题处理:
- 如果Rufus提示"镜像太大",实际是工具误判,勾选"列表USB硬盘"选项即可
- 烧录失败时,尝试先用DiskGenius等工具完全清除分区表
- 遇到写保护错误,检查TF卡物理锁是否滑动到位
3.2 硬件连接技巧
Milk-V Duo的USB-C接口支持供电和数据传输,但要注意:
- 必须使用数据线而非充电线(测试方法:连接手机看能否传输文件)
- 推荐使用主板自带的USB3.0(蓝色)接口,稳定性更好
- 若使用扩展坞,优先选择带独立供电的型号
连接顺序建议:
- 先插入已烧录镜像的TF卡
- 再连接USB数据线
- 最后接通电源(如有独立供电)
成功启动的标志是蓝色LED开始规律闪烁,约1分钟后变为稳定呼吸灯效。
4. 系统访问与调试:USB网络配置详解
与传统开发板不同,Milk-V Duo通过USB虚拟网卡提供网络访问,这种方式既节省了额外网络模块的成本,又提供了稳定的调试通道。
4.1 Windows驱动安装
当首次连接开发板时,设备管理器会出现未知设备"USB Ethernet/RNDIS",需要手动安装驱动:
- 右键选择"更新驱动程序"
- 选择"浏览我的计算机以查找驱动程序"
- 定位到以下路径:
C:\Windows\System32\DriverStore\FileRepository\netrndis.inf_amd64_* - 选择"USB Ethernet/RNDIS Gadget"完成安装
验证方法:
ping 192.168.42.1成功收到回复说明连接正常。
4.2 SSH登录配置
推荐使用MobaXterm作为终端工具,其内置的SFTP功能方便文件传输:
- 新建SSH会话,地址填
192.168.42.1 - 用户名:
root - 密码:
milkv - 端口保持默认22
登录成功后你会看到熟悉的Linux shell提示符。首次登录建议:
passwd # 修改默认密码 df -h # 查看存储空间使用情况4.3 网络共享配置
要使开发板能够访问外网,需设置Windows主机的网络共享:
- 打开"网络和共享中心"
- 右键点击已联网的适配器→属性→共享
- 允许其他用户通过此计算机的Internet连接
- 选择RNDIS适配器作为家庭网络连接
在开发板上测试:
ping github.com如果出现"Temporary failure in name resolution"错误,需要手动设置DNS:
echo "nameserver 8.8.8.8" > /etc/resolv.conf5. 进阶配置与性能优化
系统成功运行后,可以通过以下调整获得更好的开发体验。
5.1 存储空间扩展
默认镜像只使用TF卡的部分空间,通过以下步骤扩展:
fdisk /dev/mmcblk0 # 删除第二个分区后新建(保持起始扇区相同) # 写入更改后退出 resize2fs /dev/mmcblk0p25.2 交换空间设置
对于内存密集型操作,可添加交换文件:
dd if=/dev/zero of=/swapfile bs=1M count=512 chmod 600 /swapfile mkswap /swapfile swapon /swapfile # 添加到/etc/fstab实现开机自动挂载5.3 温度监控
CV1800B芯片在持续负载下可能发热,安装监控工具:
opkg update opkg install lm-sensors sensors-detect --auto然后可以通过sensors命令实时查看温度变化。
常见问题速查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 蓝灯不亮 | 供电不足 | 换用带外接供电的USB集线器 |
| SSH连接超时 | IP地址冲突 | 修改/etc/network/interfaces中的静态IP |
| 编译失败 | 内存不足 | 添加交换空间或减少make的并行任务数 |
| 文件系统只读 | 异常关机 | 运行fsck手动修复 |
从第一次点亮开发板到现在,我已经用Milk-V Duo完成了多个物联网原型开发。最深刻的体会是:遇到问题时不要急于重烧镜像,90%的情况都能通过串口日志找到原因(需额外USB转TTL模块)。建议在/var/log/目录下建立自己的日志收集脚本,这对后期调试会有极大帮助。