Minimales Linux für AmiBerry

Falke_34

Newbie
Registriert
Sep. 2006
Beiträge
7
Ich muß nun doch einmal bei euch fragen - vielleicht kann mir ja jemand helfen.

Kurz zu mir:
  • ich habe nur Grundkenntnisse (wenn überhaupt) von Linux
  • ich probiere mehr als das ich wüßte was ich tue ;)
  • viel hilft derzeit auch ChatGPT
  • wenn mein Wunsch nicht erfüllt werden kann dann ist dies nicht schlimm, hab ja noch den originalen Amiga1200 mit PiStorm32 hier stehen oder den alten nforce/AthlonXP/Geforce4ti4200 Rechner mit Amithlon

AmiBerry: https://github.com/BlitterStudio/amiberry
Amithlon: https://de.wikipedia.org/wiki/Amiga-Emulator

Mein vorhaben:
  • ein minimales Linux für x86_64 welches Amiberry (Amiga Emulator)
  • ähnlich wie Amithlon bootet (sprich einfach auf ne Fat32 Partition kopieren)
LABEL Amithlon_VGA
MENU LABEL Amithlon - Standart VGA
KERNEL /Boot/kern310
APPEND console_level=0 init=/linuxrc root=/dev/ram0 mem=512M vga=769 ramdisk_size=2310 leavepages=5200 cachesize=65536 initrd=/Boot/smallird.gz

- probiert habe ich nun Buildroot und mir ein Script gebastelt welches alles in einem Rutsch erledigen soll - booten tut es schonmal aber es kann anscheinend kein Grafikausgabe geöffnet werden und genau an dieser Stelle komme ich nicht weiter, evtl funktioniert das auch gar nicht mit Buildroot? Vielleicht gibt es hier jemanden der mir weiterhelfen kann

Script hänge ich mal an (läuft auf Ubuntu in QEmu)

Code:
#!/usr/bin/env bash
set -e

EXT=xz
BUILDROOT_VERSION=2025.08.1
BR_DIR="buildroot-${BUILDROOT_VERSION}"
BOARD="board/x86_64"
JOBS=$(( $(nproc)+1 ))

# -------------------------------
# 1) Buildroot holen (Tarball)
# -------------------------------
step1_buildroot_clone() {
    if [ -d "$BR_DIR" ]; then
        echo "[OK] $BR_DIR bereits vorhanden"
        return
    fi

    if [ ! -f "${BR_DIR}.tar.${EXT}" ]; then
        echo "[*] Lade Buildroot $BUILDROOT_VERSION..."
        wget "https://buildroot.org/downloads/${BR_DIR}.tar.${EXT}"
    fi

    echo "[*] Entpacke Buildroot..."
    tar xvJf "${BR_DIR}.tar.${EXT}"
}

