Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

zephyr-cp: CIRCUITPY_USB_MSC is off, so storage USB drive control is missing

Đang mở
#11,531 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
48/100
Loại issue
Tính năng
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
c
Lĩnh vực
backend, embedded-iot

Hướng nghiên cứu

Start with ports/zephyr-cp/supervisor/usb.c and the USB MSC implementation in subsys/usb/device_next/class/usbd_msc_scsi.c; compare the needed lock and remount behavior with supervisor/shared/usb/usb_msc_flash.c. Check how _zephyr_disk_status() reports a disabled drive and how the build enables USB. Done means MSC is enabled for zephyr-cp, storage enable/disable and remount behavior work, and the block-device lock is released appropriately; Zephyr's missing read-only and eject support are noted limitations.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

storage usb zephyr

Claude wrote this, with edits by @dhalbert. These are notes for whoever works on this later.

Problem

zephyr-cp presents CIRCUITPY over USB with its own MSC code in ports/zephyr-cp/supervisor/usb.c. Its build never defines CIRCUITPY_USB_MSC, so the USB parts of storage are compiled out. This causes several problems:

  • disable_usb_drive(), unsafe_disable_usb_drive(), and enable_usb_drive() always raise RuntimeError: Cannot change USB devices now.
  • remount() is allowed while the host has write access. It should raise "Cannot remount path when visible via USB." instead.
  • remount() clears the block device lock that USB took. zephyr-cp's locked[0] stays true, so USB never takes the lock again.
  • Nothing releases locked[], so the lock is not dropped on eject or unmount.

Seen on a Feather nRF52840 running zephyr-cp built from 314c0be79f.

What is needed
  • Define CIRCUITPY_USB_MSC for zephyr-cp when USB is enabled.
  • Implement LUN enabling and disabling: report CIRCUITPY not ready when storage_usb_enabled() is false.
  • Provide usb_msc_release_circuitpy_lock(), usb_msc_holds_lock(), and usb_msc_remount(), as supervisor/shared/usb/usb_msc_flash.c does (the first two are added in #11530).
Zephyr USB MSC support

Unfortunately, some features are missing from Zephyr USB MSC that we need. Checked in adafruit/zephyr at a4d81519a1, subsys/usb/device_next/class/usbd_msc_scsi.c:

  • LUN not ready: possible. There is no API for it. But TEST UNIT READY, READ, and WRITE all answer "medium not present" when the disk's status is not DISK_STATUS_OK (L425, L749, L803). zephyr-cp's _zephyr_disk_status() can return DISK_STATUS_NOMEDIA while the drive is disabled.
  • Read-only to the host: not supported. MODE SENSE always reports no write protection (L600). DISK_STATUS_WR_PROTECT is treated as medium not present. So when CIRCUITPY is writable by Python, as after remount("/", readonly=False) in boot.py, the drive disappears from the host instead of appearing read-only. This needs a Zephyr change.
  • Eject: no notification. START STOP UNIT is handled inside the class and does not call the disk driver (L610). zephyr-cp cannot release its lock when the host ejects the drive.
Ngôn ngữ chính
C
Star
4.6k
Fork
1.4k
Merge trung bình
1 ngày 8 giờ
Pull request đã merge (30 ngày)
155

Chuẩn bị môi trường

Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của adafruit/circuitpython

Tất cả issue của adafruit/circuitpython

Issue tương tự

Thêm issue về C

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.