­čĺ╗ Hatari auf Raspberry Pi ohne X11

➤ Martin D├Âring, zuletzt ge├Ąndert, 14. Juni 2022
Hatari auf dem Raspberry Pi

Wir m├Âchten auf einem Raspberry Pi 3B oder 4 ein minimales Linux-System installieren, welches nur dazu dient, uns einen Atari-ST-Emulator Hatari zur Verf├╝gung zu stellen. Ziel gegen├╝ber einer normalen Installation eines grafischen Raspberry Pi OS soll es sein, so wenig unn├╝tzes Zeug zu installieren, wie m├Âglich, die beschleunigten grafischen Funktionen des Raspberry Pi trotzdem voll zu nutzen und im Endeffekt sp├Ąter einmal direkt in den Emulator zu booten, so dass der emulierte Atari ST mit EmuTOS und allem sonst, was wir auf dieser Basis noch on-top installieren k├Ânnen, voll im Vordergrund stehen.

Die L├Âsung einen Raspberry Pi als neuen und modernen Quasi-Atari ST zu nutzen ist vor allem deswegen interessant, weil es diesen Rechner f├╝r 30-40 Euro zzgl. Geh├Ąuse, 5V-USB-Netzteil, Tasten und Maus gibt und er alles schon drin hat, was man den liebevoll gepflegten alten Ataris von 260ST bis Falcon heute teuer nachr├╝sten muss:

Wenn man einfach mal zusammenrechnet, was das alles kostet, dann wei├č man, was einem so ein echter Atari-Retro-Liebling wirklich wert ist. Ich bin ja auch anf├Ąllig... ;-)

Was dieser Artikel nicht oder noch nicht umfasst:

Wer ein fertiges System dieser Art mit allem drum und dran w├╝nscht, ohne selber alles im Detail verstehen zu wollen, dem kann ich sehr BeePi von Philippe empfehlen.

🌐 BeePI 2.0

Hier muss nur die MicroSD-Card geflasht werden und der Rest ist stark automatisiert und sehr durchdacht. Wer hingegen ein System auch verstehen m├Âchte und es ggf. St├╝ck f├╝r St├╝ck selber aufbauen und optimieren m├Âchte, der kann jetzt gerne weiter lesen.

Linux-Kenntnisse auf der Kommandozeile, Bedienung eines Editors etc. werden hier ebenfalls vorausgesetzt. Ein Fernzugang via ssh ist auch sinnvoll, um von einem anderen Rechner u.U weitere Daten, ROMs usw. einzuspielen.

Installation von Raspberry Pi OS

Zun├Ąchst holen wir uns von der Raspberry Pi Foundation den Raspberry Pi Imager, legen eine MicroSD-Card in unser Notebook ein (ggf. mit Adapter oder entsprechendem Leseger├Ąt) und Flashen uns das Raspberry Pi OS lite auf unsere Karte. Also das System ohne grafische Benutzeroberfl├Ąche:

🌐 https://www.raspberrypi.com/software/

Ich habe dies alles mit der 64-Bit-Variante getestet, ob es mit 32 Bit auch funktioniert, habe ich noch nicht probiert.

Der Imager kann selber das System herunterladen und dann auf die MicrSD-Card speichern. Diese Stecken wir dann in unseren Raspberry PI, schlie├čen Monitor, Tastatur und Maus an und starten diesen.

Als n├Ąchstes m├╝ssen wir unser frisches System, nachdem es gestartet ist und wir einige initiale Fragen beantwortet haben, in unser WLAN oder LAN holen. LAN ist einfach: Kabel vom router anstecken. F├╝r's WLAN rufen wir raspi-config auf und konfigurieren das System:

sudo raspi-config
> 1 System Options
> S1 Wireless LAN

Hier geben wir dann unser WLAN an und das dazugeh├Ârige Passwort.

System-Vorbereitung

Das System werden wir nun auf den aktuellsten Stand bringen und neu starten:

sudo apt update
sudo apt upgrade
sudo reboot
sudo rpi-update (wg. EGL-Driver)
sudo reboot

Jetzt bereiten wir unseren Raspberry Pi so vor, dass er eine beschleunigte Grafik auf der Console hat:

$ sudo raspi-config
select '6 Advanced Options'
select 'A2 GL Driver'
select 'G2 GL (Full KMS)'
sudo reboot

