littlefs 配置总结,填坑贴!

发表在 Filesystem2019-9-5 21:02 [复制链接] 4 1186

本帖最后由 xiaoxu5271 于 2019-9-5 21:13 编辑
. w" O! [: F2 D6 u- i* z
: J( E5 X+ |( l; g首先是按照官方配置教程一路下来的 在 STM32L4 上应用 littlefs 文件系统  。' Z. e1 P  u- x9 M/ I; a$ F* R
这些步骤是没有问题的,但是文中的littlels的版本比较老,如果使用最新版本,可能会有一些出入,参数就先按照默认配置。配置完成后出现3个坑,下面开始填坑。
- t/ Q8 a5 v0 n+ D
& g1 I( l4 Z; [! A6 s/ n$ g  }- Q(1)编译出错
8 @* S0 C* ^) C# I这个是普遍问题,论坛搜索了一圈,发现好几个相同案例 这个帖子提出了解决办法
7 w. c+ H% g$ ?& \- X* X  K0 p7 P4 k/ O$ ]6 |$ {3 N
批注 2019-09-05 202426.png ( P5 S, t& e+ h' V
- V+ I5 S; g. R6 i, a# W: n
加入头文件后,好家伙,还是有错误,如下:& _; \$ ], _6 @/ l: a: ?7 H' C2 o1 T

0 C% g) {) F2 u$ b& c6 Z(2)再次编译出错9 G5 ~2 d0 n1 X5 v9 n
  1. linking...
    8 L: W& o8 w" M
  2. .\build\keil\Obj\rt-thread.axf: Error: L6218E: Undefined symbol LFS_TRACE (referred from lfs.o).
    # K7 c2 a0 L; a: `' \
  3. Not enough information to list image symbols.. k- n! M' c2 h6 r; L# t7 W8 `) }
  4. Not enough information to list load addresses in the image map.
    : h- T, y9 X9 D* r
  5. Finished: 2 information, 0 warning and 1 error messages.4 T3 M. f" q1 k
  6. ".\build\keil\Obj\rt-thread.axf" - 1 Error(s), 30 Warning(s).; t; X: p1 ~0 o/ ?$ U+ ]
  7. Target not created.; u4 c8 X' c% N, G# c9 F
  8. Build Time Elapsed:  00:00:05
复制代码
这个错误的意思是 LFS_TRACE 这个函数lfs.c中没有被声明,搞他!0 C+ @2 F" L2 S( h: O) g

" K8 ~9 {; ~6 k3 M/ H+ w
批注 2019-09-05 203515.png , t0 p9 n3 m( X& Q, X% m1 ?
0 Y* t: \, c* w# v: Q
就是这个函数,好多,转到定义:. i1 m2 @5 H! D) }" g

