当前位置:   article > 正文

rt-thread 挂载romfs与ramfs_romfs写入

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-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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

编译到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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

在这里插入图片描述

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

1.1 彩蛋

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

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

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

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/779870
推荐阅读
相关标签
  

闽ICP备14008679号