rt-thread 挂载romfs与ramfs

参考:

https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/qemu-network/filesystems/filesystems?id=%e4%bd%bf%e7%94%a8-romfs

https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/qemu-network/filesystems/filesystems?id=%e4%bd%bf%e7%94%a8-ramfs

前言:

适用于需要简单测试文件操作,且具备足够的ram/rom空间的场景(不依赖特定硬件,能跑rtthread就行)

因为板子上未带spi flash/SD卡,片内flash驱动还未完善 ,懒得移植fal就随便折腾下

1.创建并挂载ramfs:

使用rtthread studio,配置勾选dfs和ramfs
在这里插入图片描述

将如下代码加入工程,即可自动挂载ramfs,使用动态内存或静态分配内存均可,挂载到根目录即可操作

  • 使用静态数组可以指定ram的地址,并略微减小内存管理开销;缺陷是该部分内存空间将一直占用无法释放
int fs_test(void)
{
//    if (dfs_mount(RT_NULL, "/ram", "ram", 0, dfs_ramfs_create(rt_malloc(8192),8192)) == 0) // 动态申请内存作为ramfs的存储空间static char ramfs_buf[8192];if (dfs_mount(RT_NULL, "/", "ram", 0, dfs_ramfs_create(ramfs_buf,sizeof(ramfs_buf))) == 0) // 使用静态分配的内存空间{rt_kprintf("RAM file system initializated!\n");}else{rt_kprintf("RAM file system initializate failed!\n");}return 0;
}
INIT_APP_EXPORT(fs_test);
  • ramfs无法操作创建文件夹,猜想rtt的ramfs设计比较简单,未实现文件夹操作

在这里插入图片描述

2. 创建并挂载romfs:

使用rtthread studio,配置勾选dfs和ramfs

在这里插入图片描述

修改加入工程的fs_test函数,即可自动挂载romfs

#include <dfs_romfs.h>
int fs_test(void)
{if (dfs_mount(RT_NULL, "/", "rom", 0, &(romfs_root)) == 0){rt_kprintf("ROM file system initializated!\n");}else{rt_kprintf("ROM file system initializate failed!\n");}
}
INIT_APP_EXPORT(fs_test);

编译到romfs的文件和文件夹在romfs.c,结构很直观,与文件系统相同的树形结构

在这里插入图片描述

下载运行

在这里插入图片描述

也可以参考官方说明,使用rt-thread/tools/mkromfs.py脚本来打包生成romfs,这里不再赘述

  • romfs是只读文件系统,所以创建文件/创建文件夹等操作不可用,适合存放无需被修改的文件,或创建文件夹作为其他文件系统的挂载点

3.同时挂载romfs和ramfs

在romfs.c新建文件夹/ramfs作为ramfs的挂载点:
(也可以在romfs.c中新建/romfs /ramfs等文件夹,分别作为相应文件系统的挂载点)
在这里插入图片描述

修改加入工程的fs_test函数

#include <dfs_romfs.h>
int fs_test(void)
{if (dfs_mount(RT_NULL, "/", "rom", 0, &(romfs_root)) == 0){rt_kprintf("ROM file system initializated!\n");}else{rt_kprintf("ROM file system initializate failed!\n");}static char ramfs_buf[8192];if (dfs_mount(RT_NULL, "/ramfs", "ram", 0, dfs_ramfs_create(ramfs_buf,8192)) == 0) // 挂载ramfs到/ramfs{rt_kprintf("RAM file system initializated!\n");}else{rt_kprintf("RAM file system initializate failed!\n");}
}
INIT_APP_EXPORT(fs_test);

在这里插入图片描述

完结撒花✿✿ヽ(°▽°)ノ✿

1.1 彩蛋

挂载ramfs,并使用ymodem传输文件

需要挂载ramfs到根目录,并配置ymodem和文件传输特性
在这里插入图片描述

  • 用ramfs是因为ramfs可读写;而挂载在根目录是因为ry命令接收的文件默认写入根目录,且未提供指定文件路径的方式(除非修改ymodem源码)