# -------------------------------
# 2) Amiberry Package (libenet, PortMidi, CMake)
# -------------------------------
step2_amiberry_package() {
    echo "[*] Erzeuge libenet + PortMidi + Amiberry Buildroot-Packages"

    # In Buildroot wechseln
    pushd "$BR_DIR" > /dev/null

    mkdir -p package/libenet
    mkdir -p package/portmidi
    mkdir -p package/amiberry

    # ===============================
    # libenet
    # ===============================
    cat > package/libenet/Config.in <<'EOF'
config BR2_PACKAGE_LIBENET
    bool "libenet"
    help
      Reliable UDP networking library used by Amiberry (UAENET)
EOF

    cat > package/libenet/libenet.mk <<'EOF'
LIBENET_VERSION = 1.3.18
LIBENET_SITE = https://github.com/lsalzman/enet/archive/refs/tags
LIBENET_SOURCE = v$(LIBENET_VERSION).tar.gz
LIBENET_SITE_METHOD = tar
LIBENET_LICENSE = MIT
LIBENET_LICENSE_FILES = LICENSE
LIBENET_INSTALL_STAGING = YES
LIBENET_INSTALL_TARGET = YES

$(eval $(cmake-package))
EOF

    # ===============================
    # PortMidi
    # ===============================
    cat > package/portmidi/Config.in <<'EOF'
config BR2_PACKAGE_PORTMIDI
    bool "PortMidi"
    help
      Cross-platform MIDI I/O library (used by Amiberry)
EOF

    cat > package/portmidi/portmidi.mk <<'EOF'
PORTMIDI_VERSION = 2.0.6
PORTMIDI_SITE = https://github.com/PortMidi/portmidi/archive/refs/tags
PORTMIDI_SOURCE = v$(PORTMIDI_VERSION).tar.gz
PORTMIDI_SITE_METHOD = tar
PORTMIDI_LICENSE = MIT
PORTMIDI_LICENSE_FILES = license.txt
PORTMIDI_DEPENDENCIES = alsa-lib
PORTMIDI_INSTALL_STAGING = YES
PORTMIDI_INSTALL_TARGET = YES

$(eval $(cmake-package))
EOF

    # ===============================
    # Amiberry
    # ===============================
    cat > package/amiberry/Config.in <<'EOF'
config BR2_PACKAGE_AMIBERRY
    bool "Amiberry"
    depends on BR2_TOOLCHAIN_HAS_THREADS
    depends on BR2_INSTALL_LIBSTDCPP
    depends on BR2_PACKAGE_SDL2
    select BR2_PACKAGE_SDL2_IMAGE
    select BR2_PACKAGE_SDL2_TTF
    select BR2_PACKAGE_MPG123
    select BR2_PACKAGE_FLAC
    select BR2_PACKAGE_LIBMPEG2
    select BR2_PACKAGE_LIBSERIALPORT
    select BR2_PACKAGE_LIBENET
    select BR2_PACKAGE_PORTMIDI
    select BR2_PACKAGE_ZSTD
    help
      Amiberry Amiga Emulator (SDL2, x86_64)

      https://github.com/BlitterStudio/amiberry
EOF

    cat > package/amiberry/amiberry.mk <<'EOF'
AMIBERRY_VERSION = c516867
AMIBERRY_SITE = https://github.com/BlitterStudio/amiberry.git
AMIBERRY_SITE_METHOD = git
AMIBERRY_GIT_SUBMODULES = YES
AMIBERRY_COMMIT = c516867
AMIBERRY_LICENSE = GPL-3.0
AMIBERRY_LICENSE_FILES = COPYING

AMIBERRY_DEPENDENCIES = \
    sdl2 sdl2_image sdl2_ttf \
    mpg123 flac libmpeg2 \
    libserialport portmidi libenet zstd

AMIBERRY_INSTALL_STAGING = NO
AMIBERRY_INSTALL_TARGET = YES
AMIBERRY_SUPPORTS_IN_SOURCE_BUILD = NO

AMIBERRY_CONF_OPTS = \
    -DUSE_SDL2=ON \
    -DUSE_LIBENET=OFF \
    -DUSE_PORTMIDI=ON \
    -DUSE_LIBSERIALPORT=ON \
    -DUSE_LIBMPEG2=ON \
    -DUSE_UAENET_PCAP=OFF \
    -DCMAKE_BUILD_TYPE=Release \
    -DLIBENET_LIBRARIES=$(STAGING_DIR)/usr/lib/libenet.a \
    -DCMAKE_INSTALL_PREFIX=/usr

define AMIBERRY_INSTALL_TARGET_CMDS
    # Binary
    $(INSTALL) -D -m 0755 \
        $(@D)/buildroot-build/amiberry \
        $(TARGET_DIR)/usr/bin/amiberry

    # Runtime shared libs
    $(INSTALL) -D -m 0755 \
        $(@D)/buildroot-build/external/capsimage/libcapsimage.so \
        $(TARGET_DIR)/usr/lib/libcapsimage.so

    $(INSTALL) -D -m 0755 \
        $(@D)/buildroot-build/external/floppybridge/libfloppybridge.so \
        $(TARGET_DIR)/usr/lib/libfloppybridge.so

    # Data files
    mkdir -p $(TARGET_DIR)/usr/share/amiberry
    cp -a $(@D)/data \
        $(TARGET_DIR)/usr/share/amiberry/
    cp -a $(@D)/roms \
        $(TARGET_DIR)/usr/share/amiberry/
endef

$(eval $(cmake-package))
EOF

    # ===============================
    # Einbindung in Buildroot
    # ===============================
    for pkg in libenet portmidi amiberry; do
        grep -q "package/$pkg/Config.in" package/Config.in || \
            echo "source \"package/$pkg/Config.in\"" >> package/Config.in
    done

    popd > /dev/null
    echo "[OK] Amiberry + libenet + PortMidi eingebunden"
}