Installieren, was wir an Entwicklungstools brauchen:

sudo apt install git cmake

Weitere Libraries installieren, die wir f├╝r SDL ben├Âtigen:

sudo apt install libudev-dev libasound2-dev \
libdbus-1-dev mesa-utils-extra  libegl1-mesa \
libdrm-dev libgbm-dev 

Die folgenden Videocore-Binary-Blobs sind normalerweise installiert und m├╝ssen nicht extra installiert werden. Hier nur zur Referenz:

sudo apt install libraspberrypi0 libraspberrypi-bin libraspberrypi-dev

Irgendwie geh├Ârt der Pfad unter /usr/local offenbar nicht mehr offiziell zum System, daher hier die Erg├Ąnzung f├╝r Libraries und Binaries, zur Erg├Ąnzung am Ende der Datei ~/.bashrc

$ export LD_LIBRARY_PATH=/usr/local/lib 
$ export PATH=$PATH:/usr/local/bin

Danach einmal ausloggen und wieder einloggen und schauen, ob die beiden Variablen f├╝r unseren Benutzer getzt sind mit:

echo $LD_LIBRARY_PATH
echo $PATH

SLD 2 Extract & build

Wir packen all unsere Quelltexte f├╝r SDL und Hatari in einen eigenen Ordner:

mkdir -p ~/src,
cd src

Jetzt holen wir uns als erstes die SDL2-Library mit Git:

git clone https://github.com/libsdl-org/SDL
cd SDL

Wir Bauen machen wir uns einen eigenen Ordner - reine Ästhetik:

mkdir -p build
cd build

Und nun konfigurieren wir unsere SDL2-Library so, dass sie nur auf der Console des Raspberry Pi l├Ąuft, aber nicht unter X11, Wayland oder woanders:

../configure \
--disable-pulseaudio \
--disable-video-vivante \
--disable-video-opengl \
--disable-video-wayland \
--disable-video-directfb \
--disable-video-vulkan \
--disable-video-metal \
--disable-video-cocoa \
--disable-video-rpi \
--enable-video-kmsdrm \
--enable-video-opengles 

make
sudo make install

SDL2 wird jetzt unter /usr/local installiert, damit sich unsere selbstgebauten Programme nicht mit den ├╝ber den Paketmanager installierten vermischen.

Damit haben wir jetzt alles, was wir als Basis f├╝r Hatari brauchen.

Bau und Installation von Hatari aus dem Quellcode

Zun├Ąchst holen wir uns den Quellcode von Hatari, wieder mit Git:

cd ~/src
git clone https://git.tuxfamily.org/hatari/hatari.git/ 
cd hatari
mkdir -p build
cd build
../configure
make
sudo make install

Sind wir auf einer Console eingeloggt, k├Ânnen wir hier nat├╝rlich automatisch die Tastatur benutzen. Starten wir aber ohne Grafische Benutzerumgebung, wie Gnome, KDE, oder X11 ein grafisches Programm direkt, so ben├Âtigt dieses f├╝r die Benutzung von Eingabeger├Ąten explizit eine Berechtigung. Der Benutzer eh├Ąlt diese, indem wir ihn in die Gruppe "input" nehmen:

sudo usermod -aG input $USER
exit     # und neu anmelden

Jetzt haben wir alles, was wir ben├Âtigen, um Hatari auf der Linux-Console vom Raspberry Pi direkt zu starten:

hatari

Hatari automatisch starten beim Systemstart

Jetzt wollen wir erreichen, dass unser System beim Start gleich in den Hatari bootet und beim Beenden von Hatari mit F11 und Quit uns ein Men├╝ mit weiteren Optionen zur Verf├╝gung stellt, ob wir in eine Shell wollen, das System durchstarten oder ganz herunterfahren wollen.

F├╝r alles hier folgende werden wir zun├Ąchst root User:

sudo -i

Wir legen uns eine eigene Gruppe und einen eigenen User "atari" an, unter dem Hatari sp├Ąter l├Ąuft und vergeben ein Passwort:

groupadd atari
useradd -g atari -d /home/atari -m -s /bin/bash -c "Atari User" atari
usermod -a -G sudo,video,audio,input atari
passwd atari    # Passwort setzen

Dann erlauben wir allen Benutzern in der Gruppe "atari", das System ohne weitere Eingabe eines Passwortes herunter zu fahren oder neu zu starten:

