Files
buildroot/board/miyoo/rootfs/etc/main
Apaczer bb94014294 FIRSBOOT: add extra p5 for ROMS (use GPT) & add option for switching FS (#168)
* BOARD: firstboot:  use ext4 for p1 explicitly
* BOARD: /etc/main : update fsck scripts
* BOARD: inittab: 
 - add /roms in p5
 - mount RO /boot in async (default)
* BOARD: genimage.sh: gen ROMS EXT4 image
* BAORD: prebuild.sh: 
 - create mount point for ROMS
 - increase MAIN & ROMS block size
 - the size of /mnt is "hardcoded" after image creation
 - we need real space for backup manipulation in ROMS
* BOARD: mv roms upward
* BOARD: firstboot: add p5 ROMS and resize
* BOARD: genimage-sdcard.cfg: 
 - use GPT
 - add p5 for roms

* PACKAGE/BOARD: patch/genimage: down-size gpt table
* PACKAGE/DEFCONFIG: add `gptfdisk` package to shared
* BOARD: firstboot: allow for switching FS type in MAIN and ROMS
* README: update firstboot_procedure.drawio.png
  - add FS change boxes and IPK installer
* BOARD: firstboot: not mandatory to resize for IPK manager
* DEFCONFIG: add default kernel patching
* DEFCONFIG: uppercase rootfs label
* BOARD: umtpr: uppercas partition LABELS
* DEFCONFIG/PACKAGE: add RSYNC pkg
* BOARD: mount FAT p5 in async (default)

* BOARD: add ROMS icons for Win
Co-Authored-By: TriForce <triforce@gznetwork.com>
2025-05-18 16:27:05 +02:00

179 lines
5.7 KiB
Plaintext
Executable File

#!/bin/busybox sh
BOOTLOGO="boot-logo"
export HOME=/mnt
export ROMS=/roms
export BOOTDIR=/boot # we expect /dev/mmcblk0p1 has been mounted here read only, from inittab
export SDL_NOMOUSE=1
START="${HOME}/autoexec.sh"
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 FS_CHECK\=\0 "${HOME}/options.cfg"); then
##Check if BOOT (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,utf8
echo -e "\e[32mCheck complete.\e[0m"
fi
##Check if MAIN (EXT4) is flagged as "dirty", and if so unmount, repair, remount
if dmesg | grep "EXT4-fs (mmcblk0p4): warning: mounting fs with errors, running e2fsck is recommended" > /dev/null; then
echo -e "\e[31mUnclean shutdown detected.\e[0m"
echo -e "\e[32mChecking MAIN(EXT4) partition...\e[0m"
umount /dev/mmcblk0p4
e2fsck -y /dev/mmcblk0p4 > /dev/null;
mount /dev/mmcblk0p4 "${HOME}" -o rw,sync,exec
fi
##Check if ROMS (EXT4 or FAT32) is flagged as "dirty", and if so unmount, repair, remount
if dmesg | grep "EXT4-fs (mmcblk0p5): warning: mounting fs with errors, running e2fsck is recommended" > /dev/null; then
echo -e "\e[31mUnclean shutdown detected.\e[0m"
echo -e "\e[32mChecking ROMS(EXT4) partition...\e[0m"
umount /dev/mmcblk0p5
e2fsck -y /dev/mmcblk0p5 > /dev/null;
mount /dev/mmcblk0p5 "${ROMS}" -o rw,noatime
elif dmesg | grep "FAT-fs (mmcblk0p5): Volume was not properly unmounted. Some data may be corrupt. Please run fsck." > /dev/null; then
echo -e "\e[31mDirty sectors detected.\e[0m"
echo -e "\e[32mChecking&Repairing ROMS(FAT32) partition...\e[0m"
umount /dev/mmcblk0p5
fsck.vfat -y /dev/mmcblk0p5 > /dev/null;
mount /dev/mmcblk0p5 "${ROMS}" -t vfat -o rw,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