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.mfbz.cn/a/618933.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI回答总不满意?你的提问方式可能完全错误!

大家好&#xff0c;我是卷福同学&#xff0c;一个专注AI大模型整活的前阿里程序员&#xff0c;腾讯云社区2023新秀突破作者 向AI提问想写一篇论文&#xff0c;结果AI就生成2000字左右的文章后就完了。小伙伴们是不是也会遇到这类情况呢。今天来教大家AI提示词的技巧&#xff0c…

FANUC机器人故障诊断—报警代码(五)

FANUC机器人故障诊断中关于报警代码的介绍更新如下&#xff1a; 一、报警代码&#xff08;SRVO-214&#xff09; SRVO-214 6轴放大器保险丝熔断 [原因]6轴伺服放大器上的保险丝(FS2,FS3)已熔断。括号内的数字表示在第几台6轴伺服放大器上检测出了保险丝熔断。 [对策] 1.保险…

实现字符串比较函数(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i, result;char s1[100], s2[100];//填充数组&#xff1b;printf("请输入数组s1的…

java线程局部变量使用方式

线程局部变量是Java中用于存储线程本地信息的变量。这种变量仅在线程的生命周期内存在&#xff0c;并且每个线程都有自己的一份拷贝。换句话说&#xff0c;线程局部变量是线程私有的&#xff0c;其他线程无法访问。 使用场景主要包括&#xff1a; 1. 存储线程状态信息&#xff…

医疗行业面临的网络安全挑战及应对策略

网络攻击已经成为各行各业日益严重的威胁&#xff0c;但医疗行业尤其容易受到影响。2023年&#xff0c;医疗领域的黑客事件占数据泄露的79.7%。 医疗领域 虽然患者、医疗服务提供者和决策者都对保护医疗信息有所关注&#xff0c;但关键的弱点在于提供电子健康记录&#xff08;…

【数据结构与算法】力扣 111. 二叉树的最小深度

题目描述 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明&#xff1a; 叶子节点是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a; root [3,9,20,null,null,15,7] 输出&#xff1a; 2示例 2&#…

kettle从入门到精通 第五十九课 ETL之kettle 邮件发送多个附件,使用正则轻松解决

想真正学习或者提升自己的ETL领域知识的朋友欢迎进群&#xff0c;一起学习&#xff0c;共同进步。若二维码失效&#xff0c;公众号后台加我微信入群&#xff0c;备注kettle。 问题场景&#xff1a; 一个朋友说他用kettle将生成好的多个文件&#xff08;a.xls和b.xls&#xff0…

论文笔记模版

1. 摘要 1.1 背景 1.2 挑战 1.3 提出新方法 1.4 贡献 2. 引言 2.1 背景&#xff08;引出问题&#xff09; ①介绍大背景&#xff1a; ② 应用场景&#xff1a; ③ 介绍主题&#xff1a; 2.2 引出挑战 一般用图表来展现出我们的挑战&#xff08;直观&#xff0c;解决什…

[AIGC] redis 持久化相关的几道面试题

文章目录 1. 什么是Redis持久化&#xff1f;2. Redis 的持久化机制是什么&#xff1f;各自的优缺点&#xff1f;2.1 RDB&#xff08;Redis DataBase&#xff09;&#xff0c;快照2.2 AOF&#xff08;Append Only File&#xff09;&#xff0c;日志 3. 优缺点是什么&#xff1f;…

考研OS chap5 I/O管理

目录 一、I/O设备基本概念和分类 304 1.concept 2.classification &#xff08;1&#xff09;根据信息交换单位&#xff08;可能考&#xff09; 1)字符设备 2)块设备 &#xff08;2&#xff09;传输速率&#xff08;以下了解即可&#xff09; &#xff08;3&#xff09;…

《Python编程从入门到实践》day26

# 昨日知识点回顾 添加Play按钮创建Button类绘制按钮开始游戏、游戏结束重制游戏影藏鼠标光标 # 今日知识点学习 14.2 提高等级 14.2.1 修改速度设置 # Settings.py# 加快游戏节奏的速度self.speedup_scale 1.1self.initialize_dynamic_settings()def initialize_dynamic_se…

栈与队列的实现

前言 本次博客将要实现一下栈和队列&#xff0c;好吧 他们两个既可以使用动态数组也可以使用链表来实现 本次会有详细的讲解 栈的实现 栈的基础知识 什么是栈呢&#xff1f; 栈的性质是后进先出 来画个图来理解 当然可不可以出一个进一个呢&#xff0c;当然可以了 比如…

力扣32. 最长有效括号

Problem: 32. 最长有效括号 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.创建一个栈&#xff0c;并将-1先添加到栈中&#xff08;添加-1到栈中只是为了方便接下来的操作&#xff09;&#xff0c;定义int变量len用于记录每一个子有效括号的长度&#xff0c;ma…

专业130+总分400+哈尔滨工程大学810信号与系统考研哈工程水声电子信息通信工程,真题,大纲,参考书。

毕业设计刚搞完&#xff0c;总结一下去年考研的复习经历&#xff0c;希望对大家复习有帮助&#xff0c;考研专业课810信号与系统130总分400&#xff0c;如愿上岸哈工程水声。专业课&#xff1a;130 哈工程水声院810专业课信号与系统难度适中&#xff0c;目前数一难度很高&…

通过内网穿透免费部署我们的springboot+vue项目 实现跟服务器一样的效果

前文讲到通过内网穿透能够实现远程访问个人电脑的静态资源。本文将讲解通过内网穿透实现远程访问本地的项目&#xff0c;实现跟部署到服务器一样的效果&#xff1a;前文链接&#xff1a;通过内网穿透实现远程访问个人电脑资源详细过程&#xff08;免费&#xff09;&#xff08;…

物联网设计竞赛_2_Ubuntu联网配置

采用nat配置 随便定义一个VMnet虚拟网络接口&#xff0c;定义成nat模式 如果主机用的校园网&#xff0c;那么虚拟机发送消息将通过nat转换&#xff0c;转换成用户校园网ip进行发送&#xff0c;发送到校园网路由器再经过nat转换成公网ip访问互联网 点击NAT设置和DHCP设置记录好…

桥梁监控可视化大屏:现代桥梁管理的必备呀。

桥梁监控上可视化有几个重要的原因&#xff1a; 01.实时监控&#xff1a; 可视化的监控系统可以实时显示桥梁的各项监测数据&#xff0c;包括结构变形、振动、温度等&#xff0c;使监控人员能够实时了解桥梁的状态&#xff0c;及时发现异常情况并采取相应的措施。 02.数据分析…

XYCTF - web

目录 warm up ezMake ezhttp ezmd5 牢牢记住&#xff0c;逝者为大 ezPOP 我是一个复读机 ezSerialize 第一关 第二关 第三关 第一种方法&#xff1a; 第二种方法&#xff1a; ez?Make 方法一&#xff1a;利用反弹shell 方法二&#xff1a;通过进制编码绕过 ε…

ChatGPT Reply功能五大使用场景详细解析!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

课堂练习——路由策略

需求&#xff1a;将1.1.1.0/24网段重发布到网络中&#xff0c;不允许出现次优路径&#xff0c;实现全网可达。 在R1上重发布1.1.1.0/24网段&#xff0c;但是需要过滤192.168.12.0/24和192.168.13.0/24在R2和R3上执行双向重发布 因为R1引入的域外路由信息的优先级为150&#xff…