WS63 LittleFS 挂载失败与分区 ID 排查
WS63 LittleFS 挂载失败与分区 ID 排查
一、问题背景
WS63 Combo Demo 会将 iot_connect 的配置与认证初始化数据保存到 LittleFS。若底层文件系统未正确挂载,Demo 即使 BLE 已广播,也可能在安全服务启动或创建配置目录时失败,典型日志为:
lfs_mount failed, ret = ...

这个现象不能直接等同于“/iotc 路径写错”。应先确认 LittleFS 使用的 Flash 分区是否有效,再确认配置路径是否满足平台目录约束。
二、关键代码与配置入口
LittleFS 从配置项 CONFIG_LFS_PARTITION_ID 取分区编号,再调用 uapi_partition_get_info() 查询分区信息。相关代码:
device/soc/hisilicon/ws63v100/sdk/middleware/chips/ws63/littlefs/littlefs_adapt.c
关键逻辑为:

若查询失败、分区大小为 0、地址或大小不是 4 KiB 对齐,LittleFS 无法继续工作;随后在 fs_adapt_mount() 中调用 lfs_mount() 时会打印 lfs_mount failed。
当前 WS63 LiteOS 应用配置入口:
device/soc/hisilicon/ws63v100/sdk/build/config/target_config/ws63/menuconfig/acrore/ws63_liteos_app.config
有效配置应为:

CONFIG_LFS_PARTITION_ID=48
编译后也可在以下生成文件中确认最终生效值:
device/soc/hisilicon/ws63v100/sdk/output/ws63/acore/ws63-liteos-app/mconfig.h

三、排查步骤
3.1 先确认现象在底层挂载阶段
串口中搜索:
rg -n 'lfs_mount failed|config provision error|/iotc' <串口日志文件>
若存在 lfs_mount failed,应先排查分区与烧录镜像,而不是先修改 iot_connect 业务代码。
3.2 确认“源码配置”和“编译结果”一致
rg -n 'CONFIG_LFS_PARTITION_ID' \
device/soc/hisilicon/ws63v100/sdk/build/config/target_config/ws63/menuconfig/acrore/ws63_liteos_app.config \
device/soc/hisilicon/ws63v100/sdk/output/ws63/acore/ws63-liteos-app/mconfig.h
两处都应显示 48。只改源码配置却没有重新生成 SDK 产物,或选择了另一份 menuconfig 文件,都可能造成“编辑器里看似正确、实际镜像仍错误”。
3.3 确认当前产品和镜像
在根目录执行:
hb env
hb build --ccache
应确认产品为 nearlink_dk_3863,并重新烧录本次归档的镜像。烧录旧镜像会使排查结论失效。
3.4 再检查配置目录
Demo 中通过以下选项设置配置数据目录:
IOTC_OH_OPTION_SDK_CONFIG_PATH
当前 WS63 使用 /iotc。该平台的 LittleFS 目录能力有限,因此应避免直接沿用标准系统多层路径(如 /data/app/iotc)。但是路径层级问题与分区不可用是两类问题:前者通常发生在建目录或建文件,后者发生在文件系统挂载阶段。
四、如何判断问题已经解决
满足下面三项才认为存储前置条件恢复:
- 串口不再出现
lfs_mount failed; - Demo 后续不会因配置目录或认证初始化存储失败直接退出;
- 重新烧录同一镜像后现象仍稳定,不是一次偶然的 Flash 状态变化。

五、经验总结
- 分区 ID 的正确性要以最终生成的
mconfig.h为准,而不只看 menuconfig 源文件。 lfs_mount failed的打印位置在littlefs_adapt.c的fs_adapt_mount(),可从这里向前追分区查询与对齐检查。- 本文确认的是 WS63 当前 LiteOS 应用使用分区 ID 48 的配置事实;不同 SDK 目标或 XTS 配置可能拥有不同分区编号,不能机械复制。
更多推荐
所有评论(0)