当前位置: 首页 > news >正文

Milk-V Duo移植rt-thread smart

前言

(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)燕十三大佬;

相关文章:

Milk-V Duo移植rt-thread smart

前言 &#xff08;1&#xff09;PLCT实验室实习生长期招聘&#xff1a;招聘信息链接 &#xff08;2&#xff09;首先&#xff0c;我们拿到Milk-V Duo板子之后&#xff0c;我个人建议先移植大核Linux。因为那个资料相对多一点&#xff0c;也简单很多&#xff0c;现象也容易观察到…...

会声会影2024有哪些新功能?好不好用

比如会声会影视频编辑软件&#xff0c;既加入光影、动态特效的滤镜效果&#xff0c;也提供了与色彩调整相关的LUT配置文件滤镜&#xff0c;可选择性大&#xff0c;运用起来更显灵活。会声会影在用户的陪伴下走过20余载&#xff0c;经过上百个版本的优化迭代&#xff0c;已将操作…...

vue3 + axios 中断取消接口请求

前言 最近开发过程中&#xff0c;总是遇到想把正在请求的axios接口取消&#xff0c;这种情况有很多应用场景&#xff0c;举几个例子&#xff1a; 弹窗中接口请求返回图片&#xff0c;用于前端展示&#xff0c;接口还没返回数据&#xff0c;此时关闭弹窗&#xff0c;需要中断接…...

Linux高性能服务器编程——ch6笔记

第6章 高级I/O函数 6.1 pipe函数 用于创建一个管道&#xff0c;以实现进程间通信。 int pipe(int fd[2]); 读端文件描述符fd[0]和写端文件描述符fd[1]构成管道的两端&#xff0c;默认是阻塞的&#xff0c;fd[0]读出数据&#xff0c;fd[1]写入数据。管道内部传输的数据是字节…...

【C语言进阶】文件操作

文件操作 1. 为什么使用文件2. 什么是文件2.1程序文件2.2 数据文件2.3 文件名 3. 文件的打开和关闭3.1 文件指针3.2 文件的打开和关闭 4. 文件的顺序读写4.1 对比一组函数 5. 文件的随机读写5.1 fseek5.2 ftell5.3 rewind 6. 文本文件和二进制文件7. 文件读取结束的判定7.1 被错…...

Redis学习(第八章缓存策略)

目录 RdisExample 课程介绍 1.Redis介绍 2.Redis 安装 3. Redis的数据结构 4. Redis缓存特性 5. Redis使用场景 6. Redis客户端-Jedis 7. Jedis Pipeline 8. Redis缓存策略 学习资料 QA 相关问题 http, socket ,tcp的区别 RdisExample 项目代码地址&#xff1a;htt…...

springboot+vue开发的视频弹幕网站动漫网站

springbootvue开发的视频弹幕网站动漫网站 演示视频 https://www.bilibili.com/video/BV1MC4y137Qk/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 功能&#xff1a; 前台&#xff1a; 首页&#xff08;猜你喜欢视频推荐&#xff09;、轮播图、分类…...

【CSS】常见 CSS 布局

