Support code to run on EV3 brick
Kernel module
Kernel module is based on LEGO's d_usbdev module, with the addition of slightly modified g_mass_storage
module from the Linux kernel. The module and supporting sources are licensed under GPLv2 (since
they are derived from GPLv2 code).
Modifications
- the
d_usbdevuses the composite framework to register an additional mass storage function in addtion to the pre-existing custom USB HID function - the
g_mass_storagemodule has the following changes:- a bug fixed, where page-misaligned writes would hang
- additional
/sys/.../lun0/activeentry is added, which allows for signaling drive eject to the host
Kernel modifications
The kernel itself has modified FIFO queue sizes. The LEGO kernel uses 1024 for ep1in and ep1out,
and then 64 for ep2 and ep3. Note that this is non-standard modification done with a kernel patch,
that I didn't manage to find. The MSD requires 512 for ep2 and ep3. I have binary edited the kernel
to do so.
Note that there's 4k of FIFO memory in the hardware. If you set the queue sizes with a sum of more than 4k, the kernel will hang, and you will not know why.
UF2 Daemon
The UF2 daemon is based on
UF2 ATSAMD21 bootloader code. It exposes a virtual
FAT16 file system over Linux Network Block Device interface (/dev/nbd0 to be precise).
This device is then exposed via the g_mass_storage module to the host computer.
The Daemon is licensed under MIT.