终端需要使用secureCRT/xshell,(注意mobaxterm不支持ymodem)

以前者为例,输入ry命令并执行,选择传输/发送ymodem,选中要传输的文件即可

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

看完了,点个赞再走吧 : )

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

香港虚拟主机哪里可以试用?用于企业建站的

香港虚拟主机适合个人、企业建站&#xff0c;包括外贸企业网站、个人博客网站、中小企业官网等&#xff0c;那么作为新手不知道哪家香港虚拟主机好用的时候&#xff0c;该如何找到可以试用的香港虚拟主机呢&#xff1f; 香港虚拟主机也称作香港空间、香港虚拟空间&#xff0c;…

DS:时间复杂度和空间复杂度

欢迎各位来到 Harper.Lee 的学习世界&#xff01; 博主主页传送门&#xff1a;Harper.Lee的博客主页 想要一起进步的uu欢迎来后台找我哦&#xff01; 本片博客主要介绍的是数据结构中关于算法的时间复杂度和空间复杂度的概念。 一、算法 1.1 什么是算法&#xff1f; 算法(Alg…

QT--2

Qt界面设计 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//窗口相关设置this->resize(680,520);this->setFixedSize(680,520);this->setWindowTitle("Tim");this->setWindowFla…

Linux进程控制——Linux进程终止

前言&#xff1a;前面了解完前面的Linux进程基础概念后&#xff0c;我们算是解决了Linux进程中的一大麻烦&#xff0c;现在我们准备更深入的了解Linux进程——Linux进程控制&#xff01; 我们主要介绍的Linux进程控制内容包括&#xff1a;进程终止&#xff0c;进程等待与替换&a…

【机器学习数据可视化-04】Pyecharts数据可视化宝典

一、引言 在大数据和信息爆炸的时代&#xff0c;数据可视化成为了信息传递和展示的关键手段。通过直观的图表和图形&#xff0c;我们能够更好地理解数据&#xff0c;挖掘其背后的信息。Pyecharts&#xff0c;作为一款基于Python的数据可视化库&#xff0c;凭借其丰富的图表类型…

数据结构-二叉树-红黑树

一、红黑树的概念 红黑树是一种二叉搜索树&#xff0c;但在每个节点上增加一个存储位表示节点的颜色&#xff0c;可以是Red或者BLACK&#xff0c;通过对任何一条从根到叶子的路径上各个节点着色方式的限制&#xff0c;红黑树确保没有一条路径会比其他路径长出两倍&#xff0c;…

Crossplane 实战:构建统一的云原生控制平面

1 什么是 Crossplane Crossplane 是一个开源的 Kubernetes 扩展&#xff0c;其核心目标是将 Kubernetes 转化为一个通用的控制平面&#xff0c;使其能够管理和编排分布于 Kubernetes 集群内外的各种资源。通过扩展 Kubernetes 的功能&#xff0c;Crossplane 对 Kubernetes 集群…

Go实现树莓派读取at24c02 eeprom读写数据

