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

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

最近在做nandflash的文件系统移植,之前采用uffs+mtd_nand,自己写完drv_nand的驱动后,挂载正常,读写均正常。
& C, r7 x# y* R) f& f; E' \+ v+ ?. p# P) n. @
由于有将nandflash模拟成U盘的需求,不得已需要将文件系统换成fatfs,并在drv_nand驱动层上层添加ftl层。但是对geometry这个结构体的定义存在一些疑问
; g5 s6 {0 W& _4 G* y- i0 |+ X+ v+ m+ C9 a, }/ ?6 d% W& T, L- ]0 n) [
在dfs_elm.c中,获取blocksize代码如下6 |5 Y# J0 {" W! R/ Q- G9 o
else if (ctrl == GET_BLOCK_SIZE) /* Get erase block size in unit of sectors (DWORD) */
3 V4 e! L. b2 z) @" y9 W    {5 O0 ?  C6 f+ I1 g9 ~( W  e% m
        struct rt_device_blk_geometry geometry;
4 |% _; Y" o& h3 N# [5 H. u* w6 B% ]! R0 W; {  ~
        rt_memset(&geometry, 0, sizeof(geometry));( H" ?2 M* L/ \* ]
        rt_device_control(device, RT_DEVICE_CTRL_BLK_GETGEOME, &geometry);9 ^3 N3 T8 q8 J3 V: G

' P" p' [# |0 h        *(DWORD *)buff = geometry.block_size / geometry.bytes_per_sector;
& x6 t6 l+ W6 w8 c7 L    }5 I% v0 H1 |" @# e- m$ ~3 \

9 n5 x+ n& C- N: h. n/ h7 s
& W+ `7 Q' j% I/ P( T我使用的nandflash,最小擦出block大小为64kB,ftl二次封装sector为512后,则这个*(DWORD *)buff 就变得无敌大,导致fatfs挂载失败。
$ h: |7 U! I, e) J5 j2 P3 G之前的裸机nandflash移植fatfs,只需要将diskio.c中的获取blocksize大小改成下方即可
, i$ S9 T& j0 [1 ?6 z
* b7 U) U: H% B7 y; Rcase GET_BLOCK_SIZE:
6 L) ?7 e6 t( t; i& t) b                        *(WORD*)buff = nand.page_mainsize/512;" b+ K. a2 \2 `! a. |- @! M5 D9 D
                        res = RES_OK;
, K+ Y2 M% q# A                        break;        / Z9 U; `8 p- a$ |4 X; u/ s3 S

7 R7 |! b* M7 I* u" Q0 v) K* ?  [
7 n$ F% `4 L: n8 a7 p而且一般情况下,GET_BLOCK_SIZE 返回以扇区为单位的存储阵列的擦除块大小赋给Buffer指向的DWORD变量。当擦除块大小未知或是磁盘设备时,返回1即可。
# j, F. T) f3 U1 I) K/ M+ s7 V
% P$ J! w0 G: G9 Z; _2 _+ z

5 ?0 e( n- z) j+ C" P1 l" i在此请问rtt的官方团队,对于nandflash,geometry如何定义?
9 l: z$ H+ R7 W3 Q% w9 `
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 4 天前 | 显示全部楼层
*(DWORD *)buff 就变得无敌大 是指什么?geometry.block_size 这个变量的值为 0?
使用道具 举报 回复
发表于 4 天前 | 显示全部楼层
flyboy 发表于 2019-10-16 11:23
  |: Z+ B9 p% h5 D) j% k*(DWORD *)buff 就变得无敌大 是指什么?geometry.block_size 这个变量的值为 0?
; `- r# b; X7 D: m$ F( u: q
按照我选择的nandflash,最小擦除BLOCK大小为64KB,按照fat32,bytes_per_sector大小一般为512,按照elm源码中,*(DWORD *)buff的大小就是64KB/512=128,这和fat本身定义的大小差的有点多
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

Powered by RT-Thread

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