mirror of
https://github.com/marcriera/ddgo-pnp-controller.git
synced 2025-04-11 06:29:29 +02:00
133 lines
3.4 KiB
Bash
133 lines
3.4 KiB
Bash
#!/bin/sh
|
|
|
|
# Densha de Go! Plug & Play controller mod installation script
|
|
|
|
USB_ROOT="/mnt"
|
|
|
|
error_exit() {
|
|
# Blink the door light to indicate an error
|
|
echo timer > /sys/class/leds/led2/trigger
|
|
echo 100 > /sys/class/leds/led2/delay_on
|
|
echo 100 > /sys/class/leds/led2/delay_off
|
|
exit 1
|
|
}
|
|
|
|
{
|
|
|
|
# Stop Densha de Go! game app
|
|
/etc/init.d/S99dgtype3 stop
|
|
|
|
# Light the door light to indicate we're running
|
|
echo -n none > /sys/class/leds/led2/trigger
|
|
echo 1 > /sys/class/leds/led2/brightness
|
|
|
|
# Mount partitions
|
|
mkdir /tmp/boot
|
|
if ! mount /dev/mmcblk0p6 /tmp/boot; then
|
|
echo "Failed to mount boot partition"
|
|
error_exit
|
|
fi
|
|
|
|
if ! mount -o remount,rw /; then
|
|
echo "Failed to remount rootfs read-write"
|
|
error_exit
|
|
fi
|
|
|
|
# Create backup folder
|
|
mkdir -p "${USB_ROOT}/BACKUP"
|
|
|
|
# Revert changes flag detected, restore original files
|
|
if [ -f "${USB_ROOT}/revert" ]; then
|
|
if [ ! -f "${USB_ROOT}/BACKUP/uImage" ] || [ ! -f "${USB_ROOT}/BACKUP/mali.ko" ]; then
|
|
echo "Backup not found, cannot revert."
|
|
error_exit
|
|
fi
|
|
cp "${USB_ROOT}/BACKUP/uImage" /tmp/boot/uImage
|
|
cp "${USB_ROOT}/BACKUP/mali.ko" /lib/modules/3.4.113/extra/mali.ko
|
|
rm /etc/init.d/S40usbotg
|
|
rm /usr/bin/rndis-gadget.sh
|
|
rm /usr/bin/ddgo-pnp-controller
|
|
rm "${USB_ROOT}/revert"
|
|
poweroff
|
|
exit
|
|
fi
|
|
|
|
# Backup original kernel
|
|
if [ ! -f "${USB_ROOT}/BACKUP/uImage" ] && [ ! -f "/usr/bin/input_relay" ] && [ ! -f "/usr/bin/ddgo-pnp-controller" ]; then
|
|
if ! cp /tmp/boot/uImage "${USB_ROOT}/BACKUP/"; then
|
|
echo "Failed to backup original kernel"
|
|
rm -f "${USB_ROOT}/BACKUP/uImage"
|
|
error_exit
|
|
fi
|
|
fi
|
|
|
|
# Replace kernel
|
|
if ! cp -f "${USB_ROOT}/payload/uImage" /tmp/boot/uImage; then
|
|
echo "Failed to replace kernel"
|
|
if ! cp -f "${USB_ROOT}/BACKUP/uImage" /tmp/boot/uImage; then
|
|
echo "Failed to restore original kernel"
|
|
fi
|
|
error_exit
|
|
fi
|
|
|
|
# Backup original mali.ko
|
|
if [ ! -f "${USB_ROOT}/BACKUP/mali.ko" ] && [ ! -f "/usr/bin/input_relay" ] && [ ! -f "/usr/bin/ddgo-pnp-controller" ]; then
|
|
if ! cp /lib/modules/3.4.113/extra/mali.ko "${USB_ROOT}/BACKUP/"; then
|
|
echo "Failed to backup original mali.ko"
|
|
rm -f "${USB_ROOT}/BACKUP/mali.ko"
|
|
error_exit
|
|
fi
|
|
fi
|
|
|
|
# Replace mali.ko
|
|
if ! cp -f "${USB_ROOT}/payload/mali.ko" /lib/modules/3.4.113/extra/mali.ko; then
|
|
echo "Failed to replace mali.ko"
|
|
if ! cp -f "${USB_ROOT}/BACKUP/mali.ko" /lib/modules/3.4.113/extra/mali.ko; then
|
|
echo "Failed to restore original mali.ko"
|
|
fi
|
|
error_exit
|
|
fi
|
|
|
|
chmod 644 /lib/modules/3.4.113/extra/mali.ko
|
|
|
|
# Remove old files by GMMan
|
|
if [ -f "/usr/lib/libevdev.so.2" ]; then
|
|
if ! rm -f "/usr/lib/libevdev.so.2"; then
|
|
echo "Failed to remove libevdev.so.2"
|
|
fi
|
|
fi
|
|
if [ -f "/usr/bin/input_relay" ]; then
|
|
if ! rm -f "/usr/bin/input_relay"; then
|
|
echo "Failed to remove input_relay"
|
|
fi
|
|
fi
|
|
|
|
# Install files
|
|
if ! cp -f "${USB_ROOT}/payload/S40usbotg" /etc/init.d; then
|
|
echo "Failed to install init script"
|
|
error_exit
|
|
fi
|
|
|
|
chmod 755 /etc/init.d/S40usbotg
|
|
|
|
if ! cp -f "${USB_ROOT}/payload/ddgo-pnp-controller" /usr/bin; then
|
|
echo "Failed to install ddgo-pnp-controller"
|
|
error_exit
|
|
fi
|
|
|
|
chmod 755 /usr/bin/ddgo-pnp-controller
|
|
|
|
|
|
if ! cp -f "${USB_ROOT}/payload/rndis-gadget.sh" /usr/bin; then
|
|
echo "Failed to install rndis-gadget.sh"
|
|
error_exit
|
|
fi
|
|
|
|
chmod 755 /usr/bin/rndis-gadget.sh
|
|
|
|
echo "Installation complete"
|
|
|
|
# We're done
|
|
poweroff
|
|
|
|
} > "${USB_ROOT}/log.txt" 2>&1
|