如何解决Zephyr USB Mass Storage示例构建失败问题
问题描述
使用nrf52840DK开发板构建Zephyr USB Mass Storage示例时,出现构建失败,报错如下:
error: #error No supported disk driver enabled
构建日志中还有如下警告:
CMake Warning at C:/ncs/v3.1.1/zephyr/CMakeLists.txt:1027 (message): No SOURCES given to Zephyr library: drivers__disk Excluding target from build.
当前prj.conf配置内容:
CONFIG_STDOUT_CONSOLE=y #USB related configs CONFIG_USB_DEVICE_STACK=y CONFIG_USB_DEVICE_PRODUCT="Zephyr MSC sample" CONFIG_USB_DEVICE_PID=0x0008 CONFIG_LOG=y CONFIG_USB_DRIVER_LOG_LEVEL_ERR=y CONFIG_USB_MASS_STORAGE=y CONFIG_USB_DEVICE_LOG_LEVEL_ERR=y CONFIG_USB_MASS_STORAGE_LOG_LEVEL_ERR=y CONFIG_USB_DEVICE_INITIALIZE_AT_BOOT=n CONFIG_MAIN_STACK_SIZE=1536
已在Kconfig中选择"Use RAM disk and FAT file system"选项,项目README.rst中给出的RAM磁盘+FAT文件系统构建配置为:
.. zephyr-app-commands:: :zephyr-app: samples/subsys/usb/mass :board: reel_board :gen-args: -DEXTRA_DTC_OVERLAY_FILE="ramdisk.overlay" -DCONFIG_APP_MSC_STORAGE_RAM=y :goals: build :compact:
不清楚这些配置如何放入sample.yaml,也不确定是否仅补充这些配置就能解决问题。
解决方法
1. 补全prj.conf的核心配置
直接在你的prj.conf里添加以下内容,比图形界面选Kconfig更稳妥,避免配置不生效:
CONFIG_APP_MSC_STORAGE_RAM=y CONFIG_FAT_FILESYSTEM=y CONFIG_DISK_DRIVER_RAM=y
这几个配置是启用RAM磁盘驱动和FAT文件系统的关键,补上就能解决"No supported disk driver enabled"的报错。
2. 配置RAM磁盘的设备树overlay
把官方示例里的ramdisk.overlay复制到你项目根目录;如果找不到这个文件,也可以自己创建,内容参考:
&ram0 { status = "okay"; reg = <0x20030000 0x10000>; /* 定义64KB的RAM磁盘,地址和大小可根据需求调整 */ };
这个文件用来声明RAM磁盘的硬件节点,没有它驱动无法正常加载。
3. sample.yaml中的配置写法
如果用sample.yaml管理构建参数,找到对应nrf52840dk的测试配置块,修改成如下结构:
sample: name: USB Mass Storage Sample tests: sample.usb.mass: platform_allow: nrf52840dk_nrf52840 tags: usb build_only: false extra_args: - DEXTRA_DTC_OVERLAY_FILE="ramdisk.overlay" - DCONFIG_APP_MSC_STORAGE_RAM=y
这样每次构建时会自动加载指定的overlay文件和CONFIG参数,不用手动输入命令行参数。
4. 验证配置有效性
完成上述操作后重新构建项目,检查日志是否不再出现drivers__disk的警告,同时确认RAM磁盘驱动和FAT文件系统已被正确启用。
本质上你遇到的问题就是缺少RAM磁盘驱动的启用配置和对应的设备树节点定义,补全这些配置后就能解决构建失败的问题。
内容的提问来源于stack exchange,提问作者Sid
相关产品推荐
相关产品推荐

