Engine OS
Engine OS is inMusic's DJ operating system, with some additional custom software on top of a stock embedded Linux distribution.
Build System
Engine OS was built with Buildroot from the beginning up to and including 4.3.4, and switched to Yocto/OpenEmbedded (scarthgap) in 5.0.0.
The table below covers every Prime Go (JP11) release from 1.6.2 to 5.0.4. Consecutive releases sharing a build are grouped. Other RK3288 devices ship the same platform, so the distribution and kernel should match version-for-version, but I've only walked the full history on the Prime Go.
Firmware |
|
| Kernel |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
On 5.x the ID is the platform name rather than the distribution, so it varies by hardware generation: az01 on RK3288, az04 on the RK3588 Rane System One. The CPE_NAME gives the distribution away:
inMusic's own code treats the two as distinct. The test app launcher reads /etc/os-release and branches on ID to decide which field holds the OS version:
| Field read | Example |
|---|---|---|
|
|
|
|
|
|
Anything else is logged as Unknown embedded platform. This matters when writing a test app catalog, because the osVersionID in manifest.yaml has to match whichever of those two fields applies to the target firmware.
Note that VERSION_ID is not the VERSION string in the table above - it drops the git describe suffix, and it doesn't always track it. 1.6.2 reports VERSION=2020.02.3-311-... but VERSION_ID=2020.02.6. These are the values a manifest has to match:
Firmware |
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The comparison tries an exact string match first and only then falls back to splitting on . and matching major and minor. scarthgap has no dots, so on 5.x the value has to be exactly right.
Other Layout Changes
5.x also made the root filesystem properly read-only, with writable /etc and /var provided by overlays backed by the /data partition (etc.mount, var.mount, overlayfs-setup.service). On 4.x there are no overlays, and a mount -o remount,rw / is needed before anything under /etc can be modified.
Emulation
QEngine boots Engine OS under QEMU on an ordinary host, with no inMusic hardware involved. It covers 4.3.0, 4.6.0 and 5.0.4 across the armv7/RK3288 lineup and the arm64/RK3588 System One, and reaches a running Engine UI with working audio playback and MIDI from real USB controllers passed through to the guest.
It works by LD_PRELOADing shims that fake the hardware Engine refuses to start without:
Shim | What it provides |
|---|---|
| The |
| Rewrites |
| Gets the emulated card past |
| Synthetic |
Findings Worth Carrying Over
inmusic,product-codeis the entire product identity. Faking it changes which UI screens appear, the screen-size assumptions, and whether the battery gate applies, so a Prime Go image spoofed asJC11boots as a Prime 4. Software covers where the property lives on real hardware.Engineaborts outright without it, loggingair.planck.config: Unable to find product "" in config map!, then crash-looping throughengine.service'sRestart=on-failure.The accepted audio devices are a compiled-in allowlist.
ALSADeviceEnumerator::scanDevices()matchessnd_ctl_card_info_get_name()against theAudioDeviceskey of the per-product config map inside the binary, and closes any card that isn't listed before looking at its PCM devices or formats at all. Nothing on the rootfs contains that list.Battery-powered units gate startup on a touch gesture. The Prime Go shows its "touch and hold the logo" prompt and quits after 30 seconds if nothing holds it. The Prime 4 has no battery and skips it entirely.
Telemetry is on by default on every version tested, sending crash reports and anonymous analytics to
o230257.ingest.sentry.io. Itsdocs/BLOCKING_TELEMETRY.mdblocks this with an/etc/hostsentry, which is worth doing before experimenting on a unit so that inMusic isn't sent noise from research. See Reporter.
Custom Applications
This is additional custom software that I've noticed in the firmware, along with documentation pages for them.
Software name | Software Path | Description | Page |
|---|---|---|---|
Engine |
| The main software that the user interacts with. | |
Firmware Updater |
| TODO | |
MIDI Device Scanner |
| TODO | |
Offline Analyzer |
| TODO | |
Reporter |
| TODO | |
| The software that provides the lighting control functionality. | ||
[HARDWARE_ID] Test App |
| Debug software for testing switches, LEDs, etc. |