Skip to content

Instantly share code, notes, and snippets.

@JohnnyonFlame
Last active January 1, 2023 23:36
Show Gist options
  • Save JohnnyonFlame/bbf3331ae1b1ff0002fb7998501acd21 to your computer and use it in GitHub Desktop.
Save JohnnyonFlame/bbf3331ae1b1ff0002fb7998501acd21 to your computer and use it in GitHub Desktop.
Jealousy for EVERSD
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2020-present Fewtarius
# Maintenance 2022-present BrooksyTech (https://github.com/brooksytech)
# Edits for EverSD 2022-present JohnnyonFlame (https://github.com/johnnyonflame)
. /etc/profile
if [ -e "/storage/roms/ports/PortMaster.sh" ]
then
mv /storage/roms/ports/PortMaster.sh /storage/roms/ports/PortMaster/
fi
cat << 'EOF' > /tmp/portmaster.sh
#!/bin/bash
. /etc/profile
cd /storage/roms/ports/PortMaster
./PortMaster.sh 2>/dev/null
kill -2 ${PPID}
sleep 2
EOF
chmod +x /tmp/portmaster.sh
kmscon -l /tmp/portmaster.sh
<?xml version="1.0"?>
<inputList>
<inputAction type="onfinish">
<command>/usr/bin/bash /usr/bin/retromapper.sh /tmp/joypads</command>
</inputAction>
</inputList>
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2022-present JohnnyonFlame
. /etc/profile
ln -sf /usr/lib/kernel-overlays/base/lib /var/lib
# Ensure we have joydev as some applications _will_ require it.
# modprobe joydev
# Ensure we have initialized the necessary bits of the filesystem
for __conf in jelos-dirs retroarch-userdirs legacy z_01_busybox z_01_openelec z_04_openssh; do
echo Populating tmpfiles: "/usr/lib/tmpfiles.d/${__conf}.conf"
/usr/bin/systemd-tmpfiles --create "/usr/lib/tmpfiles.d/${__conf}.conf"
done
# Populate /storage and it's overlays
if [[ -z "$(mount | grep /tmp/assets/)" ]]; then
mkdir -p /tmp/{cache,assets,cores,database,overlays,shaders,joypads}
mkdir -p /storage/{cache,assets,cores,database,overlays,shaders,joypads}
mkdir -p /storage/.tmp/{assets,cores,database,overlays,shaders,joypads}-workdir
mount -t overlay overlay -o lowerdir=/usr/share/libretro/autoconfig,upperdir=/storage/joypads,workdir=/storage/.tmp/joypads-workdir /tmp/joypads
mount -t overlay overlay -o lowerdir=/usr/share/retroarch-assets,upperdir=/storage/assets,workdir=/storage/.tmp/assets-workdir /tmp/assets
mount -t overlay overlay -o lowerdir=/usr/lib/libretro,upperdir=/storage/cores,workdir=/storage/.tmp/cores-workdir /tmp/cores
mount -t overlay overlay -o lowerdir=/usr/share/libretro-database,upperdir=/storage/database,workdir=/storage/.tmp/database-workdir /tmp/database
mount -t overlay overlay -o lowerdir=/usr/share/retroarch-overlays,upperdir=/storage/overlays,workdir=/storage/.tmp/overlays-workdir /tmp/overlays
mount -t overlay overlay -o lowerdir=/usr/share/common-shaders:/usr/share/glsl-shaders:/usr/share/slang-shaders,upperdir=/storage/shaders,workdir=/storage/.tmp/shaders-workdir /tmp/shaders
fi
/usr/bin/userconfig-setup
/usr/bin/usercache-setup
/usr/bin/openssl-config
/usr/lib/autostart/common/001-setup
while true; do
/usr/bin/emulationstation
sleep 1
# Check if any application is running before respawning emulationstation
PID=$(pidof runemu.sh)
while [ ! -z "$PID" ] && [ -e "/proc/$PID/status" ]; do
sleep 1
done
done
#!/bin/bash -e
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2022-present JohnnyonFlame
INSTALL="/mnt/sdcard/jealous"
LOGS="${INSTALL}/logs.txt"
STORAGE="${INSTALL}/STORAGE"
SYSTEM="${INSTALL}/SYSTEM"
ROMS="${INSTALL}/roms"
ENABLEMENT="${INSTALL}/ENABLEMENT"
MOUNT_SDCARD=$(mount | grep -r '^/dev/.* on /mnt/sdcard' | cut -d ' ' -f1)
# If logs are present, rotate them.
[ -f ${LOGS} ] && mv -f ${LOGS} ${LOGS}.old
# Let's get rid of the launcher and all...
killall -9 killItWithFire launch.sh
killall -9 evercade_menu_cobalt
# Oh no! /mnt/sdcard has no way to set +x...
# ...but we can just make it extremely permissive :)
# This workaround (umask=000) allows binaries to have executable permissions
# regardless of the filesystem on the sdcard.
echo "Remounting ${MOUNT_SDCARD}" > /tmp/mntlog.txt
umount "${MOUNT_SDCARD}" > >(tee -a /tmp/mntlog.txt) 2>&1
mount -o rw,umask=000,noatime,nodiratime "${MOUNT_SDCARD}" /mnt/sdcard > >(tee -a /tmp/mntlog.txt) 2>&1
cat /tmp/mntlog.txt >> ${LOGS}
# Create the ROMs partition, this will be populated by the first time boot
# sequence (init-jealous)
mkdir -p ${ROMS}
# Lets get some diagnostic data on the logs...
mount > >(tee -a ${LOGS}) 2>&1
# Create storage filesystem if not already present
if [[ ! -f ${STORAGE} ]]; then
echo "No storage, creating filesystem..." > >(tee -a ${LOGS}) 2>&1
truncate --size 512M ${STORAGE} > >(tee -a ${LOGS}) 2>&1
mkfs.ext4 -F ${STORAGE} > >(tee -a ${LOGS}) 2>&1
fi
# Setup main rootfs overlay mount
mkdir /tmp/{rootfs,enablement,overlay}
mount ${SYSTEM} /tmp/rootfs/
mount ${ENABLEMENT} /tmp/enablement/
mount -t overlay overlay -o lowerdir=/tmp/enablement/:/tmp/rootfs/ /tmp/overlay > >(tee -a ${LOGS}) 2>&1
# Setup the tmpfs and storage partitions
mount -t tmpfs tmpfs /tmp/overlay/var
mount -t tmpfs tmpfs /tmp/overlay/tmp
mount ${STORAGE} /tmp/overlay/storage/ > >(tee -a ${LOGS}) 2>&1
mkdir -p /tmp/overlay/var/log
# Setup ROMs directories
mkdir -p /tmp/overlay/storage/roms ${ROMS}
mount --bind ${ROMS} /tmp/overlay/storage/roms > >(tee -a ${LOGS}) 2>&1
# Setup other necessary system partitions
mount -t proc /proc /tmp/overlay/proc/
mount --rbind /sys /tmp/overlay/sys/
mount --rbind /dev /tmp/overlay/dev/
mount --rbind /run /tmp/overlay/run/
mount --make-rslave /tmp/overlay/sys/
mount --make-rslave /tmp/overlay/dev/
mount --make-rslave /tmp/overlay/run/
# Jump into it!
chroot /tmp/overlay init-jealous > >(tee -a ${LOGS}) 2>&1
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2022-present JohnnyonFlame
cd /tmp
# Setup the basic overlay structure
mkdir {rootfs,enablement,overlay}
mount /mnt/sdcard/SYSTEM rootfs/
mount /mnt/sdcard/jealous-enablement.squashfs enablement/
mount -t overlay overlay -o lowerdir=enablement/:rootfs/ overlay
# Setup the tmpfs and storage partitions
mount -t tmpfs tmpfs overlay/var
mount -t tmpfs tmpfs overlay/tmp
mount /mnt/sdcard/storage.ext4 overlay/storage/
mkdir overlay/var/log
# Setup roms dir
mkdir -p overlay/storage/roms /mnt/sdcard/roms/
mount --bind /mnt/sdcard/roms/ overlay/storage/roms
# Setup other system partitions
mount -t proc /proc overlay/proc/
mount --rbind /sys overlay/sys/
mount --rbind /dev overlay/dev/
mount --rbind /run overlay/run/
mount --make-rslave overlay/sys/
mount --make-rslave overlay/dev/
mount --make-rslave overlay/run/
# jump in
chroot overlay /bin/bash -l
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2022-present JohnnyonFlame
# -- Config & Setup --
# Destination file
if [[ -z "$1" ]]; then
echo "Usage: mapper.txt [gamecontrollerdb.txt]"
exit -1
fi
TMP_CONFIG="$1"
mkdir -p "$1/udev"
# Where the emulationstation configuration file is
ES_CONFIG="${HOME}/.config/emulationstation/es_input.cfg"
# -- Helpers --
NL=$'\n'
# Refine device search
function refine_search {
[ ${#DEV_MATCHES[@]} -ne 0 ] && readarray -d '' -t DEV_MATCHES < <(grep --null -HlE "${1}\s*=\s*\"${2}\"" "${DEV_MATCHES[@]}")
}
# Map the actual button/hat/axis
function map {
map_x_result=""
case "${INPUT_NAME}" in
"b") TR_NAME="input_b";;
"a") TR_NAME="input_a";;
"y") TR_NAME="input_y";;
"x") TR_NAME="input_x";;
"hotkeyenable") TR_NAME="input_menu_toggle";;
"up") TR_NAME="input_up";;
"down") TR_NAME="input_down";;
"left") TR_NAME="input_left";;
"right") TR_NAME="input_right";;
"leftshoulder") TR_NAME="input_l";;
"leftthumb") TR_NAME="input_l3";;
"lefttrigger") TR_NAME="input_l2";;
"rightshoulder") TR_NAME="input_r";;
"rightthumb") TR_NAME="input_r3";;
"righttrigger") TR_NAME="input_r2";;
"select") TR_NAME="input_select";;
"start") TR_NAME="input_start";;
"leftanalogdown") TR_NAME="input_l_y_plus";;
"leftanalogup") TR_NAME="input_l_y_minus";;
"leftanalogleft") TR_NAME="input_l_x_minus";;
"leftanalogright") TR_NAME="input_l_x_plus";;
"rightanalogdown") TR_NAME="input_r_y_plus";;
"rightanalogup") TR_NAME="input_r_y_minus";;
"rightanalogleft") TR_NAME="input_r_x_minus";;
"rightanalogright") TR_NAME="input_r_x_plus";;
*)
echo "Invalid mapping ${INPUT_NAME}."
return
;;
esac
case "${TYPE}" in
"axis")
if (( $VALUE < 0 )); then
map_x_result="${TR_NAME}_axis = -${ID}$NL"
else
map_x_result="${TR_NAME}_axis = +${ID}$NL"
fi
;;
"button")
map_x_result="${TR_NAME}_btn = ${ID}$NL"
;;
"hat")
case $VALUE in
"1") VALUE_TR='up';;
"2") VALUE_TR='right';;
"4") VALUE_TR='down';;
"8") VALUE_TR='left';;
*) VALUE_TR='';;
esac
if [[ ! -z $VALUE_TR ]]; then
map_x_result="${TR_NAME}_btn = h${ID}${VALUE_TR}$NL"
fi
;;
*)
echo "Invalid entry ${TYPE}"
;;
esac
}
function get_map_suffix {
map_suffix=""
}
function get_map_prefix {
map_prefix=$(cat <<EOF
# $VID:$PID (GUID: $GUID)
input_device = "${DEV_NAME}"
input_driver = "udev"
input_vendor_id = $(( 16#$VID ))
input_product_id = $(( 16#$PID ))
EOF
)$NL$NL
}
# Query input devices
function get_devices {
# Get the device data
DEV_RAW=$(< /proc/bus/input/devices)"$NL"
ACC=""
devices=()
device_count=0
while read line; do
if [[ ! -z "$line" ]]; then
ACC="$ACC$line$NL"
else
[[ -z $ACC ]] && continue
devices[device_count]="$ACC"
let device_count++
ACC=""
fi
done <<< "${DEV_RAW}"
}
# query udev and controllers mapped in emulationstation, ignore devices without a GUID
get_devices
ES_QUERY="$(xmlstarlet sel -T -t -m "inputList/inputConfig[@deviceGUID!='']" -n -v "concat(@deviceName,';',@deviceGUID)" $ES_CONFIG)"
echo "## ES Dev Mapper ##"
while IFS=";" read -r NAME GUID; do
echo "$NAME :: $GUID"
# Ignore keyboards
if [[ "${GUID}" == -1 ]]; then
continue
fi
# Check if GUID exists in gamecontrollerdb.txt
# if [ -z "$(fgrep -- ${GUID} "${CONTROLLER_DB}")" ]; then
if [ true ]; then
# Query this specific GUID on the mappings
MAPPING_CFG=$(xmlstarlet sel -T -t -m "//inputConfig[@deviceGUID = '${GUID}']/input" -n -v "concat(@name,';',@type,';',@id,';',@value)" $ES_CONFIG)
VID=${GUID:10:2}${GUID:8:2}
PID=${GUID:18:2}${GUID:16:2}
VER=${GUID:26:2}${GUID:24:2}
for (( i = 0; i < $device_count; i++ )); do
DEV="${devices[$i]}"
if [[ -z $(fgrep -- "Vendor=${VID} Product=${PID} Version=${VER}" - <<< "${DEV}") ]]; then
DEV=""
else
break
fi
done
if [[ -z $DEV ]]; then
echo "Ignoring $NAME"
continue
fi
DEV_NAME=$(sed -E -n 's|N: Name="(.*)"|\1|p' - <<< "$DEV")
MAPPING=""
while IFS=";" read -r -e INPUT_NAME TYPE ID VALUE; do
# Map the controller
map "${INPUT_NAME}" "${TYPE}" "${ID}" "${VALUE}"
# Only concatenate valid mappings
if [[ ! -z ${map_x_result} ]]; then
MAPPING="${MAPPING}${map_x_result}"
fi
done <<< ${MAPPING_CFG:1}
get_map_prefix
get_map_suffix
if [[ ! -z "${MAPPING}" ]]; then
# Properly mapped, see if we need to rid ourselves of some configs...
DEV_MATCHES=("${TMP_CONFIG}"/*.cfg)
refine_search "input_device" "${DEV_NAME}"
refine_search "input_vendor_id" "$(( 16#$VID ))"
refine_search "input_product_id" "$(( 16#$PID ))"
for DELETUS in "${DEV_MATCHES[@]}"; do
rm -f "${DELETUS}"
done
echo "${map_prefix}${MAPPING}${map_suffix}" > "${TMP_CONFIG}/udev/${GUID}.cfg"
echo "${map_prefix}${MAPPING}${map_suffix}"
echo ""
else
echo "Failed to map anything."
echo ""
fi
else
echo "Already mapped..."
fi
done <<< ${ES_QUERY:1}
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2022-present JohnnyonFlame
# Where your stuff is
ROOTFS=${HOME}/SYSTEM
# Setup the basic overlay structure
cd /tmp
sudo mkdir {rootfs,upper,work,overlay}
sudo mount ${ROOTFS} rootfs/
sudo mount -t overlay overlay -o lowerdir=rootfs/,upperdir=upper/,workdir=work/ overlay
# Setup the tmpfs and storage partitions
sudo mount -t tmpfs tmpfs overlay/var
sudo mount -t tmpfs tmpfs overlay/tmp
sudo mkdir overlay/var/log
# Setup other system partitions
sudo mount -t proc /proc overlay/proc/
sudo mount --rbind /sys overlay/sys/
sudo mount --rbind /dev overlay/dev/
sudo mount --rbind /run overlay/run/
sudo mount --make-rslave overlay/sys/
sudo mount --make-rslave overlay/dev/
sudo mount --make-rslave overlay/run/
# Download setup files
sudo mkdir -p /run/libreelec
echo "nameserver 8.8.8.8" | sudo tee -a /run/libreelec/resolv.conf
sudo wget https://gist.github.com/JohnnyonFlame/bbf3331ae1b1ff0002fb7998501acd21/raw/setup-dirs -O /tmp/overlay/usr/bin/setup-dirs
sudo chmod +x /tmp/overlay/usr/bin/setup-dirs
# jump in
sudo chroot overlay /bin/bash -l
# Tear down partitions
sudo umount overlay/proc/
sudo umount -l overlay/sys/
sudo umount -l overlay/dev/
sudo umount -l overlay/run/
sudo umount overlay/
sudo umount rootfs/
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2022-present JohnnyonFlame
. /etc/profile
# Customize the runemu.sh script...
if [[ -z "$(grep 'precious ram' /usr/bin/runemu.sh)" ]]; then
sed -Ei "s/(### Define the variables used throughout the script)/# Save some precious ram...\nkillall -9 emulationstation\n\n\1/" /usr/bin/runemu.sh
fi
# Fix the port launching...
cp /usr/config/emulationstation/es_systems.cfg /tmp/es_systems.cfg
xmlstarlet edit \
--update '//system[./name[contains(text(),"ports")]]/command' \
--value $'/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers="%CONTROLLERSCONFIG%"' \
/tmp/es_systems.cfg > /usr/config/emulationstation/es_systems.cfg
# Customize the PortMaster launcher script
# System later copies it into /storage/.config/modules/PortMaster.sh
rm /usr/config/modules/PortMaster.sh
wget https://gist.github.com/JohnnyonFlame/bbf3331ae1b1ff0002fb7998501acd21/raw/dconfig-modules-PortMaster.sh -O /usr/config/modules/PortMaster.sh
chmod +x /usr/config/modules/PortMaster.sh
# Add automapper to emulationstation
rm /usr/config/emulationstation/es_input.cfg
wget https://gist.github.com/JohnnyonFlame/bbf3331ae1b1ff0002fb7998501acd21/raw/es_input.cfg -O /usr/config/emulationstation/es_input.cfg
wget https://gist.github.com/JohnnyonFlame/bbf3331ae1b1ff0002fb7998501acd21/raw/retromapper.sh -O /usr/bin/retromapper.sh
chmod +x /usr/bin/retromapper.sh
# Install KMSCON
wget https://github.com/JohnnyonFlame/kmscon/releases/latest/download/kmscon-aarch64.tar.gz -O /tmp/kmscon.tar.gz
tar zxvf /tmp/kmscon.tar.gz
rm /tmp/kmscon.tar.gz
# Download the init script
wget https://gist.github.com/JohnnyonFlame/bbf3331ae1b1ff0002fb7998501acd21/raw/init-jealous -O /usr/bin/init-jealous
chmod +x /usr/bin/init-jealous
# Deploy updated SDL2
rm /usr/lib/libSDL2-2.0.so*
rm /usr/lib32/libSDL2-2.0.so*
wget https://github.com/JohnnyonFlame/fixvid-evercade/releases/download/0.1/aarch64-libSDL2-2.0.so.0.2700.0 -O /usr/lib/libSDL2-2.0.so.0.2700.0
wget https://github.com/JohnnyonFlame/fixvid-evercade/releases/download/0.1/armhf-libSDL2-2.0.so.0.2700.0 -O /usr/lib32/libSDL2-2.0.so.0.2700.0
ln -s /usr/lib/libSDL2-2.0.so.0.2700.0 /usr/lib/libSDL2-2.0.so
ln -s /usr/lib/libSDL2-2.0.so.0.2700.0 /usr/lib/libSDL2-2.0.so.0
ln -s /usr/lib32/libSDL2-2.0.so.0.2700.0 /usr/lib32/libSDL2-2.0.so
ln -s /usr/lib32/libSDL2-2.0.so.0.2700.0 /usr/lib32/libSDL2-2.0.so.0
# Change some retroarch.cfg configurations...
sed -i "s/video_threaded = \"\(.*\)\"/video_threaded = \"false\"/" /usr/config/retroarch/retroarch.cfg
# Change the default soundcard to the hdmi one
sed -E -i "s/pcm \"hw:[0-9]+,[0-9]+\"/pcm \"hw:1,0\"/" /usr/config/asound.conf
# Setup AARCH64 GPU Mali-450 Drivers
rm -f /usr/lib/libGL* /usr/lib/libEGL* /usr/lib/libmali* /usr/lib/libgbm* /usr/lib/libMali* /usr/lib/libOpenCL.so
wget https://github.com/JohnnyonFlame/libmali-jelos/raw/main/lib/aarch64-linux-gnu/libmali-utgard-450-r7p0-gbm.so -O /usr/lib/libmali-utgard-450-r7p0-gbm.so
ln -s /usr/lib/libmali-utgard-450-r7p0-gbm.so /usr/lib/libEGL.so
ln -s /usr/lib/libmali-utgard-450-r7p0-gbm.so /usr/lib/libEGL.so.1
ln -s /usr/lib/libmali-utgard-450-r7p0-gbm.so /usr/lib/libEGL.so.1.0.0
ln -s /usr/lib/libmali-utgard-450-r7p0-gbm.so /usr/lib/libGLESv1_CM.so
ln -s /usr/lib/libmali-utgard-450-r7p0-gbm.so /usr/lib/libGLESv1_CM.so.1
ln -s /usr/lib/libmali-utgard-450-r7p0-gbm.so /usr/lib/libGLESv1_CM.so.1.0.0
ln -s /usr/lib/libmali-utgard-450-r7p0-gbm.so /usr/lib/libGLESv2.so
ln -s /usr/lib/libmali-utgard-450-r7p0-gbm.so /usr/lib/libGLESv2.so.2
ln -s /usr/lib/libmali-utgard-450-r7p0-gbm.so /usr/lib/libGLESv2.so.2.0.0
ln -s /usr/lib/libmali-utgard-450-r7p0-gbm.so /usr/lib/libOpenCL.so
ln -s /usr/lib/libmali-utgard-450-r7p0-gbm.so /usr/lib/libgbm.so
ln -s /usr/lib/libmali-utgard-450-r7p0-gbm.so /usr/lib/libgbm.so.1
ln -s /usr/lib/libmali-utgard-450-r7p0-gbm.so /usr/lib/libgbm.so.1.9.0
ln -s /usr/lib/libmali-utgard-450-r7p0-gbm.so /usr/lib/libmali.so
ln -s /usr/lib/libmali-utgard-450-r7p0-gbm.so /usr/lib/libmali.so.1
ln -s /usr/lib/libmali-utgard-450-r7p0-gbm.so /usr/lib/libMali.so
# Setup ARMHF GPU Mali-450 Drivers
rm -f /usr/lib32/libGL* /usr/lib32/libEGL* /usr/lib32/libmali* /usr/lib32/libgbm* /usr/lib32/libMali* /usr/lib32/libOpenCL.so
wget https://github.com/JohnnyonFlame/libmali-jelos/raw/main/lib/arm-linux-gnueabihf/libmali-utgard-450-r7p0-gbm.so -O /usr/lib32/libmali-utgard-450-r7p0-gbm.so
ln -s /usr/lib32/libmali-utgard-450-r7p0-gbm.so /usr/lib32/libEGL.so
ln -s /usr/lib32/libmali-utgard-450-r7p0-gbm.so /usr/lib32/libEGL.so.1
ln -s /usr/lib32/libmali-utgard-450-r7p0-gbm.so /usr/lib32/libEGL.so.1.0.0
ln -s /usr/lib32/libmali-utgard-450-r7p0-gbm.so /usr/lib32/libGLESv1_CM.so
ln -s /usr/lib32/libmali-utgard-450-r7p0-gbm.so /usr/lib32/libGLESv1_CM.so.1
ln -s /usr/lib32/libmali-utgard-450-r7p0-gbm.so /usr/lib32/libGLESv1_CM.so.1.0.0
ln -s /usr/lib32/libmali-utgard-450-r7p0-gbm.so /usr/lib32/libGLESv2.so
ln -s /usr/lib32/libmali-utgard-450-r7p0-gbm.so /usr/lib32/libGLESv2.so.2
ln -s /usr/lib32/libmali-utgard-450-r7p0-gbm.so /usr/lib32/libGLESv2.so.2.0.0
ln -s /usr/lib32/libmali-utgard-450-r7p0-gbm.so /usr/lib32/libOpenCL.so
ln -s /usr/lib32/libmali-utgard-450-r7p0-gbm.so /usr/lib32/libgbm.so
ln -s /usr/lib32/libmali-utgard-450-r7p0-gbm.so /usr/lib32/libgbm.so.1
ln -s /usr/lib32/libmali-utgard-450-r7p0-gbm.so /usr/lib32/libgbm.so.1.9.0
ln -s /usr/lib32/libmali-utgard-450-r7p0-gbm.so /usr/lib32/libmali.so
ln -s /usr/lib32/libmali-utgard-450-r7p0-gbm.so /usr/lib32/libmali.so.1
ln -s /usr/lib32/libmali-utgard-450-r7p0-gbm.so /usr/lib32/libMali.so
# Update cache
ldconfig -X
# ensure bootloader update isn't present for convenience
rm -rf /usr/share/bootloader
# Done with first time setup. Package me!
@JohnnyonFlame
Copy link
Author

JohnnyonFlame commented Dec 31, 2022

Sources for binaries used here:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment