Milk-V Duo移植rt-thread smart

本文转载自:Milk-V Duo移植rt-thread smart-CSDN博客 ,原作者是:风正豪

前言

(1)PLCT实验室实习生长期招聘:招聘信息链接
(2)首先,我们拿到Milk-V Duo板子之后,我个人建议先移植大核Linux。因为那个资料相对多一点,也简单很多,现象也容易观察到。等移植完大核Linux,测试板子没有问题之后,再根据你个人需求再来移植rt-thread smart。
Linux的SDK相关移植教程:Milk-V Duo快速上手
(3)事先叠甲,因为我不清楚看本博客的人具体什么水平。本人移植过程踩了很多坑,为了方便和我一样的小白选手最快程度上手,所以废话会很多。大佬们如果感觉浪费生命,可以关闭此篇博客,移步到燕十三文章。
燕十三博客:milk-v duo rt-smart 编译运行

前期准备工作

准备USB转TTL模块

(1)因为移植rt-thread smart是串口0输出的数据,而Milk-V Duo的TYPE-C是直接连接的USB口,而不是采用的板子集成USB转串口连接的串口。因此,我们需要提前准备好一个USB转TTL(也称USB转串口)模块。
(2)当时这里我卡了好久,一直以为是Milk-V Duo的TYPE-C输出数据,所以各位一定一定要实现购买好这个模块。购买好这个模块之后,还需要在电脑端装载相关驱动
(3)装载USB转TTL的驱动教程:请看关于ESP32S3无法识别到端口问题使用CH340连接ESP32BOX****方案部分。

如何接线

(1)USB转TTL模块和Milk-V Duo接线:
<1>GND — GND
<2>RX — GPIOA16
<3>TX — GPIOA17
(2)拿一根手机Typec充电线插上Milk-V Duo。


烧录镜像

准备教程编译工具链

(1)将下面这个网址输入进浏览器,下载riscv64-linux-musleabi_for_x86_64-pc-linux-gnu.tar.bz2
https://github.com/RT-Thread/toolchains-ci/releases/download/v1.7/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2

(2)将riscv64-linux-musleabi_for_x86_64-pc-linux-gnu.tar.bz2传输到Linux的/opt目录,移动过程中,可能需要root权限。关于Windows和Linux文件传输可以选择Samba,或者FileZilla。我个人比较喜欢Samba,Samba的相关配置教程:Ubuntu与window实现文件共享——Samba使用
(3)输入如下指令,等待解压产生riscv64-linux-musleabi_for_x86_64-pc-linux-gnu_latest。

tar -xvf riscv64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2

(4)如何是按照上述步骤来的,放在/opt目录下,那么最后的下面这条指令无需理会。如果没有,则需要按照下面指令输入到命令行中。

export RTT_EXEC_PATH= 你的交叉编译工具链的存放路径/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu/bin

编译镜像文件

(1)按照如下步骤依次执行即可。(本人是Ubuntu 20.04版本,编译环境是否会导致结果不同,本人并不了解)

git clone --progress --recursive -v GitHub - RT-Thread/rt-thread: RT-Thread is an open source IoT real-time operating system (RTOS).
cd rt-thread/bsp/cv1800b/
scons --menuconfig

弹出menuconfig控制界面之后,退出即可。

source ~/.env/env.sh
pkgs --update
scons -j10
./mksdimg.sh

(2)这里有两个坑可能需要注意:
<1>GitHub毕竟是在外网,可能仓库拉取失败。如果你Windows中已经有了魔法,可参考Ubuntu虚拟机共享主机VPN(适用于NAT或桥接),让Linux环境也有魔法。
<2>最终的scons -j10有可能出现报错:
/home/zyx/Desktop/test/rt-thread/components/libc/compilers/common/ctime.c:863: undefined reference to ‘rt_work_submit’ 。

(3)如果scons -j10出现如上报错,执行下面语句,进行git版本回退。

git reset --hard c78f64689142cd36357edbe8db3b60a3c5c00e07