4 L" c2 `6 j* {( P! K% {
+ s/ N8 ~+ }( k, {: F& B6 D
批注 2019-09-05 203541.png 5 e. }- b! d% L* u& E+ C( c
明明有定义啊,索性就简单粗暴点,再重新声明下。
* o, w# S/ B- X- j& m$ n% l. a+ }& \5 Z2 t& s$ F
批注 2019-09-05 203653.png
+ M# U4 W4 _; W, u' K9 }3 c! U
  1. /*3 Z8 U, x1 F6 m  {
  2. * The little filesystem
    & q8 d; e! l) p. `2 [
  3. *
    7 b1 U: c! l; \5 V; d2 B6 h, S
  4. * Copyright (c) 2017, Arm Limited. All rights reserved.
    0 r) @: k2 @4 y/ i
  5. * SPDX-License-Identifier: BSD-3-Clause
    * D3 x! ?2 R8 B* S
  6. */
    ' C: S9 M/ @/ _3 g1 o0 C
  7. #include "lfs_util.h". T+ ]% y4 ^" W! \
  8. #include "lfs.h"- A2 p# n. h1 Y" ~4 w/ a
  9. 5 S/ w  V# L$ ?
  10. #define LFS_TRACE(fmt, ...)   //lcx add 2019-09-05 20:33:01   在这里重新定义下- J* ]7 b( ?  x8 p( B8 E2 z

  11. $ N  C" N: }6 m5 U
  12. #define LFS_BLOCK_NULL ((lfs_block_t)-1)
    / Z# |  T+ ~; h1 v- C; T) V
  13. #define LFS_BLOCK_INLINE ((lfs_block_t)-2)
复制代码

  g8 q( x; @- Y. D* G$ J. ?- E  r; J2 C* n
再编译,好了,不报错了,,可是。。。
6 F( H3 [1 k7 v$ F
  l9 @& m( A6 m) g2 w1 V(3)初始化失败
" W5 o7 ^" T0 L3 s) w' C: M
! S1 d7 L6 t; R$ j 未命名图片.png
- \4 _' k6 Q( x+ b5 d
/ `2 Y( `4 ^1 H  J4 j5 f0 N定位到程序中,如下图0 T, E- _9 h. @: i$ Q( e/ x

2 h: m, [2 u+ h& W' b6 ^( O( W 1.png * n6 H+ k+ w7 q
! w: j/ N! v$ Z# G( O5 X3 Z( x( {
lfs->cfg->block_cycles 这个为 0 导致断言失败,上面注释提到,不再支持它等于0 ,应该在100-1000之间,它具体是干什么的,还暂未理解,有大佬知道的话希望能科普下。5 O+ n" }% a& l
那么这个值在哪里定义的?
* x$ _- A( L" ^0 C就是下图这个值,原来是0,我改成的100。
" Q8 D2 O7 m& a) B! Z% P) T$ I4 o9 ?( G; G1 d) h) K
批注 2019-09-05 205155.png
& F! j4 c% |' g0 `' _& F" t8 ~3 C  j. q$ J2 U, [4 [; z2 Q
" k% L: h: J2 ^% `
它对应的menuconfig 中的位置如图:
/ n) @* i% j  S$ ?
  K4 g7 k: z/ A- a4 L 批注 2019-09-05 205347.png
/ F% O: }8 u6 M' Y" a" ~0 W2 d$ s+ n* U+ u# }5 [5 G' ~
这个默认是0,改为100后就正常了,如下是测试的效果:
: q# O* ~* P! X0 V( y2 v6 \  E1 ]" O& K: B3 j
批注 2019-09-05 205854.png
- h) e9 L5 ]7 h- I6 [  Z' J3 M4 A0 q1 B5 g) T0 S' K8 `
lfs error:1127: Corrupted dir pair at 0 1 6 T+ L1 `# [5 c
应该是说明有坏块,但不影响整体测试,这个等再查查是什么原因导致的。0 V$ q3 U6 y* X: c6 n

% }" F' ]1 D% W" v. E* a" c! t* o7 [$ B% c9 K* q6 i( k( ^* l$ K0 }
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-9-5 22:22:40 | 显示全部楼层
谢谢楼主分享
使用道具 举报 回复
发表于 2019-11-18 13:59:33 | 显示全部楼层
block_cycles 定义均衡擦写的循环次数,防止某一个Block擦写次数过多导致损坏
使用道具 举报 回复
发表于 2019-12-6 14:09:30 | 显示全部楼层
\ | /
7 j4 G/ n  k' m: R4 j5 D% F- RT -     Thread Operating System" Z% a4 N5 c' u3 K3 X5 P; P
/ | \     4.0.2 build Dec  6 2019+ \2 X- v, k4 Z5 s3 O: m
2006 - 2019 Copyright by rt-thread team
! A* V2 x" u( M2 Y  h[D/FAL] (fal_flash_init:61) Flash device |         onchip_flash_16k | addr: 0x08000000 | len: 0x00080000 | blk_size: 0x00004000 |initialized finish.
# L; i* S% e: C6 j, j" v& l[I/FAL] ==================== FAL partition table ====================
5 _' f1 e* h2 |/ ?" Y4 E[I/FAL] | name        | flash_dev        |   offset   |    length  |
6 C6 S' R2 @  j  b8 N[I/FAL] -------------------------------------------------------------. S9 j/ k& @4 B, M" Y
[I/FAL] | filesystem1 | onchip_flash_16k | 0x00000000 | 0x00010000 |. i8 _- }- Q  O4 M
[I/FAL] | filesystem2 | onchip_flash_16k | 0x00010000 | 0x00010000 |. z) d( Y2 ~0 v* b7 x
[I/FAL] | filesystem3 | onchip_flash_16k | 0x00020000 | 0x00020000 |
$ d  m6 C4 Z! c* `" Z[I/FAL] | filesystem  | onchip_flash_16k | 0x00040000 | 0x00040000 |
3 A4 _7 ^3 l& w7 i3 o[I/FAL] =============================================================, E7 c" _) z3 q$ B/ x9 p. b& u
[I/FAL] RT-Thread Flash Abstraction Layer (V0.4.0) initialize success.
0 K; P; u; v4 k[I/FAL] The FAL MTD NOR device (filesystem) created successfully
7 W. |8 a0 n2 `lfs error:968: Corrupted dir pair at 0 1
9 J4 L: ?2 z/ z( i, a. i[E/main] ret:-12
3 h& O/ m+ `) clfs error:968: Corrupted dir pair at 0 1) i* U6 @& K% c4 A3 m
[E/main] Failed to initialize filesystem!& c7 {( l1 J' P/ f% Z
msh />echo "aaa" a.txt
6 V+ h: A) Z- T/ copen file:a.txt failed!
: S9 k& ^$ P+ D! S+ ]$ Rmsh />ls. ~' H, A( [0 c% F) t! o/ ?
No such directory/ v) R. N! }4 f; b+ \  z/ ]
msh /> % u( |* T0 J9 s

5 B; D( T5 ]( {( i, Y3 m3 q楼主有继续查找错误吗?我的格式化文件系统和挂载都失败!文件系统不能用!用的STM32F2
使用道具 举报 回复
发表于 2019-12-7 15:23:17 | 显示全部楼层
lfs error:1127: Corrupted dir pair at 0 1 在第一次运行出现是正常的,格式化之后应该就不会有了,好像这个 issue 有说到:https://github.com/ARMmbed/littlefs/issues/206
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

Powered by RT-Thread

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