RT-Thread / rt-thread

RT-Thread is an open source IoT Real-Time Operating System (RTOS).
https://www.rt-thread.io
Apache License 2.0
10.3k stars 4.97k forks source link

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

Open wdfk-prog opened 1 month ago

wdfk-prog commented 1 month ago

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"


2. KEIL AC6编译报错如下

- 报错信息放在 //! 注释中

### 1. devtmpfs_stat

```c
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

Other additional context

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

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

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