rt-thread icon indicating copy to clipboard operation
rt-thread copied to clipboard

[Bug] DFS_V2 无法在非smart环境下编译通过

Open wdfk-prog opened this issue 1 year ago • 1 comments

RT-Thread Version

master

Hardware Type/Architectures

STM32H750

Develop Toolchain

MDK Keil

Describe the bug

  1. 使用配置如下
/* DFS: device virtual file system */

#define RT_USING_DFS
#define DFS_USING_POSIX
#define DFS_USING_WORKDIR
#define DFS_FD_MAX 64
#define RT_USING_DFS_V2
#define RT_USING_DFS_ELMFAT

/* elm-chan's FatFs, Generic FAT Filesystem Module */

#define RT_DFS_ELM_CODE_PAGE 437
#define RT_DFS_ELM_WORD_ACCESS
#define RT_DFS_ELM_USE_LFN_3
#define RT_DFS_ELM_USE_LFN 3
#define RT_DFS_ELM_LFN_UNICODE_0
#define RT_DFS_ELM_LFN_UNICODE 0
#define RT_DFS_ELM_MAX_LFN 255
#define RT_DFS_ELM_DRIVES 2
#define RT_DFS_ELM_MAX_SECTOR_SIZE 512
#define RT_DFS_ELM_REENTRANT
#define RT_DFS_ELM_MUTEX_TIMEOUT 3000
/* end of elm-chan's FatFs, Generic FAT Filesystem Module */
#define RT_USING_DFS_DEVFS
#define RT_USING_DFS_ROMFS
/* end of DFS: device virtual file system */
#define RT_USING_FAL
#define FAL_DEBUG_CONFIG
#define FAL_DEBUG 1
#define FAL_PART_HAS_TABLE_CFG
#define FAL_USING_SFUD_PORT
#define FAL_USING_NOR_FLASH_DEV_NAME "norflash0"
  1. KEIL AC6编译报错如下
  • 报错信息放在 //! 注释中

1. devtmpfs_stat

static int devtmpfs_stat(struct dfs_dentry *dentry, struct stat *st)
{
    struct dfs_vnode *vnode;

    if (dentry && dentry->vnode)
    {
        vnode = dentry->vnode;

        st->st_dev = (dev_t)(long)(dentry->mnt->dev_id);
        st->st_ino = (ino_t)dfs_dentry_full_path_crc32(dentry);

        st->st_gid = vnode->gid;
        st->st_uid = vnode->uid;
        st->st_mode = vnode->mode;
        st->st_nlink = vnode->nlink;
        st->st_size = vnode->size;
        //! rt-thread/components/dfs/dfs_v2/filesystems/devfs/devtmpfs.c(283): error: no member named 'st_mtim' in 'struct stat'
        st->st_mtim.tv_nsec = vnode->mtime.tv_nsec;
        st->st_mtim.tv_sec = vnode->mtime.tv_sec;
        st->st_ctim.tv_nsec = vnode->ctime.tv_nsec;
        st->st_ctim.tv_sec = vnode->ctime.tv_sec;
        st->st_atim.tv_nsec = vnode->atime.tv_nsec;
        st->st_atim.tv_sec = vnode->atime.tv_sec;
        //! rt-thread/components/dfs/dfs_v2/filesystems/devfs/devtmpfs.c(288): error: no member named 'st_atim' in 'struct stat'
        //! 这一段全部报错;stat,h中结构体没有这个参数;修改为atime等参数也不对劲;
    }

    return RT_EOK;
}

2. dfs_pcache.c

#include "dfs_pcache.h"
#include "dfs_dentry.h"
#include "dfs_mnt.h"
//! rt-thread/components/dfs/dfs_v2/src/dfs_pcache.c(19): error: 'mm_page.h' file not found
#include "mm_page.h"
#include <mmu.h>
#include <tlb.h>

3. ino_t

  • ino_t没有定义 //! rt-thread/components/dfs/dfs_v2/filesystems/devfs/devtmpfs.c(276): error: use of undeclared identifier 'ino_t'

Other additional context

  1. 不知道怎么修改
  2. 这个是怎么通过编译的?
  3. 还是说只能使用DFS_V1?

wdfk-prog avatar Jul 22 '24 13:07 wdfk-prog

好像是的,MCU更多来搭配dfs v1来使用。然后针对dfs v2,如果要适配到MCU,估计还需要特别梳理下。

感谢反馈,后续抽时间来看看dfs v2的情况

BernardXiong avatar Jul 22 '24 15:07 BernardXiong