MISC分区读写参考

Version 1.0


1. 概述

FreeRTOS SDk 提供了一个misc.fwfs分区,用于存放运行时需要的文件。比如屏参文件、iq bin文件等。本文将会介绍如何在rtos代码中实现对misc.fwfs分区的读写。


2. MISC分区介绍

misc分区的文件系统类型是firmware fs,系统起来后会自动mount到'/mnt/MISC'下面。我们封装了一组API用于读写misc.fwfs分区,头文件是cam_fs_wrapper.h,主要api如下:

  • CamFsRet_e CamFsMount(CamFsFmt_e fmt, const char *szPartName, const char *szMntPath); // mount a file system

    功能:

    mount一个文件系统

    参数介绍:

    fmt: 文件系统格式,misc分区请用宏MISC_FILESYSTEM // #define MISC_FILESYSTEM CAM_FS_FMT_FIRMWAREFS

    szPartName: 分区名字,如“MISC”

    szMntPath: mount路径,如”/mnt/MISC”

  • CamFsRet_e CamFsUnmount(const char *szMntPath); // unmount file system

    功能:

    unmount 一个文件系统

    参数介绍:

    szMntPath: mount路径,如“/mnt/MISC”

  • CamFsRet_e CamFsOpen(CamFsFd *ptFd, const char *szPath, u32 nFlag, u32 nMode);

    功能:

    打开一个文件

    参数介绍:

    ptFD: File Descriptor

    szPath: 文件路径

    nFlag: 文件打开模式,可选的有O_CREAT/O_RDWR/O_RDONLY/O_WRONLY等,参考cam_fs_wrapper.h

    nMode: 文件访问模式,类似Linux chmod功能

  • CamFsRet_e CamFsClose(CamFsFd tFd);

    功能:

    关闭一个文件

    参数介绍:

    tFD: File Descriptor

  • S32 CamFsRead(CamFsFd tFd, void *pBuf, u32 nCount);

    功能:

    读文件

    参数介绍:

    tFD: File descriptor

    pBuf: 用于存放读数据的buf首地址

    nCount: 要去读的字节数

  • S32 CamFsWrite(CamFsFd rFd, const void *pBuf, u32 nCount);

    功能:

    写文件

    参数介绍:

    tFD: File descriptor

    pBuf: 存放即将写入数据的首地址

    nCount: 写入字节数

  • S32 CamFsSeek(CamFsFd tFd, u32 nOffset, u32 nWhence);

    功能:

    设定文件的读写偏移量

    参数:

    tFD: File descriptor

    nOffset: 以nWhence为开始的偏移量

    nWhence: 做为nOffset的基础偏移量,常用的有SEEK_SET/SEEK_CUR/SEEK_END


3. demo

void rw_test()

{

    char buf[64] = { 0 };

    u32 file_size = 0;

    CamFsFd tFD;

    const char *str = “Hello World!”;

    u8 i = 0;

    const char *path = “/mnt/MISC/test.txt”;

    memset(buf, 0, sizeof(buf));

    //open file

    CamFsOpen(&tFD, path, O_RDWR|O_CREAT, 0777);

    CamFsWrite(tFD, str, strlen(str));

    file_size = CamFsSeek(tFD, 0 , SEEK_END);

    CamFsRead(tFD, buf, file_size);

    CamFsClose(tFD);

}