# -------------------------------
# 3) Kernel + Buildroot Config + Overlay
# -------------------------------
step3_config_apply() {
    echo "[*] Erzeuge Kernel- und Buildroot-Konfiguration..."

    pushd "$BR_DIR" > /dev/null

    # -----------------------------------------
    # 2a) Kernel-Config (board/pc/linux.config)
    # -----------------------------------------
    mkdir -p board/pc
    cat > board/pc/linux.config <<'EOF'
CONFIG_64BIT=y
CONFIG_X86_64=y
CONFIG_X86_GENERIC=y

CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_PROC_FS=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y

CONFIG_EXT4_FS=y
CONFIG_VFAT_FS=y
CONFIG_MSDOS_FS=y

CONFIG_FB=y
CONFIG_FB_VESA=y
CONFIG_FB_SIMPLE=y
CONFIG_FB_SYS_FOPS=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_VGA_CONSOLE=y

CONFIG_DRM=y
CONFIG_DRM_KMS_HELPER=y
CONFIG_DRM_BOCHS=y
CONFIG_DRM_VIRTIO_GPU=y
CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_I915=y
CONFIG_DRM_AMDGPU=y
CONFIG_DRM_NOUVEAU=y
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_SYSFB=y
CONFIG_SYSFB_SIMPLEFB=y

CONFIG_INPUT=y
CONFIG_INPUT_EVDEV=y
CONFIG_KEYBOARD_ATKBD=y
CONFIG_MOUSE_PS2=y

CONFIG_SOUND=y
CONFIG_SND=y
CONFIG_SND_PCM=y
CONFIG_SND_HDA_INTEL=y
CONFIG_SND_TIMER=y
CONFIG_SND_PCM=y

CONFIG_NET=y
CONFIG_INET=y
CONFIG_PACKET=y
CONFIG_UNIX=y

CONFIG_VIRTIO=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_BLK=y
CONFIG_VIRTIO_NET=y
CONFIG_VIRTIO_CONSOLE=y

CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y

CONFIG_INITRAMFS_SOURCE=""
CONFIG_BLK_DEV_INITRD=y
EOF

    # -----------------------------------------
    # 2b) Buildroot Defconfig
    # -----------------------------------------
    cat > configs/x86_64_amiberry_defconfig <<'EOF'
BR2_x86_64=y
BR2_x86_64_GENERIC=y

# Toolchain
BR2_TOOLCHAIN_BUILDROOT=y
BR2_TOOLCHAIN_BUILDROOT_CXX=y
BR2_TOOLCHAIN_HAS_THREADS=y

# Kernel
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=n
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.47"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/pc/linux.config"
BR2_LINUX_KERNEL_IMAGE=y
BR2_LINUX_KERNEL_IMAGE_NAME="bzImage"
BR2_LINUX_KERNEL_INSTALL_TARGET=y
BR2_LINUX_KERNEL_HEADERS_CHECK=n

# Rootfs
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_4=y
BR2_TARGET_ROOTFS_EXT2_SIZE="256M"
BR2_TARGET_ROOTFS_CPIO=y
BR2_TARGET_ROOTFS_CPIO_GZIP=y
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
BR2_TARGET_GENERIC_GETTY_PORT="tty1"

# Rootfs / Overlay
BR2_ROOTFS_OVERLAY="board/x86_64/overlay"

# SDL / Grafik / Audio
BR2_PACKAGE_MESA3D=y
BR2_PACKAGE_MESA3D_EGL=y
BR2_PACKAGE_MESA3D_GBM=y
BR2_PACKAGE_MESA3D_GALLIUM=y
BR2_PACKAGE_MESA3D_OPENGL_ES=y
BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_I915=y
BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI=y
BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU=y
BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SVGA=y
BR2_PACKAGE_LIBDRM=y
BR2_PACKAGE_LIBDRM_INTEL=y
BR2_PACKAGE_LIBDRM_AMDGPU=y
BR2_PACKAGE_LIBDRM_NOUVEAU=y
BR2_PACKAGE_LIBDRM_VIRTIO=y
BR2_PACKAGE_LLVM=y
BR2_PACKAGE_LLVM_RTTI=y

# SDL2
BR2_PACKAGE_SDL2=y
BR2_PACKAGE_SDL2_IMAGE=y
BR2_PACKAGE_SDL2_TTF=y
BR2_PACKAGE_SDL2_MIXER=y
BR2_PACKAGE_SDL2_KMSDRM=y
BR2_PACKAGE_SDL2_FBDEV=y
BR2_PACKAGE_SDL2_RENDER_DRIVER_OPENGL=y
BR2_PACKAGE_SDL2_RENDER_DRIVER_OPENGLES2=y
BR2_PACKAGE_SDL2_RENDER_DRIVER_SOFTWARE=y
BR2_PACKAGE_SDL2_ALSA=y
BR2_PACKAGE_SDL2_EVDEV=y

BR2_PACKAGE_ALSA_LIB=y

# Emulator
BR2_PACKAGE_AMIBERRY=y
BR2_PACKAGE_PORTMIDI=y
BR2_PACKAGE_LIBSERIALPORT=y
BR2_PACKAGE_LIBMPEG2=y
BR2_PACKAGE_FLAC=y
BR2_PACKAGE_LIBZSTD=y
BR2_PACKAGE_LIBPNG=y
BR2_PACKAGE_LIBENET=n

# Netzwerk
BR2_PACKAGE_CONNMAN=y
BR2_PACKAGE_CONNMAN_CLIENT=y
BR2_PACKAGE_CONNMAN_WIFI=y
BR2_PACKAGE_WIRELESS_REGDB=y

# Tools
BR2_PACKAGE_ACPID=y
BR2_PACKAGE_WGET=y

# Bootloader
BR2_TARGET_GRUB2=y
BR2_TARGET_GRUB2_INSTALL_TOOLS=y

# Image tools
BR2_PACKAGE_HOST_GENIMAGE=y
EOF

    # -----------------------------------------
    # 2c) Overlay / Autostart Amiberry
    # -----------------------------------------
    OVERLAY="board/x86_64/overlay"
    mkdir -p \
      "$OVERLAY/etc/init.d" \
      "$OVERLAY/etc/profile.d" \
      "$OVERLAY/etc" \
      "$OVERLAY/data/amiberry/conf"

    # Autostart Script
    cat > "$OVERLAY/etc/init.d/S99amiberry" <<'EOF'
#!/bin/sh

DAEMON=/usr/bin/amiberry
DATA=/data/amiberry
CONF=$DATA/conf/default.uae
PIDFILE=/var/run/amiberry.pid

case "$1" in
  start)
    echo "[amiberry] starting..."
    mkdir -p "$DATA/conf"
    [ -e /amiberry ] || ln -s "$DATA" /amiberry
    start-stop-daemon -S -b -m -p "$PIDFILE" -x "$DAEMON" -- -f "$CONF"
    ;;
  stop)
    echo "[amiberry] stopping..."
    start-stop-daemon -K -p "$PIDFILE"
    ;;
  restart)
    $0 stop
    sleep 1
    $0 start
    ;;
