Notes and design docs from installing the Rockbox Sony NW Linux port on a Sony Walkman NWZ-E585, from a macOS / Apple Silicon host — and exploring how far its interface can be customized.
- rockbox-install-plan.md — the full install runbook and
record. Why a Linux VM is required (macOS has no SCSI backend in
librbscsi), staging the build + bootloader, UTM + USB passthrough, buildingscsitool, and thedo_fw_upgradeflash. Status: ✅ installed & verified. - device-stack.md — where every piece of code on the device sits:
hardware → Sony kernel → bootloader →
rockbox.sony→.rockplugins. Which of the two filesystems each lives on, and why that decides whether a change is a flash or a file copy. - customization.md — theming vs. the four tiers of changing the interface (skin → plugin → core fork → separate process), and what the plugin API does/doesn't let you reuse.
- hello/ — the smallest proof that our own code runs on the hardware: a
~50-line
.rockplugin. ✅ running on the device. See hello/README.md for the full build + deploy runbook. - bootloader/ — patch to the dual-boot chooser so the device boots
straight into our UI, showing the
SELECT PLAYERcarousel only if you tap PLAY during a 3-second window. ✅ flashed and working. Includes the tar-vs-ELF packaging trap that costs a flash cycle if you get it wrong. - custom-ui-architecture.md — deep dive: running Rockbox as a headless playback daemon driven by a separate UI process. Audio pipeline, the IPC seam, input/button handling, real symbols, and the core patch points.
- ui/ — skeleton of that custom front-end. One source tree, three builds (macOS + SDL, headless for tests, Linux framebuffer for the device), with the daemon mocked out so the UI is developed locally and ported once. See ui/README.md and ui/PROTOCOL.md.
- tools/svg2walkman.py — rasterise an SVG into
something the device can blit. Rockbox has no vector support and
lcd_bmphas no alpha or scaling, so size, colour and background are decided on the host. Emits<name>.<W>x<H>x16.bmpfor the Rockbox build (bootloader or plugin, viabmp2rb), and optionally a C RGB565 header forui/, which has no image loader of its own.--frames/--sweepproduce spinner sequences.
The 8.6 GB device backup and the Debian installer ISO are gitignored (personal /
large). See .gitignore.