步骤 启用i2c 参考 Go实现树莓派读取bh1750光照强度 代码 package mainimport ("fmt""periph.io/x/conn/v3/i2c" )type AT24C02Device struct {dev *i2c.Dev }func NewAT24C02Device(addr uint16, bus i2c.BusCloser) (*AT24C02Device, error) {var (d…

利用github pages建立Serverless个人博客

利用github pages建立Serverless个人博客 概述 使用github pages&#xff0c;可以在github上部署静态网站。利用这个功能&#xff0c;可以很方便地实现个人博客的发布托管。 比如我的个人博客&#xff1a;Buttering’s Blog 对应代码仓库&#xff1a;buttering/EasyBlog: 自…

Ubuntu20.4部署Cuda12.4

准备Ubuntu20.4 VM 安装Cuda12.4 1.进入如下界面安装安装Cuda12.4版本&#xff1a; CUDA Toolkit 12.4 Update 1 Downloads | NVIDIA Developerhttps://developer.nvidia.com/cuda-downloads?target_osLinux&target_archx86_64&DistributionUbuntu&target_vers…

图像分割各种算子算法-可直接使用(Canny、Roberts、Sobel)

Canny算子&#xff1a; import numpy as np import cv2 as cv from matplotlib import pyplot as pltimg cv.imread("../test_1_1.png") edges cv.Canny(img, 100, 200)plt.subplot(121),plt.imshow(img,cmap gray) plt.title(Original Image), plt.xticks([]), …

TC3xx MTU概述(1)

目录 1.MTU基本功能 2.MBIST 3.小结 1.MTU基本功能 在TC3xx中&#xff0c;MTU(Memory Unit Test)被用来管理控制芯片内部各种RAM的测试、初始化和数据完整性检查。 既然MTU主要是管理和控制&#xff0c;那干活的想必另有他人。所以在该平台中&#xff0c;我们可以看到SRAM…

(Java)心得:LeetCode——19.删除链表的倒数第 N 个节点

一、原题 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[]示例 3&…

C++ 指针 参数 静态 常 友元与组合概念

一 类类型作为函数参数 1 类类型作参数类型的三种方式 1&#xff09; 对象本身作为参数 由于C采用传值的方式传递参数&#xff0c;因此使用对象本身参数时&#xff0c;形参是实参的一个拷贝。在这种情况下&#xff0c;最好显式地为类定义一个拷贝构造函数&#xff0c;以免出…

图论专题训练

leecode 547 并查集 class Solution { public:int findCircleNum(vector<vector<int>>& isConnected) {ini();int len isConnected.size();for(int i0;i<len;i){for(int j0;j<len;j)if(isConnected[i][j]){unio(i,j);}}int ans 0;for(int i0;i<len;…

面试集中营—Redis面试题

一、Redis的线程模型 Redis是基于非阻塞的IO复用模型&#xff0c;内部使用文件事件处理器&#xff08;file event handler&#xff09;&#xff0c;这个文件事件处理器是单线程的&#xff0c;所以Redis才叫做单线程的模型&#xff0c;它采用IO多路复用机制同时监听多个socket&a…

Obsidian/Typora设置图床

在obsidian中默认图片是保存在本地的&#xff0c;但是在要导出文档上传到网上时&#xff0c;由于图片保存在本地&#xff0c;会出现无法加载图片的问题。 这里引用的一段话&#xff1a; 这里使用picgo-core和gitee实现图床功能&#xff0c; 参考1&#xff1a; Ubuntu下PicGO配…

【半个月我拿下了软考证】软件设计师高频考点--系统化教学-关系模式

&#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软件设计师考点暴击 ⭐&#x1f170;️进入狂砍分⭐ ⭐软件设计师高频考点文档&#xff0c; ⭐软件设计师高频考点专栏 ⭐软件设计师高频考点⭐ &#x1f3b6;&#xff08;A) 考点1,关系模式 考点&#xff1a; 三个模式相…

AI算法-高数5-线性代数1-基本概念、向量

线性代数&#xff1a;主要研究1、张量>CV计算机视觉 2、研究张量的线性关系。 深度学习的表现之所以能够超过传统的机器学习算法离不开神经网络&#xff0c;然而神经网络最基本的数据结构就是向量和矩阵&#xff0c;神经网络的输入是向量&#xff0c;然后通过每个矩阵对向量…

Calendar 366 II for Mac v2.15.5激活版:智能日历管理软件

在繁忙的工作和生活中&#xff0c;如何高效管理日程成为了许多人的难题。Calendar 366 II for Mac&#xff0c;作为一款全方位的日历管理软件&#xff0c;以其独特的功能和优秀的用户体验&#xff0c;成为您的日程好帮手。 Calendar 366 II for Mac支持多种视图模式&#xff0c…