Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Filesystem
elm文件系统格式化问题
发布于 2018-08-10 13:56:53 浏览:2826
订阅该版
* 本帖最后由 wandersky 于 2018-8-10 14:17 编辑 * 遇到一个问题, ```static const struct romfs_dirent _romfs_root[] = { {ROMFS_DIRENT_DIR, "spi", (rt_uint8_t *)_romfs_root_spi, sizeof(_romfs_root_spi)/sizeof(_romfs_root_spi[0])}, {ROMFS_DIRENT_DIR, "SF", RT_NULL, RT_NULL}, {ROMFS_DIRENT_DIR, "FM", RT_NULL, RT_NULL}, };``` 我挂载了一个铁电,一个NOR,都是FATFS,但是我用mkfs格式化时, 无论mkfs -t elm nor 还是 mkfs -t elm fram都是格式化的fram铁电, 跟踪发现格式化后进入 int dfs_elm_mkfs(rt_device_t dev_id)() 不再选择格式化的是哪个设备, 直接执行 char logic_nbr[2] = {'0',':'}; result = f_mkfs(logic_nbr, FM_ANY, 0, work, _MAX_SS); 造成只会格式化第1个存储设备。 是我的用法有问题,还是elm有漏洞?
查看更多
2
个回答
默认排序
按发布时间排序
wandersky
2018-08-10
这家伙很懒,什么也没写!
解决办法如下:willow add为我添加的。 ``` int dfs_elm_mkfs(rt_device_t dev_id) { #define FSM_STATUS_INIT 0 #define FSM_STATUS_USE_TEMP_DRIVER 1 FATFS *fat = RT_NULL; BYTE *work; int flag; FRESULT result; int index; char logic_nbr[2] = {'0',':'}; work = rt_malloc(_MAX_SS); if(RT_NULL == work) { return -ENOMEM; } if (dev_id == RT_NULL) { rt_free(work); /* release memory */ return -EINVAL; } /* if the device is already mounted, then just do mkfs to the drv, * while if it is not mounted yet, then find an empty drive to do mkfs */ flag = FSM_STATUS_INIT; index = get_disk(dev_id); if (index == -1) { /* not found the device id */ index = get_disk(RT_NULL); if (index == -1) { /* no space to store an temp driver */ rt_kprintf("sorry, there is no space to do mkfs! \n"); rt_free(work); /* release memory */ return -ENOSPC; } else { fat = rt_malloc(sizeof(FATFS)); if (fat == RT_NULL) { rt_free(work); /* release memory */ return -ENOMEM; } flag = FSM_STATUS_USE_TEMP_DRIVER; disk[index] = dev_id; /* try to open device */ rt_device_open(dev_id, RT_DEVICE_OFLAG_RDWR); /* just fill the FatFs[vol] in ff.c, or mkfs will failded! * consider this condition: you just umount the elm fat, * then the space in FatFs[index] is released, and now do mkfs * on the disk, you will get a failure. so we need f_mount here, * just fill the FatFS[index] in elm fatfs to make mkfs work. */ logic_nbr[0] = '0' + index; f_mount(fat, logic_nbr, (BYTE)index); } } else{ logic_nbr[0] = '0' + index;//willow add } /* [IN] Logical drive number */ /* [IN] Format options */ /* [IN] Size of the allocation unit */ /* [-] Working buffer */ /* [IN] Size of working buffer */ result = f_mkfs(logic_nbr, FM_ANY, 0, work, _MAX_SS); rt_free(work); work = RT_NULL; /* check flag status, we need clear the temp driver stored in disk[] */ if (flag == FSM_STATUS_USE_TEMP_DRIVER) { rt_free(fat); f_mount(RT_NULL, logic_nbr,(BYTE)index); disk[index] = RT_NULL; /* close device */ rt_device_close(dev_id); } if (result != FR_OK) { rt_kprintf("format error\n"); return elm_result_to_dfs(result); } return RT_EOK; } ```
wandersky
2018-08-10
这家伙很懒,什么也没写!
这个问题应该是文件系统如果未挂载, 在 index = get_disk(dev_id); if (index == -1) {} 在这个分支中就会得到处理,如果文件系统已经挂载了,则系统直接进入f_mkfs(),没有再修改char logic_nbr[2] = {'0',':'}; 这样就造成挂载过的文件系统,只能格式化第1个文件系统。 增加else分支, else{ logic_nbr[0] = '0' + index;//willow add } 处理了挂载过文件系统的情况。 试验完美通过。
撰写答案
登录
注册新账号
关注者
0
被浏览
2.8k
关于作者
wandersky
这家伙很懒,什么也没写!
提问
12
回答
69
被采纳
0
关注TA
发私信
相关问题
1
字库除了SD卡和http还有别的方式导入吗
2
如何同时使用RTT文件系统于NAND Flash 和 SD卡,针对Realboard4088?
3
EasyFlash好棒
4
SD卡挂在的SPI总线又要加个DA设备
5
sd卡与flash 同时挂载 挂载路径shell怎么区分 访问
6
请教ramfs使用方法
7
rtt stable2.0.x版本 sd卡及文件系统
8
nandflash文件系统UFFS请教
9
关于SD卡挂载文件系统的问题(已解决)
10
Yaffs采用GPL2许可
推荐文章
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
使用官方BOOT升级,看这一篇就够了?(以STM32F407VGT6为例)
2
可以使用MQTT连接AI大模型吗
3
RT-Thread离线包制作
4
RT-Thread 屏蔽在线软件包的方法
5
RT-Thread OS应用开发实战线上师资培训通知
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
cubemx
ESP8266
WIZnet_W5500
UART
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
GD32
定时器
ADC
flashDB
编译报错
socket
keil_MDK
中断
rt_mq_消息队列_msg_queue
Debug
SFUD
msh
ulog
C++_cpp
at_device
本月问答贡献
聚散无由
7
个答案
6
次被采纳
RTT_逍遥
6
个答案
2
次被采纳
踩姑娘的小蘑菇
6
个答案
1
次被采纳
a1012112796
4
个答案
1
次被采纳
Jack_____
4
个答案
1
次被采纳
本月文章贡献
wake_mirco
2
篇文章
7
次点赞
mushroom
1
篇文章
8
次点赞
张世争
1
篇文章
7
次点赞
rv666
1
篇文章
4
次点赞
alight
1
篇文章
3
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部