1.5 KiB
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_usbdev
uses the composite framework to register an additional mass storage function in addtion to the pre-existing custom USB HID function - the
g_mass_storage
module has the following changes:- a bug fixed, where page-misaligned writes would hang
- additional
/sys/.../lun0/active
entry 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.