关于rt-thread 文件系统dfs_elm的疑问

2019-10-12 10:22 [复制链接] 2 476

最近在做nandflash的文件系统移植,之前采用uffs+mtd_nand,自己写完drv_nand的驱动后,挂载正常,读写均正常。5 u0 i9 X' ?2 k( \7 f# ~
4 Z" B5 j: R: d% x  o
由于有将nandflash模拟成U盘的需求,不得已需要将文件系统换成fatfs,并在drv_nand驱动层上层添加ftl层。但是对geometry这个结构体的定义存在一些疑问
: l  l+ [5 k* O3 O: m: ^$ e" @. f9 h+ V4 Q! [* R6 J
在dfs_elm.c中,获取blocksize代码如下
; l9 u9 p* W! W$ B4 @( H  j+ b! Melse if (ctrl == GET_BLOCK_SIZE) /* Get erase block size in unit of sectors (DWORD) */% B, c, Q" s/ Y5 S/ Y6 s; P- {
    {5 ?- P* H- a# M" v  f% K$ F. c
        struct rt_device_blk_geometry geometry;5 c. k% ^0 e% D; l6 E$ A- A, {
+ q; ?1 Z! ]# z& ?, y
        rt_memset(&geometry, 0, sizeof(geometry));: }& ]) |$ b& I9 q/ K
        rt_device_control(device, RT_DEVICE_CTRL_BLK_GETGEOME, &geometry);
* c" D. g0 B7 M9 O$ {1 _+ W1 X1 j2 E
        *(DWORD *)buff = geometry.block_size / geometry.bytes_per_sector;
- d$ t$ d* L2 Q2 a+ l    }
( v0 s1 s) W' t, _* x4 ~' d  m: O9 M* a5 }4 S
+ I9 f9 L; D9 H
我使用的nandflash,最小擦出block大小为64kB,ftl二次封装sector为512后,则这个*(DWORD *)buff 就变得无敌大,导致fatfs挂载失败。
4 o- H! z2 A9 }5 g之前的裸机nandflash移植fatfs,只需要将diskio.c中的获取blocksize大小改成下方即可
+ `. G6 J: f) u- Y  B: @3 }/ y: _7 v
case GET_BLOCK_SIZE:5 m9 e$ m  p( o, ^6 ?
                        *(WORD*)buff = nand.page_mainsize/512;. i( a4 I" i* Q' b1 H
                        res = RES_OK;
, i- [6 Q& w) @0 ]$ M; ^$ x- [                        break;       
, @1 T. y; S7 h6 x& S6 _
6 v4 f: z4 ~3 N' |& U: ^. }8 S# P% A& ^: }9 r* j
而且一般情况下,GET_BLOCK_SIZE 返回以扇区为单位的存储阵列的擦除块大小赋给Buffer指向的DWORD变量。当擦除块大小未知或是磁盘设备时,返回1即可。2 s4 n, E$ Q5 W$ e7 [3 o) N( \0 `

4 W8 n, p# _8 `/ ?0 h4 \5 a  D6 B

0 G- `: R6 ]) ^; b在此请问rtt的官方团队,对于nandflash,geometry如何定义?
1 s4 ?% b  d; i0 Q2 y
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-10-16 11:23:07 | 显示全部楼层
*(DWORD *)buff 就变得无敌大 是指什么?geometry.block_size 这个变量的值为 0?
使用道具 举报 回复
发表于 2019-10-16 17:10:28 | 显示全部楼层
flyboy 发表于 2019-10-16 11:23
& |8 B: `* Z6 W) ^- v! S*(DWORD *)buff 就变得无敌大 是指什么?geometry.block_size 这个变量的值为 0?

  s/ y- A4 v" d7 }按照我选择的nandflash,最小擦除BLOCK大小为64KB,按照fat32,bytes_per_sector大小一般为512,按照elm源码中,*(DWORD *)buff的大小就是64KB/512=128,这和fat本身定义的大小差的有点多
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  1. 3 主题
  2. 61 帖子
  3. 61 积分

Ta的主页 发消息

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表