zephyr-cp: CIRCUITPY_USB_MSC is off, so storage USB drive control is missing
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 48/100
- Type d'issue
- Fonctionnalité
- Clarté
- Plutôt claire
- Activité
- Active
- Stack technique
- c
- Domaine
- backend, embedded-iot
Piste de recherche
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.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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(), andenable_usb_drive()always raiseRuntimeError: 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'slocked[0]staystrue, 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_MSCfor 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(), andusb_msc_remount(), assupervisor/shared/usb/usb_msc_flash.cdoes (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 returnDISK_STATUS_NOMEDIAwhile the drive is disabled. - Read-only to the host: not supported. MODE SENSE always reports no write protection (L600).
DISK_STATUS_WR_PROTECTis treated as medium not present. So when CIRCUITPY is writable by Python, as afterremount("/", readonly=False)inboot.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.
- Langage dominant
- C
- Étoiles
- 4.6k
- Forks
- 1.4k
- Merge moyen
- 1 j 7 h
- PR mergées (30 j)
- 166
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de adafruit/circuitpython
-
board breaks api
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
adafruit/circuitpython#11099 · 3 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
Move silabs to ZephyrOuvertesilabs
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 20/100
adafruit/circuitpython#11507 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Feature/API request: portable camera capture across ESP-IDF, Zephyr, and parallel interfacesPeut-être pris @tannewt l’a pris il y a 1 jour. Ouvertecircuitpython api displayio enhancement
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
adafruit/circuitpython#11505 · 5 commentaires · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 38/100
adafruit/circuitpython#11472 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 52/100
adafruit/circuitpython#11467 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de adafruit/circuitpython
Issues similaires
-
IO.get_env on Node truncates names at embedded NULPeut-être pris @Yi-111-a l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
HigherOrderCO/Bend#1449 · 1 commentaire ·
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
FujiNetWIFI/fujinet-firmware#1872 ·
Les mainteneurs répondent en général sous 1 jour
-
bug C/C++ code
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
webarkit/WebARKitLib#84 ·
Les mainteneurs répondent en général sous 1 jour
-
Bad device URI "://" on network printers. Printing stopped working between 2.4.19 and 2.4.20Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
OpenPrinting/cups#1751 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
es-ude/OnDeviceTraining#488 ·
Les mainteneurs répondent en général sous 1 jour