esac
EOF
    chmod +x "$OVERLAY/etc/init.d/S99amiberry"

    # SDL / Audio Environment
    cat > "$OVERLAY/etc/profile.d/sdl.sh" <<'EOF'
#!/bin/sh

unset SDL_VIDEODRIVER
unset SDL_RENDER_DRIVER
unset SDL_KMSDRM_DEVICE

export SDL_VIDEODRIVER=kmsdrm,fbdev
export SDL_RENDER_DRIVER=opengles2,opengl,software
export SDL_AUDIODRIVER=alsa
export SDL_NOMOUSE=0
EOF
    chmod +x "$OVERLAY/etc/profile.d/sdl.sh"

    # fstab f\FCr /data Partition
    cat > "$OVERLAY/etc/fstab" <<'EOF'
proc        /proc   proc     defaults 0 0
sysfs       /sys    sysfs    defaults 0 0
devtmpfs    /dev    devtmpfs defaults 0 0
LABEL=DATA  /data   ext4     rw,noatime 0 0
EOF

    # Default Amiberry config
    cat > "$OVERLAY/data/amiberry/conf/default.uae" <<'EOF'
use_gui=no
gfx_fullscreen_amiga=true
gfx_fullscreen_picasso=true
gfx_width_fullscreen=1280
gfx_height_fullscreen=720
gfx_vsync=true
sound_output=normal
EOF

    # -----------------------------------------
    # 2d) Anwenden
    # -----------------------------------------
    cp configs/x86_64_amiberry_defconfig .config
    make olddefconfig

    popd > /dev/null
    echo "[OK] Kernel- und Buildroot-Config + Overlay angewendet"
}

# -------------------------------
# 3.5) Manuelles menuconfig (SDL2 Renderer Fix)
# -------------------------------
step35_menuconfig() {
    echo "[*] \D6ffne make menuconfig (bitte SDL2 Renderer aktivieren!)"
    echo
    echo "WICHTIG:"
    echo "Target packages ? Graphics ? sdl2"
    echo "  [*] Software rendering   (PFLICHT)"
    echo "  [*] KMS/DRM video driver"
    echo "  [*] Framebuffer video driver"
    echo
    echo "Zus\E4tzlich:"
    echo "Target packages ? Libraries ? Graphics"
    echo "  [*] libdrm"
    echo "  [*] mesa3d ? EGL + GBM"
    echo
    read -p "ENTER zum \D6ffnen von menuconfig..."

    pushd "$BR_DIR" > /dev/null
    make menuconfig
    popd > /dev/null

    echo "[OK] menuconfig abgeschlossen \96 Konfiguration gespeichert"
}

