#!/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 # check if it's first boot and turn on messages if yes if ((test -r "${BOOTDIR}/firstboot") || (test -r "${HOME}/firstboot.completed")); then DEBUG_MSG="yes" LOGS=$(mktemp) fi export LOGS # so that subshells can use this as well if test "x${DEBUG_MSG}" == "xyes"; then echo -e "\e[0m" # normal foreground color export DEBUG_MSG # set it globally for further programs else echo -e "\e[30m" # black foreground color fi # load kernel modules # load usb gadget mount none /sys/kernel/config -t configfs mkdir /sys/kernel/config/usb_gadget/g2 cd /sys/kernel/config/usb_gadget/g2 mkdir configs/c.1 mkdir functions/ffs.mtp mkdir strings/0x409 mkdir configs/c.1/strings/0x409 echo 0x0100 > idProduct echo 0x1D6B > idVendor echo "Miyoo Handheld" > strings/0x409/manufacturer echo "Miyoo CFW 2.0" > strings/0x409/product echo "Conf 1" > configs/c.1/strings/0x409/configuration echo 120 > configs/c.1/MaxPower ln -s functions/ffs.mtp configs/c.1 mkdir /dev/ffs-mtp mount -t functionfs mtp /dev/ffs-mtp umtprd >> "${LOGS}" 2>&1 & sleep 1 ls /sys/class/udc/ > /sys/kernel/config/usb_gadget/g2/UDC # Load the expected one screen driver from here with modprobe ## automatically from rootfs/lib/modules/VERSION # The uEnv.txt is autogenerated by u-boot from HW which outputs ## environmental variables needed for ID of screen type video=`cat /sys/kernel/miyoo_video/miyoo_video` BACKLIGHT=$(cat ${HOME}/.backlight.conf) # TVout scripting backend if test -r "${HOME}/tvout"; then echo 0 > /sys/class/backlight/backlight/brightness echo 0 > /sys/class/vtconsole/vtcon1/bind if test $BACKLIGHT -ne 0; then cp ${HOME}/.backlight.conf ${HOME}/.backlight.bak fi echo 0 > ${HOME}/.backlight.conf modprobe -r $video #TVMODE options.cfg setting export tvmode=$(grep -o TVMODE=[0-1] "${HOME}/options.cfg" | tr '[:upper:]' '[:lower:]') modprobe miyoo-tvout $tvmode 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\=\1 "${HOME}/options.cfg")); then # Load video module read from uEnv.txt & defined by variant in console.cfg #FLIP & INVERT options.cfg setting export flip=$(grep -o FLIP=[0-1] "${HOME}/options.cfg" | tr '[:upper:]' '[:lower:]') export invert=$(grep -o INVERT=[0-1] "${HOME}/options.cfg" | tr '[:upper:]' '[:lower:]') modprobe $video $flip $invert else (cd "${BOOTDIR}" && sh modules.custom.sh ) >> "${LOGS}" 2>&1 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" elif test -r "${HOME}/firstboot.completed"; then rm "${HOME}/firstboot.completed" fi if !(grep -q FAT_CHECK\=\0 "${HOME}/options.cfg"); then ##Check if FAT16 is flagged as "dirty", and if so unmount, repair, remount if dmesg | grep "mmcblk0p1" > /dev/null; then echo -e "\e[31mDirty sectors detected.\e[0m" echo -e "\e[32mChecking&Repairing FAT16 BOOT partition...\e[0m" umount /dev/mmcblk0p1 fsck.vfat -y /dev/mmcblk0p1 > /dev/null; mount /dev/mmcblk0p1 "${BOOTDIR}" -t vfat -o ro,exec,sync,utf8 echo -e "\e[32mCheck complete.\e[0m" fi fi clear # try to read what handheld we're on if test -r "${BOOTDIR}/console.cfg"; then source "${BOOTDIR}/console.cfg" else export CONSOLE_VARIANT="unknown" fi 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 fi # can't unmount boot because 'daemon' runs from it - but it's mounted read-only # so it's fine ## umount /dev/mmcblk0p1 # Writes dmesg after firstboot procedure or if DEBUG_MSG=yes if test "x${DEBUG_MSG}" == "xyes"; then sleep 1 dmesg > ${HOME}/dmesg.txt yes | mv ${LOGS} ${HOME}/log.txt fi while [ 1 ] do if test -f "${START}"; then source "${START}" else cd "${HOME}"/gmenu2x; ./gmenu2x >> /dev/null 2>&1; fi clear done