全部文档
OneOS简介 硬件支持 编译构造工具 API参考文档 高级语言 用户编程手册 应用笔记 FAQ

RAMDISK


简介

RAMDISK即虚拟内存盘,它是通过软件将一部分内存(RAM)模拟为磁盘(DISK)来使用。相对于直接的硬盘文件访问来说,它可以极大的提高文件访问速度。但是RAM的易失性也意味着当关闭电源后这部分数据将会丢失,所以一般用来存储临时文件。RAMDSIK有以下特点:

  • 使用RAM模拟成块设备,访问速度快,且可以频繁读写,但是掉电消失。

  • 任何在磁盘上面可以运行的文件系统,都可以在RAMDISK上面运行。例如在本操作系统中,可以在RAMDISK上面运行FATFS、CUTEFS等。


API列表

接口 说明
ramdisk_dev_init 静态初始化RAMDISK,需要使用者给出RAMDISK的地址空间
ramdisk_dev_deinit 反初始化RAMDISK,与ramdisk_dev_init()配合使用
ramdisk_dev_create 动态创建并初始化RAMDISK,RAMDISK的地址空间由该接口动态申请
ramdisk_dev_destroy 销毁RAMDISK,并释放对应的内存空间,与ramdisk_dev_create()配合使用

ramdisk_dev_init

该函数用于静态初始化RAMDISK,需要使用者给出具体的RAMDISK的地址空间,函数原型如下:

os_err_t ramdisk_dev_init(ramdisk_dev_t *ram_dev, void *addr, const char *name, os_uint32_t size, os_uint32_t block_size);
参数 说明
ram_dev RAMDISK句柄,由使用者提供
addr RAMDISK的起始地址,由使用者提供
name RAMDISK设备名字
size RAMDISK总的空间大小
block_size RAMDISK每个块的大小

ramdisk_dev_deinit

该函数用于反初始化RAMDISK,与ramdisk_dev_init()配合使用,函数原型如下:

void ramdisk_dev_deinit(ramdisk_dev_t* ram_dev);
参数 说明
ram_dev RAMDISK句柄,为ramdisk_dev_init()时使用的句柄
返回 说明

ramdisk_dev_create

该函数用于动态创建并初始化RAMDISK,RAMDISK的地址空间由该接口动态申请,函数原型如下:

ramdisk_dev_t *ramdisk_dev_create(const char *name, os_uint32_t size, os_uint32_t block_size);
参数 说明
name RAMDISK设备名字
size RAMDISK总的空间大小
block_size RAMDISK每个块的大小
返回 说明
非OS_NULL 创建成功
OS_NULL 创建失败

ramdisk_dev_destroy

该函数用于销毁RAMDISK,并释放对应的内存空间,与ramdisk_dev_create()配合使用,函数原型如下:

void ramdisk_dev_destroy(ramdisk_dev_t *ram_dev);
参数 说明
ram_dev RAMDISK句柄,为ramdisk_dev_create()时返回的句柄
返回 说明

使用示例

本示例演示了RAMDISK的静态初始化和反初始化,一般RAMDISK配合实际的文件系统使用,示例代码如下:

#include <oneos_config.h>
#include <os_dbg.h>
#include <shell.h>
#include <os_errno.h>
#include <ramdisk.h>
#include <vfs_posix.h>

#define TEST_TAG            "TEST"

#define RAMDISK_NAME        "ramdisk0"
#define RAMDISK_SIZE        (25*1024)
#define RAMDISK_BLK_SIZE    512

char ramdisk_addr[RAMDISK_SIZE];
struct ramdisk_device ramdisk_dev;

static void test_ramdisk_init(void)
{
    if(OS_EOK != ramdisk_dev_init(&ramdisk_dev, &ramdisk_addr, RAMDISK_NAME, RAMDISK_SIZE, RAMDISK_BLK_SIZE))
    {
        LOG_E(TEST_TAG, "ramdisk init failed.");
        return;
    }
    LOG_W(TEST_TAG, "ramdisk init success.");

    if (0 != vfs_mount(RAMDISK_NAME, "/", "cute", 0, 0))
    {
        LOG_E(TEST_TAG, "cutefs mount failed.");
        return;
    }
    LOG_W(TEST_TAG, "cutefs mount success.");
}
SH_CMD_EXPORT(ramdisk_init, test_ramdisk_init, "test init ramdisk");

static void test_ramdisk_deinit(void)
{
    LOG_W(TEST_TAG, "filesystem unmount, and ramdisk deinit.");
    vfs_unmount("/");
    ramdisk_dev_deinit(&ramdisk_dev);
}
SH_CMD_EXPORT(ramdisk_deinit, test_ramdisk_deinit, "test deinit ramdisk");

运行结果如下:

sh />ramdisk_init
W/RAMDISK tshell: create ramdisk device:ramdisk0 successfully
W/TEST tshell: ramdisk init success.
I/VFS_FS tshell: Mount cute to /
W/TEST tshell: cutefs mount success.
sh />
sh />ls
Directory /:
sh />
sh />ramdisk_deinit
W/TEST tshell: filesystem unmount, and ramdisk deinit.
sh />
sh />ls
No such directory
sh />

results matching ""

    No results matching ""

    返回顶部