# -------------------------------
# 4) Pr\FCfe benoetigte Host-Pakete
# -------------------------------
step4_check_host_dependencies() {
    echo "[*] Pruefe benoetigte Host-Pakete..."

    deps=(build-essential git cmake \
          libsdl2-dev libsdl2-ttf-dev libsdl2-image-dev \
          libflac-dev libmpg123-dev libpng-dev libmpeg2-4-dev \
          libserialport-dev libportmidi-dev libenet-dev \
          libpcap-dev libzstd-dev libglew-dev libelf-dev binutils-dev)

    missing=()
    for pkg in "${deps[@]}"; do
        if ! dpkg -s "$pkg" &>/dev/null; then
            missing+=("$pkg")
        fi
    done

    if [ ${#missing[@]} -eq 0 ]; then
        echo "[OK] Alle Host-Abhaengigkeiten sind installiert."
        return
    fi

    echo "[!] Folgende Pakete fehlen: ${missing[*]}"
    read -p "Moechtest du sie jetzt installieren? [Y/n]: " choice
    if [[ "$choice" =~ ^[Yy]$ || -z "$choice" ]]; then
        sudo apt update
        sudo apt install -y "${missing[@]}"
    else
        echo "[!] Build kann fehlschlagen, da Pakete fehlen."
    fi

    popd > /dev/null
}

# -------------------------------
# 5) Buildroot bauen (optimiert, pfadfrei)
# -------------------------------
step5_buildroot_build() {

    # In Buildroot wechseln
    pushd "$BR_DIR" > /dev/null

    # 2) Optional: komplettes Clean
    read -p "[?] Vor dem Build alles sauber machen? (y/N): " clean_choice
    if [[ "$clean_choice" =~ ^[Yy]$ ]]; then
        echo "[*] Clean starten..."
        make clean
        echo "[OK] Clean abgeschlossen"
    fi

    # 3) Build starten
    echo "[*] Buildroot bauen mit $JOBS Jobs..."
    make -j"$JOBS" BR2_JOBS="$JOBS"

    popd > /dev/null
    echo "[OK] Buildroot gebaut"
}

# -------------------------------
# Menue
# -------------------------------
menu() {
    clear
    echo "=== Buildroot + Amiberry x86_64 ==="
    echo "1) Buildroot herunterladen"
    echo "2) Amiberry Package erstellen"
    echo "3) Fertige Config anwenden"
    echo "3.5) menuconfig (SDL2 Renderer setzen)"
    echo "4) Check Host Dependencies"
    echo "5) Buildroot bauen"
    echo "0) Beenden"
    read -p "Auswahl: " c

    case $c in
      1) step1_buildroot_clone ;;
      2) step2_amiberry_package ;;
      3) step3_config_apply ;;
      35) step35_menuconfig ;;
      4) step4_check_host_dependencies ;;
      5) step5_buildroot_build ;;
      6)
         step1_buildroot_clone
         step2_amiberry_package
         step3_config_apply
         step35_menuconfig
         step4_check_host_dependencies
         step5_buildroot_build
         ;;
      0) exit 0 ;;
    esac

    read -p "ENTER..."
}

while true; do menu; done

sshot-1.jpg
 
Was ist mit Amibian?
 
  • Gefällt mir
Reaktionen: madmax2010
@mytosh Ich habe dazu keine "verlässliche" Quelle für das Image gefunden. Alles so merkwürdige Images mit Sammlungen an Spielen.

Habe auch DietPi mit Amiberry genommen und gut ist. Allerdings momentan noch nicht dazu gekommen, das Projekt abzuschließen. Muß noch das Kick.rom rüberspielen und testen. Nach ein paar Minuten austesten, bootet mein Pi400 direkt in das Amiberry Menü und ich könnte direkt ein Disketten Image starten.
 
  • Gefällt mir
Reaktionen: mytosh
DietPi wie der name schon sagt = RaspberryPi + vergleichbare!
Amibian = RaspberryPi

Ich suche etwas für x86_64
Habe mir auch schon das Slax angesehen und ein Amiberry module erstellt - gefühlt ist es aber auch schon zu viel
 
  • Gefällt mir
Reaktionen: Restart001
DietPi gibt es auch für x86_64
1771344729887.png
 

Ähnliche Themen

Antworten
40
Aufrufe
11.097
Antworten
11
Aufrufe
3.939
E
Antworten
6
Aufrufe
1.548
E
Zurück
Oben