(4)如果有同学不能理解为什么是执行上面的版本回退指令,我解释一下。
<1>首先,大佬在编写readme文件的时候,肯定是已经对仓库进行了一次确认,那么只需要回退到readme文件提交时刻即可。
<2>进入readme文件,找到下图的历史按钮。

<3>按照下图单击,即可知道要回退的版本号为c78f64689142cd36357edbe8db3b60a3c5c00e07。版本回退之后,再执行如下命令。

scons --menuconfig
# 弹出menuconfig控制界面之后,退出即可。
source ~/.env/env.sh
pkgs --update
scons -j10
./mksdimg.sh

烧录镜像

(1)烧录镜像的话,我是在Windows环境中执行的。所以需要将fip.bin 和 boot.sd传输到Windows中。

(2)首先自行下载DiskGenius软件,将TF卡插入读卡器,然后插上电脑。



(3)之后点击确定,分区完成之后。他将会弹出两个盘,一个boot盘和一个roottfs盘。将编译产生的fip.bin 和 boot.sd传入进入boot盘。
image

上机测试

测试流程

(1)插上USB转TTL模块,不要插上Typec接口,此时能够看到板子上的LED亮。

(2)我这边推荐使用MobaXterm软件,或者友善串口调试助手。因为他的这个波特率是非常规的117200。当时我知道是这个波特率的时候,还懵了一下,据说是Milk-V Duo的串口0有点小问题。但是,我个人建议先测试115200,因为当你看到这篇博客的时候,很可能官方已经修复这个bug。

<1>友善串口调试助手的配置。

<2>MobaXterm的配置。

(3)配置好之后,连接串口,你可能能够看到满屏幕的C.字符的打印。(注意,没看到也不用慌,直接往下做)

(4)此时插上Typec接口,之后串口端就能够打印正常的数据了。

出现如上现象的可能性

(1)上机测试部分卡了我好久,一直在想怎么打印乱码,后面发现是没有插上Typec接口的原因。
<1>插上USB转TTL模块之后,USB转TTL模块能够通过Milk-V Duo的UART0_RX引脚给核心板供电,从而板子上的LED是亮的。
<2>但是USB转TTL模块的灌电流终归是有限的,因此,功率提不上来,无法完全启动Milk-V Duo。就会出现,串口一直打印C.的情况,如果没有打印C.就是说明你的USB转TTL模块的灌电流连打印C.的电流都提不上来(苦笑)。
<3>插上Typec接口之后,功率成功提上来了,因此能够成功完全带动板子启动,于是打印了正确的串口信息。
(2)关于我成功发现这个问题的过程,首先需要感谢肯哥及其肯哥交流群里面的自闭佬建议。
<1>根据自闭佬的建议,我接上Typec,然后使用逻辑分析仪抓取串口的数据,发现没有电平变化。
<2>此时拔下逻辑分析仪,插上USB转TTL模块,发现上位机没有数据打印。
<3>拔下所有东西,插上USB转TTL模块,发现出现了C.字符打印。然后再插上Typec,出现了正常的数据。
<4>后面从肯哥那里得知,USB转TTL模块所能够提供的电流有限,功率提不上来。所以这里可能是功率问题,而我只简单的关注了电压。
(3)为什么逻辑分析仪抓不到电平变化,但是串口有数据打印?这个理由很简单,因为我先插上的Typec,板子已经成功启动,此时板子的串口进入静默状态,因此逻辑分析仪上才没有电平变化。如果想要抓取电平变化,需要先插上逻辑分析仪开始捕获电平,然后再插上Typec。

参考文章

(1)Milk-V Duo快速上手
(2)关于ESP32S3无法识别到端口问题
(3)燕十三博客:milk-v duo rt-smart 编译运行
(4)Ubuntu虚拟机共享主机VPN(适用于NAT或桥接)
(5)如何删除存储卡分区并重新分区
(6)DiskGenius下载网址

感谢人员

(1)肯哥
(2)肯哥交流群里面的自闭佬(自闭佬似乎没有博客主页,只能用群昵称替代,苦笑);