This is a prebuilt image of Debian 13 (Trixie) for the Spotify Car Thing, aka superbird. It combines the stock kernel with a debian rootfs, and launches a fullscreen Chromium kiosk. I like to use it with Home Assistant.
This image will remove the default Spotify functionality. You should definitely make a full backup before proceeding!
Default user and password are both superbird
Working:
settings
partition used for Chromium user profileAvailable, but not used in this image:
Not working:
WiFi is technically possible on this hardware, but the stock bootloaders and kernel disable it. It might be possible to cherry-pick the wifi information from the Radxa Zero device tree (practically the same SoC), but I think you would need to rebuild one or more of the bootloader stages to make it work.
GPU: the hardware has a Mali GPU, but the stock OS uses it via DirectFB QT library, and does not include necessary libraries to make it work with X11. It may be possible to grab the needed files from Radxa Zero.
After installation, you will have 3 different boot options, depending on what buttons are held:
Debian Mode - default, no buttons held
boot_a
root is data
Utility Mode - hold button 1
boot_a
root is system_a
USB Burn Mode - hold button 4
# root may be needed, check superbird-tool readme for platform-specific usage
# make sure your device is found
python3 superbird_tool.py --find_device
# restore the entire folder to your device
python3 superbird_tool.py --restore_device ~/Downloads/debian_v1.2_2023-12-19
setup_host.sh
on the host device (as root), and rebootsuperbird
) :
# script added entry in /etc/hosts, use hostname "superbird" from host device
ssh superbird@superbird
# or by ip (host device is 192.168.7.1, superbird is 192.168.7.2)
ssh superbird@192.168.7.2
# where "host-device" is the hostname or ip of your host device
ssh -p 2022 superbird@host-device
/scripts/chromium_settings.sh
to change what URL to launch in the kiosk
sudo systemctl restart chromium.service
/scripts/buttons_settings.py
to change Home Assistant URL and add long-lived token for access
sudo systemctl restart buttons.service
/etc/X11/xorg.conf
to adjust screen timeout (default 10 mins), orientation (default portrait)
38
and 71
/scripts/setup_display.sh
and /scripts/setup_backlight.sh
to adjust backlight brightness (default 100)
sudo systemctl restart backlight.service
sudo vncpasswd /scripts/vnc_passwd
sudo systemctl restart vnc.service
--dump_device
to dump a stock device into ./dumps/debian_current/
./build_image.sh
, which will:
env.txt
with switchable version (see files/env/env_switchable.txt
)system_a
partition for Utility Mode:
files/system_a/etc/init.d/S49usbgadget
)/etc/fstab
and /etc/inittab
to not mount data
or settings
partitions (see files/system_a/etc/
)settings
partitiondata
partition, and:
systemd systemd-sysv dbus kmod usbutils htop nano tree file less locales sudo dialog apt wget curl iputils-ping iputils-tracepath iputils-arping iproute2 net-tools openssh-server ntp xserver-xorg-core xserver-xorg-video-fbdev xterm xinit x11-xserver-utils shared-mime-info xserver-xorg-input-evdev libinput-bin xserver-xorg-input-libinput xinput fbset x11vnc chromium python3-minimal python3-pip
requirements.txt
/lib/modules/4.9.113
from system_a
/etc/X11/xorg.conf
superbird
(configure in image_config.sh
)/etc/hosts
to resolve host
as 192.168.7.1
(host device)superbird
, password: superbird
, with passwordless sudo (configure in image_config.sh
)/scripts/
(see files/data/scripts/
)/lib/systemd/system/
(see files/data/lib/systemd/system/
)en_US.UTF-8
America/Los_Angeles
/etc/fstab
to mount settings
partition at /config
(for chromium profile) (see files/data/etc/fstab
)/etc/inittab
to enable serial console at 115200 baud (see files/data/etc/inittab
)logo
partition using files/logo/*.bmp
./dumps/debian_current/
ready to flash to device using superbird-toolHint: Install apt-cacher-ng
and then run ./build_image.sh --local_proxy
to use locally cached packages (avoid re-downloading packages every time, much faster)
None. You definitely can mess up your device in ways that are difficult to recover. I cannot promise a bug in this script will not brick your device. By using this tool, you accept responsibility for the outcome.
I highly recommend connecting to the UART console, frederic's repo has some good pictures showing where the pads are.
Make backups.