Daf├╝r werden wir wieder root und legen folgende Datei an:

nano /etc/sudoers.d/010_hatari-nopasswd

mit diesem Inhalt:

# Allow users in group "atari" to stop the system
%atari ALL=NOPASSWD: /sbin/reboot, /sbin/poweroff

Dies wird erst nach Ausloggen und wieder Einloggen oder dem Neustart des Systems wirksam. Aber wir sind ja momentan sowieso nicht der User "atari".

Nun bauen wir ein Men├╝, welches uns sp├Ąter eine Wahl erlaubt, was wir nach dem Verlassen von Hatari tun wollen. Wir schreibe es in diese Datei:

nano /usr/local/bin/hatari-menu.sh

... mit diesem Inhalt:

#!/bin/bash

# Set paths for Hatari and SDL
export LD_LIBRARY_PATH=/usr/local/lib 
export PATH=$PATH:/usr/local/bin

# At first always boot into Hatari (delete if not liked)
hatari

# After closing Hatari, now give us a choice
while true
do 
    cmd=(dialog --keep-tite --menu "Hatari Menu" 11 12 4)

    options=(1 "Hatari"
             2 "Shell"
             3 "Reboot"
             4 "Shutdown")

    choices=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)

    for choice in $choices
    do
        case $choice in
            1) hatari ;;
            2) /bin/bash ;;
            3) sudo /sbin/reboot -f ;;
            4) sudo /sbin/poweroff -f ;;
        esac
    done
done

Jetzt machen wir unser Men├╝-Script ausf├╝hrbar:

chmod +x /usr/local/bin/hatari-menu.sh

Damit dieses Men├╝ funktioniert, m├╝ssen wir noch ein Kommando installieren, falls noch nicht geschehen, was uns die sch├Ânen Men├╝s sp├Ąter anzeigt:

apt install dialog

Um zu testen, ob unser Men├╝ funktioniert, k├Ânnen wir es einmal per Hand aufrufen. Mit < strg > +C k├Ânnen wir es hart wieder stoppen bzw. da raus kommen - oder mit einem Reboot. ;-)

Und nun wollen wir, dass beim Start des Rechners auf der ersten virtuellen Console automatisch unser Men├╝ erscheint, anstelle des Logins. Dazu legen wir wieder eine Datei an:

nano /etc/systemd/system/getty@tty1.service.d/override.conf

... und schreiben Folgendes hinein:

[Service]
ExecStart=
ExecStart=-/usr/local/bin/hatari-menu.sh
StandardInput=tty
StandardOutput=tty
StandardError=tty

Nun laden wir den System-Daemon neu und starten die Anzeige f├╝r TTY1 neu:

systemctl daemon-reload
systemctl restart getty@tty1.service

Jetzt sollten wir so weit sein, dass unser System in den Hatari bootet und wenn wir diesen mit F12 und Quit wieder verlassen, dann bekommen wir unser Men├╝, was wir als n├Ąchstes tun k├Ânnen

Nat├╝rlich muss Hatari noch mit einem EmuTOS oder anderem ROM ausgestattet werden, das muss irgendwo im Home-Verzeichnis des Linux-Benutzers "atari" liegen. Dieser Schritt und alle weiteren Schritte zur Einrichtung von Hatari sind genau so, wie ├╝berall bei Hatari.

Ab hier funktioniert Dein System im Grunde so, wie ein Atari mit einem modernen und flexiblen Unterbau. Viel Spa├č mit Deinem neuen Hatari/EmuTOS-System.

Achtung!!! Bei Problemen kannst Du Dich immer ├╝ber <strg>+<alt>+F2 an einer zweiten Console anmelden und Fehler beseitigen. Die Console tty1 ist vom Hatari belegt. Dies erreichst Du immer mit <strg>+<alt>+F1

Ich freue mich immer ├╝ber Erg├Ąnzungen oder entdeckte Fehler. Kontakt siehe ganz oben.

Links

🌐 SDL2-Informationen zum Raspberry Pi
🌐 Direkte Benutzung von Videotreiber kmsdrm mit SDL2
🌐 EmuTOS als moderne Weiterentwicklung von TOS
🌐 Hatari Dokumentation
🌐 SDL2 on Raspberry Pi without X?

➤ Zur├╝ck
➤ Datenschutzinformation