1. 响应式布局 <!DOCTYPE html> <html><head><title>简单的响应式布局</title><style>/* 全局样式 */body {font-family: Arial, sans-serif;margin: 0;padding: 0;}/* 头部样式 */header {background-color: #333;color: #fff;padding: …...

数据结构---HashMap和HashSet

HashMap和HashSet都是存储在哈希桶之中&#xff0c;我们可以先了解一些哈希桶是什么。 像这样&#xff0c;一个数组数组的每个节点带着一个链表&#xff0c;数据就存放在链表结点当中。哈希桶插入/删除/查找节点的时间复杂度是O(1) map代表存入一个key值&#xff0c;一个val值…...

SLAM中相机姿态估计算法推导基础数学总结

相机模型 基本模型 内参 外参 对极几何 对极约束 外积符号 基础矩阵F和本质矩阵E 相机姿态估计问题分为如下两步: 本质矩阵 E t ∧ R Et^{\wedge}R Et∧R因为 t ∧ t^{\wedge} t∧其实就是个3x3的反对称矩阵&#xff0c;所以 E E E也是一个3x3的矩阵 用八点法估计E…...

【RS】遥感影像/图片64位、16位(64bit、16bit)的意义和区别

在数字图像处理中&#xff0c;我们常常会听到不同的位数术语&#xff0c;比如64位、16位和8位&#xff08;64bit、16bit、8bit&#xff09;。这些位数指的是图像的深度&#xff0c;也就是图像中每个像素可以显示的颜色数。位数越高&#xff0c;图像可以显示的颜色数就越多&…...

【单元测试】--基础知识

一、什么是单元测试 单元测试是软件开发中的一种测试方法&#xff0c;用于验证代码中的单个组件&#xff08;通常是函数、方法或类&#xff09;是否按预期工作。它旨在隔离和测试代码的最小单元&#xff0c;以确保其功能正确&#xff0c;提高代码质量和可维护性。单元测试通常…...

golang 反射机制

在 go 语言中&#xff0c;实现反射能力的是 reflect包&#xff0c;能够让程序操作不同类型的对象。其中&#xff0c;在反射包中有两个非常重要的 类型和 函数&#xff0c;两个函数分别是&#xff1a; reflect.TypeOfreflect.ValueOf 两个类型是 reflect.Type 和 reflect.Value…...

【Javascript】创建对象的几种方式

通过字面量创建对象 通过构造函数创建对象 Object()-------------构造函数 通过构造函数来实例化对象 给person注入属性 Factory工厂 this指向的是对象的本身使⽤new 实例化⼀个对象&#xff0c;就像⼯⼚⼀样...

深度学习_3_实战_房价预测

梯度 实战 代码&#xff1a; # %matplotlib inline import random import torch import matplotlib.pyplot as plt # from d21 import torch as d21def synthetic_data(w, b, num_examples):"""生成 Y XW b 噪声。"""X torch.normal(0,…...

HCIA -- 动态路由协议之RIP

一、静态协议的优缺点&#xff1a; 缺点&#xff1a; 1、中大型网络配置量过大 2、不能基于拓扑的变化而实时的变化 优点&#xff1a; 1、不会额外暂用物理资源 2、安全问题 3、计算路径问题 简单、小型网络建议使用静态路由&#xff1b;中大型较复杂网络&#xff0c;建议使用…...

JS常用时间操作moment.js参考文档

Moment.js是一个轻量级的JavaScript时间库&#xff0c;它方便了日常开发中对时间的操作&#xff0c;提高了开发效率。日常开发中&#xff0c;通常会对时间进行下面这几个操作&#xff1a;比如获取时间&#xff0c;设置时间&#xff0c;格式化时间&#xff0c;比较时间等等。下面…...

基于 FFmpeg 的跨平台视频播放器简明教程(九):Seek 策略

系列文章目录 基于 FFmpeg 的跨平台视频播放器简明教程&#xff08;一&#xff09;&#xff1a;FFMPEG Conan 环境集成基于 FFmpeg 的跨平台视频播放器简明教程&#xff08;二&#xff09;&#xff1a;基础知识和解封装&#xff08;demux&#xff09;基于 FFmpeg 的跨平台视频…...

设计模式_备忘录模式

备忘录模式 介绍 设计模式定义案例问题堆积在哪里解决办法备忘录模式行为型模式&#xff0c; 保存了数据某一个时间点的状态 在需要的时候进行回档单机游戏的角色 数据保存并且回档保存和回档加一个状态管理类 类图 代码 MomentData using UnityEngine;public class MomentD…...

双势阱模型

双势阱模型 原子钟 传统的原子钟利用氨分子 由于隧道效应&#xff0c;上顶点的氮原子可以贯穿三个氢原子形成的势垒&#xff0c;到达下顶点对体系注入微波能量后&#xff0c;氮原子在上下定点之间振荡&#xff0c;体系的能量在两个稳定态之间交替变换&#xff0c;其振荡频率决…...

Rust的async闭包与高阶函数在异步编程中的组合使用方式

Rust的async闭包与高阶函数在异步编程中的巧妙组合&#xff0c;为开发者提供了强大的工具来构建高效且灵活的异步代码。异步编程在现代软件开发中越来越重要&#xff0c;尤其是在处理I/O密集型任务时。Rust通过async/await语法和闭包等特性&#xff0c;使得异步代码的编写更加直…...

深入浅出:图解U-Boot FIT镜像签名与验签的完整工作流(附openssl/its/dts关键文件解析)

深入浅出&#xff1a;图解U-Boot FIT镜像签名与验签的完整工作流&#xff08;附openssl/its/dts关键文件解析&#xff09; 在嵌入式系统开发中&#xff0c;确保固件镜像的完整性和真实性至关重要。U-Boot作为嵌入式设备中最常用的引导加载程序之一&#xff0c;其FIT&#xff08…...

用TLE5012磁编码器DIY一个高精度旋转测量模块:硬件连接与Arduino测试

用TLE5012磁编码器打造高精度旋转测量模块&#xff1a;从硬件连接到Arduino实战 磁编码器在工业自动化、机器人关节控制和DIY项目中扮演着关键角色&#xff0c;而英飞凌的TLE5012以其高精度和SPI接口的便利性成为创客们的热门选择。本文将带你从零开始&#xff0c;用Arduino和T…...

从NOIP真题到算法实战:一元三次方程求解的二分法精讲

1. 从NOIP真题看一元三次方程求解的重要性 第一次接触NOIP真题的同学可能会好奇&#xff0c;为什么一元三次方程求解会成为竞赛中的经典题目&#xff1f;这背后其实隐藏着算法竞赛考察的核心能力——数值计算与算法思维的结合。在2001年NOIP提高组的真题中&#xff0c;这道题就…...

在Windows 7 64位系统上从零部署YOLOv3 CPU推理环境:Cygwin配置与Darknet编译实战

1. 环境准备&#xff1a;Windows 7下的特殊挑战 在Windows 7 64位系统上部署YOLOv3的CPU版本&#xff0c;最大的挑战在于这个老旧的系统环境与现代深度学习框架之间的兼容性问题。我去年帮一个工厂的老设备做视觉检测升级时就遇到过类似场景&#xff0c;他们的质检电脑全是Win…...

QSpectrumAnalyzer终极指南:3步掌握多平台SDR频谱分析

QSpectrumAnalyzer终极指南&#xff1a;3步掌握多平台SDR频谱分析 【免费下载链接】qspectrumanalyzer Spectrum analyzer for multiple SDR platforms (PyQtGraph based GUI for soapy_power, hackrf_sweep, rtl_power, rx_power and other backends) 项目地址: https://git…...

5分钟搭建你的PDF内Linux环境:LinuxPDF终极入门指南

5分钟搭建你的PDF内Linux环境&#xff1a;LinuxPDF终极入门指南 【免费下载链接】linuxpdf Linux running inside a PDF file via a RISC-V emulator 项目地址: https://gitcode.com/gh_mirrors/li/linuxpdf LinuxPDF是一个令人惊叹的创新项目&#xff0c;它让你能够在P…...

MyBatis-Plus Samples JSONB字段处理:PostgreSQL高级数据类型实战

MyBatis-Plus Samples JSONB字段处理&#xff1a;PostgreSQL高级数据类型实战 【免费下载链接】mybatis-plus-samples MyBatis-Plus Samples 项目地址: https://gitcode.com/gh_mirrors/my/mybatis-plus-samples MyBatis-Plus Samples是MyBatis-Plus的官方示例项目&…...

3大核心功能解析:Obsidian本地AI助手如何重塑你的隐私优先知识工作流

3大核心功能解析&#xff1a;Obsidian本地AI助手如何重塑你的隐私优先知识工作流 【免费下载链接】obsidian-local-gpt Local Ollama and OpenAI-like GPTs assistance for maximum privacy and offline access 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-local-…...

从网卡到GPU:拆解Linux PCIe驱动框架,看`pci_driver`结构体如何统一管理五花八门的硬件

从网卡到GPU&#xff1a;拆解Linux PCIe驱动框架的核心设计哲学 在Linux内核的世界里&#xff0c;PCIe设备驱动开发就像一场精心编排的交响乐——无论乐器是网卡、GPU还是NVMe SSD&#xff0c;指挥家pci_driver结构体都能让它们和谐共处。这种"一套框架管理百样硬件"…...