Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
关于RTT的文件系统
发布于 2012-06-30 10:13:37 浏览:9642
订阅该版
大家好! 我在9260板子上测试用RTT,能够运行起来,但有三个关于文件系统的问题想请教各位高手: (我没有改动代码,只是在rtconfig.h中更改配置) 一,ROMFS和NFS文件系统为什么都加载失败,我加了调试信息发现是在下边代码处出错的 ``` if ((strcmp(fullpath, "/") != 0) && (strcmp(fullpath, "/dev") != 0)) { struct dfs_fd fd; if (dfs_file_open(&fd, fullpath, DFS_O_RDONLY | DFS_O_DIRECTORY) < 0) { rt_free(fullpath); rt_set_errno(-DFS_STATUS_ENOTDIR); return DFS_STATUS_ENOTDIR+1;//-1; } dfs_file_close(&fd); }``` 我也试过直接用"/"目录挂载nfs文件系统,在下边代码处失败: ``` /* call mount of this filesystem */ else if (ops->mount(fs, rwflag, data) < 0)``` 我想请教的是,这两个文件系统为什么加载不起来,有什么条件没有,我没有找到相关说明。 DEVFS就可以加载成功,并有一个/dev文件夹,cd命令可以进入。 二,UFFS文件系统编译通不过,提示如下: > scons: *** [componentsdfsfilesystemsuffssrcuffsuffs_badblock.o]Error 1 In file included from /uffs/uffs_ecc.h:42:0, from uffs_buf.c:45: /arm-none-eabi/include/string.h:26:7: error: conflicting types for 'rt_memset' /rtthread.h:374:7: note: previous declaration of 'rt_memset' was here scons: *** [buildcomponentsdfsfilesystemsuffssrcuffsuffs_buf.o] Error 1 In file included from uffssrcuffsuffs_debug.c:41:0: /arm-none-eabi/include/string.h:26:7: error: conflicting types for'rt_memset' /rtthread.h:374:7: note: previous declaration of 'rt_memset' was here scons: *** [buildcomponentsdfsfilesystemsuffssrcuffsuffs_debug.o] Error 1 scons: building terminated because of errors. 好象是rtthread.h与string.h中的rt_memset函数冲突,可是string.h中并没有这个函数啊 为什么? 三,yaffs2文件系统要自己移植吗? 谢谢各位!
查看更多
19
个回答
默认排序
按发布时间排序
prife
2012-06-30
这家伙很懒,什么也没写!
报告RT-Thread版本 报告BSP目录 报告使用的编译器 报告你的rtconfig.h 描述问题的时候,请详细的描述是如何配置而导致,而不是直接给出错误信息。谢谢
kevinli
2012-06-30
这家伙很懒,什么也没写!
>报告RT-Thread版本 >报告BSP目录 >报告使用的编译器 > >报告你的rtconfig.h > >描述问题的时候,请详细的描述是如何配置而导致,而不是直接给出错误信息。谢谢 --- 版本:1.0.1 BSP目录:at91sam9260 编译器:gcc (arm-2011.03-42-arm-none-eabi) rtconfig.h 如下:(以挂载nfs文件系统为例) ``` /* RT-Thread config file */ #ifndef __RTTHREAD_CFG_H__ #define __RTTHREAD_CFG_H__ /* RT_NAME_MAX*/ #define RT_NAME_MAX 32 /* RT_ALIGN_SIZE*/ #define RT_ALIGN_SIZE 4 /* PRIORITY_MAX */ #define RT_THREAD_PRIORITY_MAX 256 /* Tick per Second */ #define RT_TICK_PER_SECOND 100 /* SECTION: RT_DEBUG */ /* Thread Debug */ #define RT_DEBUG //#define SCHEDULER_DEBUG /* #define RT_THREAD_DEBUG */ #define RT_USING_OVERFLOW_CHECK /* Using Hook */ #define RT_USING_HOOK /* Using Software Timer */ #define RT_USING_TIMER_SOFT #define RT_TIMER_THREAD_PRIO 8 #define RT_TIMER_THREAD_STACK_SIZE 512 #define RT_TIMER_TICK_PER_SECOND 10 /* SECTION: IPC */ /* Using Semaphore */ #define RT_USING_SEMAPHORE /* Using Mutex */ #define RT_USING_MUTEX /* Using Event */ #define RT_USING_EVENT /* Using MailBox */ #define RT_USING_MAILBOX /* Using Message Queue */ #define RT_USING_MESSAGEQUEUE /* SECTION: Memory Management */ /* Using Memory Pool Management*/ #define RT_USING_MEMPOOL /* Using Dynamic Heap Management */ #define RT_USING_HEAP /* Using Small MM */ /* #define RT_USING_SMALL_MEM */ /* Using SLAB Allocator */ #define RT_USING_SLAB /* SECTION: Device System */ /* Using Device System */ #define RT_USING_DEVICE /* Using Module System */ #define RT_USING_MODULE #define RT_USING_LIBDL /* SECTION: Console options */ #define RT_USING_CONSOLE /* the buffer size of console */ #define RT_CONSOLEBUF_SIZE 128 /* SECTION: finsh, a C-Express shell */ /* Using FinSH as Shell*/ #define RT_USING_FINSH /* Using symbol table */ #define FINSH_USING_SYMTAB #define FINSH_USING_DESCRIPTION #define FINSH_THREAD_STACK_SIZE 4096 /* SECTION: the runtime libc library */ /* the runtime libc library */ #define RT_USING_NEWLIB //#define RT_USING_PTHREADS /* SECTION: C++ support */ /* Using C++ support */ /* #define RT_USING_CPLUSPLUS */ /* SECTION: Device filesystem support */ /* using DFS support */ #define RT_USING_DFS //#define RT_USING_DFS_ELMFAT /* use long file name feature */ #define RT_DFS_ELM_USE_LFN 2 #define RT_DFS_ELM_REENTRANT /* the max number of file length */ #define RT_DFS_ELM_MAX_LFN 128 /* #define RT_USING_DFS_YAFFS2 */ #define RT_USING_DFS_DEVFS //#define RT_USING_DFS_UFFS //#define RT_USING_DFS_ROMFS #define RT_USING_DFS_NFS #define RT_NFS_HOST_EXPORT "192.168.0.108:/home/nfs" #define DFS_USING_WORKDIR /* the max number of mounted filesystem */ #define DFS_FILESYSTEMS_MAX 4 /* the max number of opened files */ #define DFS_FD_MAX 16 /* the max number of cached sector */ #define DFS_CACHE_MAX_NUM 4 /* Enable freemodbus protocol stack*/ /* #define RT_USING_MODBUS */ #define RT_USING_LED //#define RT_USING_MMCSD #define RT_USING_DBGU /* #define RT_USING_UART0 */ /* #define RT_USING_UART1 */ /* #define RT_USING_UART2 */ /* #define RT_USING_UART3 */ /* SECTION: lwip, a lightweight TCP/IP protocol stack */ /* Using lightweight TCP/IP protocol stack */ #define RT_USING_LWIP #define RT_LWIP_DNS #define LWIP_NETIF_LINK_CALLBACK 1 /* Trace LwIP protocol */ // #define RT_LWIP_DEBUG /* Enable ICMP protocol */ #define RT_LWIP_ICMP /* Enable IGMP protocol */ #define RT_LWIP_IGMP /* Enable UDP protocol */ #define RT_LWIP_UDP /* Enable TCP protocol */ #define RT_LWIP_TCP /* the number of simulatenously active TCP connections*/ #define RT_LWIP_TCP_PCB_NUM 5 /* TCP sender buffer space */ #define RT_LWIP_TCP_SND_BUF 1024*10 /* TCP receive window. */ #define RT_LWIP_TCP_WND 1024*8 /* Enable SNMP protocol */ /* #define RT_LWIP_SNMP */ /* Using DHCP */ /* #define RT_LWIP_DHCP */ /* ip address of target */ #define RT_LWIP_IPADDR0 192 #define RT_LWIP_IPADDR1 168 #define RT_LWIP_IPADDR2 0 #define RT_LWIP_IPADDR3 210 /* gateway address of target */ #define RT_LWIP_GWADDR0 192 #define RT_LWIP_GWADDR1 168 #define RT_LWIP_GWADDR2 0 #define RT_LWIP_GWADDR3 254 /* mask address of target */ #define RT_LWIP_MSKADDR0 255 #define RT_LWIP_MSKADDR1 255 #define RT_LWIP_MSKADDR2 255 #define RT_LWIP_MSKADDR3 0 /* the number of blocks for pbuf */ #define RT_LWIP_PBUF_NUM 16 /* the number of simultaneously queued TCP */ #define RT_LWIP_TCP_SEG_NUM 40 /* thread priority of tcpip thread */ #define RT_LWIP_TCPTHREAD_PRIORITY 128 /* mail box size of tcpip thread to wait for */ #define RT_LWIP_TCPTHREAD_MBOX_SIZE 32 /* thread stack size of tcpip thread */ #define RT_LWIP_TCPTHREAD_STACKSIZE 4096 /* thread priority of ethnetif thread */ #define RT_LWIP_ETHTHREAD_PRIORITY 144 /* mail box size of ethnetif thread to wait for */ #define RT_LWIP_ETHTHREAD_MBOX_SIZE 32 /* thread stack size of ethnetif thread */ #define RT_LWIP_ETHTHREAD_STACKSIZE 1024 /* SECTION: RTGUI support */ /* using RTGUI support */ /* #define RT_USING_RTGUI */ /* name length of RTGUI object */ //#define RTGUI_NAME_MAX 16 /* support 16 weight font */ //#define RTGUI_USING_FONT16 /* support 16 weight font */ //#define RTGUI_USING_FONT12 /* support Chinese font */ //#define RTGUI_USING_FONTHZ /* use DFS as file interface */ //#define RTGUI_USING_DFS_FILERW /* use font file as Chinese font */ /* #define RTGUI_USING_HZ_FILE */ /* use Chinese bitmap font */ //#define RTGUI_USING_HZ_BMP /* use small size in RTGUI */ /* #define RTGUI_USING_SMALL_SIZE */ /* use mouse cursor */ /* #define RTGUI_USING_MOUSE_CURSOR */ /* SECTION: FTK support */ /* using FTK support */ /* #define RT_USING_FTK */ /* * Note on FTK: * * FTK depends : * #define RT_USING_NEWLIB * #define DFS_USING_WORKDIR * * And the maximal length must great than 64 * #define RT_DFS_ELM_MAX_LFN 128 */ #endif ``` 谢谢!
prife
2012-06-30
这家伙很懒,什么也没写!
NFS我还没用过,请其他用过的同学来解答一下吧。不知道是否是你的lwip的ip地址什么没有配置对。 UFFS没有在at91sam9260测试过,我没有这个板子。我是在2440上测试的。 yaffs不需要自己移植,我已经移植好了,请参考官方svn代码中yaffs目录下的readme文件。
prife
2012-06-30
这家伙很懒,什么也没写!
把你的application.c也贴出来吧。
kevinli
2012-06-30
这家伙很懒,什么也没写!
``` /* * File : application.c * This file is part of RT-Thread RTOS * COPYRIGHT (C) 2006, RT-Thread Development Team * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.rt-thread.org/license/LICENSE * * Change Logs: * Date Author Notes * 2011-01-13 weety first version */ /** * @addtogroup at91sam9260 */ /*@{*/ #include
#ifdef RT_USING_DFS /* dfs init */ #include
/* dfs filesystem:ELM FatFs filesystem init */ #include
/* dfs Filesystem APIs */ #include
#ifdef RT_USING_DFS_UFFS /* dfs filesystem:UFFS filesystem init */ #include
#endif #endif #if defined(RT_USING_DFS_DEVFS) #include
#endif #ifdef RT_USING_MMCSD #include
#include "at91_mci.h" #endif #ifdef RT_USING_LWIP #include
#include
#include "macb.h" #endif #ifdef RT_USING_LED #include "led.h" #endif #define RT_INIT_THREAD_STACK_SIZE (2*1024) #ifdef RT_USING_DFS_ROMFS #include
#endif void rt_init_thread_entry(void* parameter) { /* Filesystem Initialization */ #ifdef RT_USING_DFS { /* init the device filesystem */ dfs_init(); #if defined(RT_USING_DFS_ELMFAT) /* init the elm chan FatFs filesystam*/ elm_init(); #endif #if defined(RT_USING_DFS_ROMFS) { int ret; dfs_romfs_init(); if ((ret=dfs_mount(RT_NULL, "/rom", "rom", 0, &romfs_root)) == 0) { rt_kprintf("ROM File System initialized! "); } else rt_kprintf("ROM File System initialzation failed!ret=%d ",ret); } #endif #if defined(RT_USING_DFS_DEVFS) devfs_init(); if (dfs_mount(RT_NULL, "/dev", "devfs", 0, 0) == 0) rt_kprintf("Device File System initialized! "); else rt_kprintf("Device File System initialzation failed! "); #ifdef RT_USING_NEWLIB /* init libc */ libc_system_init("uart0"); #endif #endif #if defined(RT_USING_DFS_UFFS) { /* init the uffs filesystem */ dfs_uffs_init(); /* mount flash device as flash directory */ if(dfs_mount("nand0", "/nand0", "uffs", 0, 0) == 0) rt_kprintf("UFFS File System initialized! "); else rt_kprintf("UFFS File System initialzation failed! "); } #endif #ifdef RT_USING_MMCSD rt_mmcsd_core_init(); rt_mmcsd_blk_init(); at91_mci_init(); rt_thread_delay(RT_TICK_PER_SECOND*2); /* mount sd card fat partition 1 as root directory */ if (dfs_mount("sd0", "/", "elm", 0, 0) == 0) { rt_kprintf("File System initialized! "); } else rt_kprintf("File System initialzation failed! "); #endif } #endif #ifdef RT_USING_LWIP { /* register ethernetif device */ eth_system_device_init(); rt_hw_macb_init(); /* re-init device driver */ //rt_device_init_all(); /* init lwip system */ lwip_sys_init(); rt_kprintf("TCP/IP initialized! "); } #endif } #ifdef RT_USING_LED void rt_led_thread_entry(void* parameter) { rt_uint8_t cnt = 0; led_init(); while(1) { /* light on leds for one second */ rt_thread_delay(40); cnt++; if (cnt&0x01) led_on(1); else led_off(1); if (cnt&0x02) led_on(2); else led_off(2); if (cnt&0x04) led_on(3); else led_off(3); } } #endif int rt_application_init() { rt_thread_t init_thread; #ifdef RT_USING_LED rt_thread_t led_thread; #endif #if (RT_THREAD_PRIORITY_MAX == 32) init_thread = rt_thread_create("init", rt_init_thread_entry, RT_NULL, RT_INIT_THREAD_STACK_SIZE, 8, 20); #ifdef RT_USING_LED led_thread = rt_thread_create("led", rt_led_thread_entry, RT_NULL, 512, 20, 20); #endif #else init_thread = rt_thread_create("init", rt_init_thread_entry, RT_NULL, RT_INIT_THREAD_STACK_SIZE, 80, 20); #ifdef RT_USING_LED led_thread = rt_thread_create("led", rt_led_thread_entry, RT_NULL, 512, 200, 20); #endif #endif if (init_thread != RT_NULL) rt_thread_startup(init_thread); #ifdef RT_USING_LED if(led_thread != RT_NULL) rt_thread_startup(led_thread); #endif return 0; } /* NFSv3 Initialization */ #if defined(RT_USING_DFS) && defined(RT_USING_LWIP) && defined(RT_USING_DFS_NFS) #include
void nfs_start(void) { int ret ; nfs_init(); ret = dfs_mount(RT_NULL, "/nfs", "nfs", 0, RT_NFS_HOST_EXPORT); if ( ret == 0) { rt_kprintf("NFSv3 File System initialized! "); } else rt_kprintf("NFSv3 File System initialzation failed!ErrNo=%d ",rt_get_errno()); } #include "finsh.h" FINSH_FUNCTION_EXPORT(nfs_start, start net filesystem); #endif /*@}*/ ``` 我就加了一个失败时取错误代码。 谢谢!
kevinli
2012-06-30
这家伙很懒,什么也没写!
我基本只动rtconfig.h,为啥就把文件系统挂载不起来呢(除了devfs) 我也看了下你的yaffs2说明,下边这句: >2. patch yaffs.diff > open an terminal. > (1) on windows > open cmd command prompt, then use [cd] command to come current path > for example > F:Projectsvn t-threadcomponentsdfsfilesystemsyaffs2> > then type command > patch -p1 < yaffs.diff --- 其中的patch在windows下应该没有这个命令,要下载第三方软件?
prife
2012-06-30
这家伙很懒,什么也没写!
1. 你的application.c里有问题。 注意RT-Thread上的路径跟Linux上很想,你需要先提供一个根目录。(/dev除外)。 比如如果你有SD卡,可以将SD卡作为根目录,然后在SD卡根目录下创建一个子目录 /romfs 然后在application.c中,将romfs关在到/romfs中。这样才能挂载成功。 也就是说,如果你要挂载某个目录(非根目录),那么这个目录必须先要存在才行,否则挂在失败。 这样,所以如果你没有提供/目录,那么就将uffs/yaffs/或者其他fs,挂载到 某个/xxx目录下,就会失败,你可以先挂载到/目录。然后在finsh中,使用mkdir。创建一个相应的目录,这样再重启程序,才能挂载成功。
aozima
2012-06-30
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
``` /* init the device filesystem */ dfs_init(); ``` 是应该最先被初始化的,然后是对应的文件系统。 最后才是mount. mount NFS时,LWIP应该启动。
prife
2012-06-30
这家伙很懒,什么也没写!
你还是先不要尝试yaffs了,你又没有相应的nand驱动,uffs也是如此。先把nfs,romfs这俩搞定再说其他。 patch是Linux/Unix下的著名的补丁程序,也有windows版本,你即可可以网上搜索: win32 unix,也可以使用我这里提供的程序。
kevinli
2012-06-30
这家伙很懒,什么也没写!
>1. 你的application.c里有问题。 > >注意RT-Thread上的路径跟Linux上很想,你需要先提供一个根目录。(/dev除外)。 > >比如如果你有SD卡,可以将SD卡作为根目录,然后在SD卡根目录下创建一个子目录 >/romfs >然后在application.c中,将romfs关在到/romfs中。这样才能挂载成功。 > >也就是说,如果你要挂载某个目录(非根目录),那么这个目录必须先要存在才行,否则挂在失败。 > >这样,所以如果你没有提供/目录,那么就将uffs/yaffs/或者其他fs,挂载到 某个/xxx目录下,就会失败,你可以先挂载到/目录。然后在finsh中,使用mkdir。创建一个相应的目录,这样再重启程序,才能挂载成功。 --- 问题是我的板子上没有sd卡,nand还没用起来,怎么来创建这些目录(如:/romfs , /nfs )用来挂载呢? 用/目录挂载我也试过了,失败!
撰写答案
登录
注册新账号
关注者
0
被浏览
9.6k
关于作者
kevinli
这家伙很懒,什么也没写!
提问
5
回答
18
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
rt-thread 小内存算法源码分析
2
env中添加lvgl软件包后,keil编译包--c99错误
3
【NXP-MCXA153】 定时器驱动移植
4
GD32F450 看门狗驱动适配
5
【NXP-MCXA153】看门狗驱动移植
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
freemodbus
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
keil_MDK
msh
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
7
个答案
2
次被采纳
a1012112796
18
个答案
1
次被采纳
红枫
8
个答案
1
次被采纳
Ryan_CW
5
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
本月文章贡献
YZRD
3
篇文章
6
次点赞
catcatbing
3
篇文章
6
次点赞
lizimu
2
篇文章
12
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部