#!/bin/busybox sh BOOTLOGO="boot-logo" export HOME=/mnt export SDL_NOMOUSE=1 START="${HOME}/autoexec.sh" BOOTDIR=/boot # we expect /dev/mmcblk0p1 has been mounted here read only, from inittab LOGS=/dev/null #LOGS=/mnt/log.txt # can use /mnt/log.txt here, but note that this prevents clean shutdowns - so only use this for debugging export LOGS # so that subshells can use this as well # try to read what handheld we're on if test -r "${BOOTDIR}/console.cfg"; then source "${BOOTDIR}/console.cfg" fi # sanity checks - we default to PocketGO if test -z "${CONSOLE_VARIANT}"; then CONSOLE_VARIANT="pocketgo" fi export CONSOLE_VARIANT # check if it's first boot and turn on messages if yes if test -r "${BOOTDIR}/firstboot"; then DEBUG_MSG="yes" fi if test "x${DEBUG_MSG}" == "xyes"; then echo -e "\e[0m" # normal foreground colour export DEBUG_MSG # set it globally for further programs else echo -e "\e[30m" # black foreground colour fi # load kernel modules # load usb gadget mount -t configfs none /sys/kernel/config >> "${LOGS}" 2>&1 gadget-ms /dev/mmcblk0p1 /dev/mmcblk0p4 >> "${LOGS}" 2>&1 # just load the expected ones (screen driver) from here # do it directly and not rely on modprobe trying to find them # automatically in rootfs/lib/modules/VERSION # (also because with custom kernels the VERSION will be different. # # the uEnv.txt is autogenerated by u-boot from HW which outputs # environmental variables needed for ID of screen type video=`cat ${BOOTDIR}/uEnv.txt |grep -a "CONSOLE_VIDEO" | cut -d "=" -f 2 | cut -d "." -f 1` params=`cat ${BOOTDIR}/uEnv.txt |grep -a "CONSOLE_PARAMETERS" | cut -d "=" -f 2-` # TVout scripting backend tvout=`cat ${HOME}/tvout` if ((test -r "${HOME}/tvout")); then echo 0 > /sys/class/backlight/backlight/brightness echo 0 > /sys/class/vtconsole/vtcon1/bind cp /mnt/.backlight.conf /mnt/.backlight.bak echo 0 > ${HOME}/.backlight.conf modprobe -r $video if (grep -q TVMODE\=\1 "${HOME}/options.cfg"); then modprobe miyoo-tvout tvmode=1 else modprobe miyoo-tvout fi echo 1 > /sys/class/vtconsole/vtcon1/bind modprobe -r $video else if ((test -r "${HOME}/.backlight.bak")); then mv ${HOME}/.backlight.bak ${HOME}/.backlight.conf fi # MODULES_CUSTOM scripting if ((test -r "${BOOTDIR}/modules.custom.sh") && !(grep -q MODULES_CUSTOM\=\0 "${HOME}/options.cfg")); then (cd "${BOOTDIR}" && sh modules.custom.sh ) >> "${LOGS}" 2>&1 else # Load video module read from uEnv.txt & defined by variant in console.cfg if (grep -q FLIP\=\1 "${HOME}/options.cfg"); then modprobe $video $params flip=1 elif (grep -q FLIP\=\0 "${HOME}/options.cfg"); then modprobe $video $params flip=0 else modprobe $video $params fi fi fi # check if it's first boot and defer to the firstboot script if yes if test -r "${BOOTDIR}/firstboot"; then exec sh "${BOOTDIR}/firstboot" fi if !(grep -q FAT_CHECK\=\0 "${HOME}/options.cfg"); then ##Check if fat32 is flagged as "dirty", and if so unmount, repair, remount if dmesg | grep "mmcblk0p4" > /dev/null; then echo -e "\e[31mUnclean shutdown detected.\e[0m" echo -e "\e[32mChecking FAT32 partition...\e[0m" umount /dev/mmcblk0p4 fsck.vfat -y /dev/mmcblk0p4 > /dev/null; mount /dev/mmcblk0p4 "${HOME}" -t vfat -o rw,sync,utf8 echo -e "\e[32mCheck complete.\e[0m" fi fi clear echo "Boot!" >> "${LOGS}" echo "Handheld type is ${CONSOLE_VARIANT}" >> "${LOGS}" # run any custom commands ('daemon' expected to be run from there) if test -r "${BOOTDIR}/normalboot.custom.sh" ; then (cd "${BOOTDIR}" && sh normalboot.custom.sh) # don't redirect, want output on screen else # at least run 'daemon' daemon >> "${LOGS}" 2>&1 fi # run boot logo animation if (!(grep -q BOOT_LOGO\=\0 "${HOME}/options.cfg")); then ${BOOTLOGO} >> "${LOGS}" 2>&1 #st7789s video driver long initialization fix elif (lsmod | grep -q st7789s); then sleep 1 fi # can't unmount boot because 'daemon' runs from it - but it's mounted read-only # so it's fine ## umount /dev/mmcblk0p1 if test "x${DEBUG_MSG}" == "xyes"; then echo "(Waiting 5 seconds before proceeding...)" sleep 5 dmesg > /mnt/dmesg.txt fi while [ 1 ] do if test -f "${START}"; then source "${START}" else cd "${HOME}"/gmenu2x; ./gmenu2x >> "${LOGS}" 2>&1; fi clear done