Milk-V Duo移植rt-thread smart

news2024/9/22 9:48:39

前言

(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 https://github.com/RT-Thread/rt-thread.git
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.binboot.sd传输到Windows中。

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

上机测试

测试流程

(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)肯哥交流群里面的自闭佬(自闭佬似乎没有博客主页,只能用群昵称替代,苦笑);
(3)燕十三大佬;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1122435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK3568平台 GPIO子系统框架

一.gpio 子系统简介 gpio 子系统顾名思义&#xff0c;就是用于初始化 GPIO 并且提供相应的 API 函数&#xff0c;比如设置 GPIO为输入输出&#xff0c;读取 GPIO 的值等。gpio 子系统的主要目的就是方便驱动开发者使用 gpio&#xff0c;驱动 开发者在设备树中添加 gpio 相关信…

什么是网络编程?Java如何实现?三次握手和四次挥手?

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ Java网络编程 什么是网络编程&#xff1f;Java…

PAM从入门到精通(二十)

接前一篇文章&#xff1a;PAM从入门到精通&#xff08;十九&#xff09; 本文参考&#xff1a; 《The Linux-PAM Application Developers Guide》 先再来重温一下PAM系统架构&#xff1a; 更加形象的形式&#xff1a; 七、PAM-API各函数源码详解 前边的文章讲解了各PAM-API函…

SAP MM学习笔记38 - 入库/请求自动决济(ERS - Evaluated Receipt Settlement)

之前的章节学习了请求书的方方面面&#xff0c;这一章来个终章&#xff0c;入库/请求自动决济&#xff1a;&#xff09;。 1&#xff0c;什么是 ERS ERS&#xff0c;即 入库/请求自动决济&#xff0c;是 自動決済&#xff08;Automatic Settlement&#xff09;功能的一种。 以…

深入理解C++红黑树的底层实现及应用

文章目录 1、红黑树简介1.1 、概述&#xff1a;介绍红黑树的定义、特点和用途。 2、红黑树节点的定义3、红黑树结构3.1、红黑树的插入操作 4、红黑树的验证4.1、红黑树的删除4.2、红黑树与AVL树的比较4.3、红黑树的应用 5、总结 1、红黑树简介 1.1 、概述&#xff1a;介绍红黑…

视频剪辑教程:批量修改视频尺寸的简单方法

如果您需要批量修改大量视频的尺寸&#xff0c;这是一项繁琐且耗时的任务。但是&#xff0c;使用固乔剪辑助手&#xff0c;您可以通过简单的几个步骤轻松实现这一需求。下面是如何使用固乔剪辑助手来批量修改视频尺寸的步骤&#xff1a; 步骤1&#xff1a;导入视频素材 首先&am…

【Solidity】智能合约案例——②供应链金融合约

目录 一、合约源码分析&#xff1a; 二、合约整体流程&#xff1a; 1.部署合约&#xff1a; 2.添加实体 3.发送交易存证 ①.银行向公司交易&#xff08;公司向银行提供交易存证&#xff09; ②.公司向银行交易&#xff08;银行向公司提供交易存证&#xff09; ③.公司向公司交…

git(部分)

1、git三个区域&#xff1a;工作区&#xff0c;暂存区&#xff0c;版本库 2、git文件状态&#xff1a;未跟踪&#xff0c;已跟踪&#xff08;新添加&#xff0c;未修改&#xff0c;已修改&#xff09; 如何查看暂存区和工作区文件状态&#xff1a;git status -s 3、查看版本记…

【Java】Java 17 新特性概览

Java 17 新特性概览 1. Java 17 简介2. Java 17 新特性类型推断 - 新的 var 关键字垃圾回收器改进JEP 356 增强的伪随机数生成器&#xff08;1&#xff09;提供了一个新接口 RandomGenerator&#xff08;2&#xff09;提供了一个新类 RandomGeneratorFactory&#xff08;3&…

高校教务系统登录页面JS分析——西安科技大学

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文&#xff0c;你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习&#xff0c;勿用于非法用途。 一、密码加…

42908-2023 纺织染整助剂产品中有机卤素含量的测定

1 范围 本文件描述了纺织染整助剂产品中有机卤素含量的测定方法。 本文件适用于各类纺织染整助剂中有机卤素含量的测定&#xff0c;包括有机氟、有机氯、有机溴。 2 规范性引用文件 下列文件中的内容通过文中的规范性引用而构成本文件必不可少的条款。其中&#xff0c;注日…

自然语言处理---Transformer模型

Transformer概述 相比LSTM和GRU模型&#xff0c;Transformer模型有两个显著的优势&#xff1a; Transformer能够利用分布式GPU进行并行训练&#xff0c;提升模型训练效率。 在分析预测更长的文本时&#xff0c;捕捉间隔较长的语义关联效果更好。 Transformer模型的作用 基于seq…

香港科技大学广州|先进材料学域博士招生宣讲会—上海专场!!!(暨全额奖学金政策)

香港科技大学广州&#xff5c;先进材料学域博士招生宣讲会—上海专场&#xff01;&#xff01;&#xff01;&#xff08;暨全额奖学金政策&#xff09; “跨学科融合创新&#xff0c;引领新兴与未来行业的突破与发展——先进材料学域” &#xfffd;&#xfffd;&#xfffd;…

深入理解多线程编程和 JVM 内存模型

文章目录 1. 理解进程和线程的概念进程&#xff08;Process&#xff09;线程&#xff08;Thread&#xff09; 2. 理解竞态条件和死锁竞态条件&#xff08;Race Condition&#xff09;死锁&#xff08;Deadlock&#xff09; 3. JVM 内存模型堆&#xff08;Heap&#xff09;栈&am…

正规文法、正规式、确定的有穷自动机DFA、不确定的有穷自动机NFA 的概念、区分以及等价性转换【我直接拿下!】

文章目录 正规文法正规式有穷自动机确定的有穷自动机——DFA不确定的有穷自动机——NFADFA 与 NFA 的区分 正规式转换为正规文法正规文法转换为正规式NFA 转换为 DFANFA 最小化 NFA 转换为正规式正规式转换为 NFA正规文法转换为 NFANFA 转换为正规文法 前言&#xff1a; 在学习…

C语言--程序环境和预处理(宏)

目录 前言 本章重点&#xff1a; 1. 程序的翻译环境和执行环境 2. 详解编译链接 2.1 翻译环境​编辑 2.2 编译本身也分为几个阶段 2.3 运行环境 3. 预处理详解 3.1 预定义符号 3.2 #define 3.2.1 #define 定义标识符 3.2.2 #define 定义宏 2.2.3 #define 替换规则 …

fetch网络请求详解

一&#xff1a;三种常见的网络请求对比&#xff1a; AJAX&#xff1a;基于XMLHttpRequest收发请求&#xff0c;使用较为繁琐&#xff0c;代码量会比较多axios&#xff1a;基于promise的请求客户端&#xff0c;在浏览器和node中均可使用&#xff0c;使用便捷&#xff0c;功能强…

系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第五部分:支付系统

本心、输入输出、结果 文章目录 系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第五部分&#xff1a;支付系统前言如何学习支付系统信用卡为什么被称为“银行最赚钱的产品”&#xff1f;VISA/万事达卡如何赚钱&#xff1f;步骤说明为什么开证行应该得到补偿 当我们在商家…

Linux中的开发工具(yum,vim,gcc/g++,gdb,Makefile,git)

文章目录 1. Linux软件包管理器——yumyum 语法yum 常用命令安装 yum 仓库源 2. Linux编辑器——vimvim 的五种常用模式模式切换vim 基本操作命令模式命令集&#xff08;1&#xff09;光标命令&#xff08;2&#xff09;复制粘贴命令&#xff08;3&#xff09;撤销与重做&#…