mirror of
https://github.com/MiyooCFW/buildroot.git
synced 2025-09-27 22:24:19 +03:00
598 lines
23 KiB
Plaintext
598 lines
23 KiB
Plaintext
#!/bin/busybox sh
|
|
MOUNTDIR=/boot
|
|
export TERM=linux
|
|
|
|
# expect to be run from /boot, where the boot partition is mounted (readonly)
|
|
export LOG=$(mktemp)
|
|
#LOG=/dev/null
|
|
|
|
# high brightness
|
|
echo '10' > /sys/devices/platform/backlight/backlight/backlight/brightness
|
|
|
|
#echo -e "\e[?3c"
|
|
echo -e "\e[32m" # green
|
|
|
|
echo "firstboot script running..." | tee -a ${LOG}
|
|
echo
|
|
|
|
BASEDIR="${MOUNTDIR}"
|
|
|
|
# run a custom script if present - could be used to fix u-boot and such
|
|
if test -r "${BASEDIR}/firstboot.custom.sh"; then
|
|
echo "Running a specific firstboot script..." | tee -a ${LOG}
|
|
(cd "${BASEDIR}" && sh firstboot.custom.sh) | tee -a ${LOG}
|
|
echo "Finished running a specific firstboot script." | tee -a ${LOG}
|
|
fi
|
|
|
|
|
|
echo " "
|
|
sleep 1
|
|
|
|
LICENSE="
|
|
The software provided is offered without \
|
|
any warranties or guarantees of any kind, either \
|
|
expressed or implied. The use of this software is \
|
|
entirely at your own risk. We shall not be held \
|
|
responsible for any damages, losses, or adverse \
|
|
consequences arising from the use or misuse of this software.
|
|
\n\n
|
|
\Z5Do you acknowledge and agree to these terms?\Zn
|
|
\n\n
|
|
Select an option & press START"
|
|
|
|
## Create temp file to store variable for menu choice
|
|
TEMP=$(mktemp)
|
|
|
|
## Access /boot directory
|
|
mount -o remount,rw "${MOUNTDIR}" | tee -a ${LOG}
|
|
|
|
# list of available devices in u-boot Environment parameters' read from FORCE_VERSION
|
|
devices_ID="
|
|
bittboy2x_v1
|
|
bittboy2x_v2
|
|
bittboy3.5
|
|
q20
|
|
q90
|
|
v90
|
|
pocketgo
|
|
pocketgo_TE
|
|
xyc_gc9306
|
|
m3_r61520
|
|
m3_rm68090
|
|
m3_hx8347d
|
|
m3_gc9306
|
|
"
|
|
|
|
# list of available devices in u-boot Environment parameters' read from Auto-Detection method
|
|
devices_auto_ID="
|
|
st7789s
|
|
bittboy
|
|
bittboy2
|
|
bittboy3
|
|
xyc
|
|
m3
|
|
"
|
|
|
|
# list of available devices in this flashing procedure read from DETECTED_VERSION in u-boot Environment parameters'
|
|
DETECTED_1="V90/Q90/Q20/PocketGo ST7789S controller"
|
|
DETECTED_2="GC9306/GC9305 controller from gc9306fb"
|
|
DETECTED_3="SUP M3 unknown controller Works with R61520"
|
|
DETECTED_4="bittboy2x_v1 r61520fb controller"
|
|
DETECTED_5="bittboy3.5/bittboy2x_v2 ST7789S controller"
|
|
DETECTED_6="RM68090 controller"
|
|
DETECTED_7="R61520 controller"
|
|
DETECTED_8="R61505W controller"
|
|
DETECTED_9="HX8347-D controller"
|
|
DETECTED_10="UNKNOWN"
|
|
|
|
## Defaulting to "not found the console in string list"
|
|
FOUND_CONSOLE=false
|
|
FOUND_CONSOLE_AUTO=false
|
|
|
|
find_console_func(){
|
|
for i in $devices_ID; do
|
|
if test "$i" = "$CONSOLE_VARIANT"; then
|
|
FOUND_CONSOLE=true
|
|
break
|
|
fi
|
|
done
|
|
}
|
|
|
|
find_console_auto_func(){
|
|
for i in $devices_auto_ID; do
|
|
if test "$i" = "$CONSOLE_VARIANT"; then
|
|
FOUND_CONSOLE_AUTO=true
|
|
break
|
|
fi
|
|
done
|
|
}
|
|
|
|
# try to read what handheld we're on when calling func
|
|
console_var_func(){
|
|
if (test -r "${MOUNTDIR}/console.cfg"); then
|
|
source "${MOUNTDIR}/console.cfg"
|
|
else
|
|
export CONSOLE_VARIANT="unknown"
|
|
fi
|
|
}
|
|
|
|
detect_console_func(){
|
|
console_var_func
|
|
find_console_func
|
|
find_console_auto_func
|
|
}
|
|
|
|
# write logs, sync & unmount MAIN before reboot/poweroff
|
|
safe_shutdown_func(){
|
|
echo "please wait a few seconds for a ${SHUTDOWN}...." | tee -a ${LOG}
|
|
dmesg > ${HOME}/dmesg.txt
|
|
mv ${LOG} ${HOME}/log_firstboot.txt
|
|
sync
|
|
sleep 1
|
|
mount -o remount,ro "${MOUNTDIR}" | tee -a ${LOG}
|
|
umount /dev/mmcblk0p4 | tee -a ${LOG}
|
|
#umount /dev/mmcblk0p1 | tee -a ${LOG} # this fails
|
|
sleep 4
|
|
}
|
|
|
|
safe_reboot_func(){
|
|
SHUTDOWN=reboot
|
|
safe_shutdown_func
|
|
reboot
|
|
}
|
|
|
|
safe_poweroff_func(){
|
|
SHUTDOWN=poweroff
|
|
safe_shutdown_func
|
|
poweroff
|
|
}
|
|
|
|
console_unknown_func(){
|
|
echo "CONSOLE_VARIANT=unknown" > ${MOUNTDIR}/console.cfg
|
|
echo "##DO_NOT_REMOVE_THIS_LINE##" >> ${MOUNTDIR}/console.cfg
|
|
}
|
|
|
|
## Default CONSOLE_VARIANT for st7789s screens
|
|
default_console_func(){
|
|
echo "CONSOLE_VARIANT=pocketgo" > ${MOUNTDIR}/console.cfg
|
|
cp ${MOUNTDIR}/suniv-f1c100s-miyoo-4bit.dtb ${MOUNTDIR}/suniv-f1c100s-miyoo.dtb
|
|
# No need to overwrite uboot FORCE version for default so continue procedure
|
|
CONSOLE_OVERWRITE=false
|
|
}
|
|
|
|
#Test-prompt dialogs fo various scenarios
|
|
test_image_func(){
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --defaultno --ok-label NO --cancel-label Inverted --stdout --title " Test Image" \
|
|
--colors --pause "\n\n \Z5Are your colors Inverted?\Zn\n\nSelect an option & press START" 12 34 10
|
|
|
|
echo $? > $TEMP
|
|
## Read the user's last choice from the tmp file
|
|
CHOICE=$(cat $TEMP)
|
|
# "NO" choice for Test_Image msgbox DIALOG_OK exit code
|
|
## thus we have valid version and simply continue
|
|
if test $CHOICE -eq 0; then
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 2 --msgbox "Colors are correct, proceed with flashing" 0 0
|
|
# "INVERTED" choice for Test_Iamge msgbox DIALOG_CANCEL exit code and -1/255
|
|
## thus correct "invert" colors parameter on video driver
|
|
else
|
|
#TODO - make "invert" flag overwriting less dependent
|
|
echo "INVERT=${INVERSION}" >> ${HOME}/options.cfg
|
|
safe_reboot_func
|
|
fi
|
|
}
|
|
|
|
test_video_func(){
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --defaultno --ok-label NO --cancel-label "Flipped!" --extra-button --extra-label YES --stdout --title " Test Video" \
|
|
--colors --pause "\n\n \Z5Can you see this message?\Zn\n\nSelect an option & press START" 12 34 10
|
|
|
|
echo $? > $TEMP
|
|
## Read the user's first choice from the tmp file
|
|
CHOICE=$(cat $TEMP)
|
|
|
|
# "YES" choice for Test_Video msgbox DIALOG_EXTRA exit code
|
|
if test $CHOICE -eq 3; then
|
|
# Correct variant for st7789s (non forced)
|
|
echo "CONSOLE_VARIANT=st7789s" > ${MOUNTDIR}/console.cfg
|
|
# "Flipped!" choice for Test_Video msgbox DIALOG_CANCEL exit code
|
|
elif test $CHOICE -eq 1; then
|
|
# Test_Flip-prompt double checks if user selected correct answer for 1'st video test
|
|
test_flip_func
|
|
# "NO" or timeout choice for Test_Video msgbox thus DIALOG_OK exit code
|
|
elif test $CHOICE -eq 0; then
|
|
# Correct variant for bittboy2x_v1 (non forced)
|
|
echo "CONSOLE_VARIANT=bittboy" > ${MOUNTDIR}/console.cfg
|
|
safe_reboot_func
|
|
# Error (DIALOG_ERROR) or ESCAPE button pressed (DIALOG_ESCAPE) thus exit code -1/255
|
|
else
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 2 --msgbox "Invalid choice, please redo the test!" 0 0
|
|
sleep 1.5
|
|
fi
|
|
}
|
|
|
|
test_video2_func(){
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --defaultno --ok-label NO --cancel-label YES --stdout --title " Test Video'2" \
|
|
--colors --pause "\n\n \Z5Can you see this message?\Zn\n\nSelect an option & press START" 12 34 10
|
|
|
|
echo $? > $TEMP
|
|
## Read the user's last choice from the tmp file
|
|
CHOICE=$(cat $TEMP)
|
|
# "YES" choice for Test_Video'2 msgbox DIALOG_CANCEL exit code
|
|
## thus we have valid version, just update to FORCE_VERSION and continue
|
|
if test $CHOICE -eq 1; then
|
|
echo "CONSOLE_VARIANT=bittboy2x_v1" > ${MOUNTDIR}/console.cfg
|
|
# "NO" or timeout choice for Test_Video msgbox thus DIALOG_OK exit code 0 (or ERROR/ESCAPE with -1/255)
|
|
## correct variant to unknown and redo whole flashing_prd again
|
|
else
|
|
console_unknown_func
|
|
safe_reboot_func
|
|
fi
|
|
}
|
|
|
|
test_keyboard_func(){
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --ok-label NO --cancel-label YES --stdout --title " Test Keyboard" \
|
|
--colors --pause "\n\n \Z5Does D-pad works correctly?\Zn\n\nSelect an option & press START" 12 34 10
|
|
|
|
echo $? > $TEMP
|
|
## Read the user's last choice from the tmp file
|
|
CHOICE=$(cat $TEMP)
|
|
|
|
# "YES" choice for Test_Keyboard msgbox DIALOG_CANCEL exit code
|
|
## thus we have valid version, just update to FORCE_VERSION and continue
|
|
if test $CHOICE -eq 1; then
|
|
if test "$CONSOLE_VARIANT" == "bittboy3"; then
|
|
echo "CONSOLE_VARIANT=bittboy3.5" > ${MOUNTDIR}/console.cfg
|
|
elif test "$CONSOLE_VARIANT" == "bittboy2"; then
|
|
echo "CONSOLE_VARIANT=bittboy2x_v2" > ${MOUNTDIR}/console.cfg
|
|
elif test "$CONSOLE_VARIANT" == "xyc"; then
|
|
echo "CONSOLE_VARIANT=xyc_gc9306" > ${MOUNTDIR}/console.cfg
|
|
# Test_Image-prompt if proper "invert" colors parameter was loaded:
|
|
INVERSION=1 #applied only if colors are inverted
|
|
test_image_func
|
|
elif test "$CONSOLE_VARIANT" == "m3"; then
|
|
echo "CONSOLE_VARIANT=m3_gc9306" > ${MOUNTDIR}/console.cfg
|
|
fi
|
|
# "NO" or timeout choice for Test_Keyboard msgbox DIALOG_OK exit code
|
|
## thus correct Auto-Detection variant and reboot
|
|
elif test $CHOICE -eq 0; then
|
|
if test "$CONSOLE_VARIANT" == "bittboy3"; then
|
|
echo "CONSOLE_VARIANT=bittboy2" > ${MOUNTDIR}/console.cfg
|
|
elif test "$CONSOLE_VARIANT" == "bittboy2"; then
|
|
console_unknown_func
|
|
elif test "$CONSOLE_VARIANT" == "xyc"; then
|
|
console_unknown_func
|
|
elif test "$CONSOLE_VARIANT" == "m3"; then
|
|
echo "CONSOLE_VARIANT=xyc" > ${MOUNTDIR}/console.cfg
|
|
fi
|
|
safe_reboot_func
|
|
# Error (DIALOG_ERROR) or ESCAPE button pressed (DIALOG_ESCAPE) thus exit code -1/255
|
|
else
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 2 --msgbox "Invalid choice, please redo the test!" 0 0
|
|
sleep 1.5
|
|
fi
|
|
}
|
|
|
|
test_variant_func(){
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --defaultno --ok-label NO --cancel-label YES --stdout --title " Test Variant" \
|
|
--colors --pause "Does this device match yours?" 0 0 15
|
|
|
|
echo $? > $TEMP
|
|
## Read the user's last choice from the tmp file
|
|
CHOICE=$(cat $TEMP)
|
|
# Any choice different than "YES" from Test_Variant - that is 0/-1/255 exit code
|
|
## correct variant to unknown and redo whole flashing_prd again
|
|
if !(test $CHOICE -eq 1); then
|
|
console_unknown_func
|
|
safe_reboot_func
|
|
fi
|
|
}
|
|
|
|
test_flip_func(){
|
|
if (dialog --backtitle "MiyooCFW 2.0" --no-shadow --stdout --ok-label YES --cancel-label NO --title "Test Flip" --pause " \n Flipped? \n\nAre you sure?!" 12 15 10); then
|
|
# Correct variant for bittboy3.5 (non forced) and display info about flipped image
|
|
echo "CONSOLE_VARIANT=bittboy3" > ${MOUNTDIR}/console.cfg
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 2 --msgbox "Image flipped! correct&reboot" 0 0
|
|
sleep 1.5
|
|
#TODO: use special Unicode characters to draw text upside-down e.g.:
|
|
## dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 2 --msgbox "ƃuᴉʇooqǝɹ⅋uᴉʇɔǝɹɹoɔ 'pǝddᴉןɟ ǝƃɐɯᴉ \n\n image flipped, correcting&rebooting" 0 0
|
|
safe_reboot_func
|
|
else
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 2 --msgbox "Invalid choice, please redo the test!" 0 0
|
|
sleep 1.5
|
|
fi
|
|
}
|
|
|
|
#Checking if device at hand is operational within flashing procedure
|
|
CONSOLE_DETECTED=false
|
|
if (grep -qE "${DETECTED_1}|${DETECTED_2}|${DETECTED_3}|${DETECTED_4}|${DETECTED_5}|${DETECTED_6}|${DETECTED_7}|${DETECTED_8}|${DETECTED_9}|${DETECTED_10}" "${MOUNTDIR}/uEnv.txt"); then
|
|
CONSOLE_DETECTED=true
|
|
fi
|
|
|
|
# I - Test_Block
|
|
detect_console_func
|
|
if ! $FOUND_CONSOLE && ! $FOUND_CONSOLE_AUTO && $CONSOLE_DETECTED; then
|
|
if (grep -q "$DETECTED_1" "${MOUNTDIR}/uEnv.txt"); then
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 3 --msgbox "Auto-Detected $DETECTED_1" 0 0
|
|
# Test_Video-prompt if proper miyoo video's version driver was loaded:
|
|
## Loop Test_Video until correct selection has been performed (CHOICE=0/3)
|
|
### former CHOICE=1 meant safe_reboot if correct and shouldn't reach to this point
|
|
while true; do
|
|
test_video_func
|
|
if !(test $CHOICE -eq -1 || test $CHOICE -eq 1 || test $CHOICE -eq 255); then
|
|
break
|
|
fi
|
|
done
|
|
elif (grep -q "$DETECTED_2" "${MOUNTDIR}/uEnv.txt"); then
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 3 --msgbox "Auto-Detected $DETECTED_2" 0 0
|
|
echo "CONSOLE_VARIANT=m3" > ${MOUNTDIR}/console.cfg
|
|
elif (grep -q "$DETECTED_3" "${MOUNTDIR}/uEnv.txt"); then
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 3 --msgbox "Auto-Detected $DETECTED_3" 0 0
|
|
echo "CONSOLE_VARIANT=m3_r61520" > ${MOUNTDIR}/console.cfg
|
|
# Test_Image-prompt if proper "invert" colors parameter was loaded:
|
|
INVERSION=0 #applied only if colors are inverted
|
|
test_image_func
|
|
# look in II Test block for following DETECTED versions as these imply devices_auto_ID variants:
|
|
## DETECTED_4 - bittboy
|
|
## DETECTED_5 - bittboy3/2
|
|
elif (grep -q "$DETECTED_6" "${MOUNTDIR}/uEnv.txt"); then
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 3 --msgbox "Auto-Detected $DETECTED_6" 0 0
|
|
echo "CONSOLE_VARIANT=m3_rm68090" > ${MOUNTDIR}/console.cfg
|
|
elif (grep -q "$DETECTED_7" "${MOUNTDIR}/uEnv.txt"); then
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 3 --msgbox "Auto-Detected $DETECTED_7" 0 0
|
|
#echo "CONSOLE_VARIANT=r61520" > ${MOUNTDIR}/console.cfg
|
|
elif (grep -q "$DETECTED_8" "${MOUNTDIR}/uEnv.txt"); then
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 3 --msgbox "Auto-Detected $DETECTED_8" 0 0
|
|
#echo "CONSOLE_VARIANT=r61505w" > ${MOUNTDIR}/console.cfg
|
|
elif (grep -q "$DETECTED_9" "${MOUNTDIR}/uEnv.txt"); then
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 3 --msgbox "Auto-Detected $DETECTED_9" 0 0
|
|
echo "CONSOLE_VARIANT=m3_hx8347d" > ${MOUNTDIR}/console.cfg
|
|
elif (grep -q "$DETECTED_10" "${MOUNTDIR}/uEnv.txt"); then
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 3 --msgbox "Auto-Detected $DETECTED_10" 0 0
|
|
#echo "CONSOLE_VARIANT=unknown-error" > ${MOUNTDIR}/console.cfg
|
|
fi
|
|
# Overwrite CONSOLE_VARIANT from new entry
|
|
source "${MOUNTDIR}/console.cfg"
|
|
fi
|
|
|
|
# II - Test_Block
|
|
## Defaulting to console overwriting inactive
|
|
CONSOLE_OVERWRITE=false
|
|
## Test if console have been found in devices_auto_ID
|
|
detect_console_func
|
|
## test if no device specified in console.cfg
|
|
if ! $FOUND_CONSOLE && $FOUND_CONSOLE_AUTO && $CONSOLE_DETECTED; then
|
|
# show selection menu for ST7789S devices
|
|
if (test "$CONSOLE_VARIANT" == "st7789s" && grep -q "$DETECTED_1" "${MOUNTDIR}/uEnv.txt"); then
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --clear --timeout 60 --title "Select your device:" --menu " " 15 40 5 \
|
|
1 "Powkiddy Q20" \
|
|
2 "Powkiddy Q90" \
|
|
3 "Powkiddy V90" \
|
|
4 "PocketGO (default)" \
|
|
5 "PocketGO with TE pin" \
|
|
2> $TEMP
|
|
## Defaulting to console overwriting active
|
|
CONSOLE_OVERWRITE=true
|
|
## Read the user's choice from the file
|
|
CHOICE=$(cat $TEMP)
|
|
## Perform actions based on the user's choice
|
|
case $CHOICE in
|
|
1)
|
|
echo "CONSOLE_VARIANT=q20" > ${MOUNTDIR}/console.cfg
|
|
cp ${MOUNTDIR}/suniv-f1c100s-miyoo-4bit.dtb ${MOUNTDIR}/suniv-f1c100s-miyoo.dtb
|
|
;;
|
|
2)
|
|
echo "CONSOLE_VARIANT=q90" > ${MOUNTDIR}/console.cfg
|
|
cp ${MOUNTDIR}/suniv-f1c100s-miyoo-4bit.dtb ${MOUNTDIR}/suniv-f1c100s-miyoo.dtb
|
|
;;
|
|
3)
|
|
echo "CONSOLE_VARIANT=v90" > ${MOUNTDIR}/console.cfg
|
|
cp ${MOUNTDIR}/suniv-f1c100s-miyoo-4bit.dtb ${MOUNTDIR}/suniv-f1c100s-miyoo.dtb
|
|
;;
|
|
4)
|
|
default_console_func
|
|
;;
|
|
5)
|
|
echo "CONSOLE_VARIANT=pocketgo_TE" > ${MOUNTDIR}/console.cfg
|
|
cp ${MOUNTDIR}/suniv-f1c100s-miyoo-4bit.dtb ${MOUNTDIR}/suniv-f1c100s-miyoo.dtb
|
|
;;
|
|
*)
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 4 --msgbox "Invalid choice. Exiting and selecting default device from autodetection." 0 0
|
|
default_console_func
|
|
sleep 0.1
|
|
;;
|
|
esac
|
|
elif (((test "$CONSOLE_VARIANT" == "bittboy2" || test "$CONSOLE_VARIANT" == "bittboy3") && grep -q "$DETECTED_5" "${MOUNTDIR}/uEnv.txt") || ((test "$CONSOLE_VARIANT" == "xyc" || test "$CONSOLE_VARIANT" == "m3") && grep -q "$DETECTED_2" "${MOUNTDIR}/uEnv.txt")); then
|
|
if (grep -q "$DETECTED_5" "${MOUNTDIR}/uEnv.txt"); then
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 3 --msgbox "Auto-Detected $DETECTED_5" 0 0
|
|
elif (grep -q "$DETECTED_2" "${MOUNTDIR}/uEnv.txt"); then
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 4 --msgbox "Correcting $DETECTED_2 - wait for further instructions" 0 0
|
|
fi
|
|
# Test_Keyboard-prompt if proper miyoo.kbd version was loaded:
|
|
## Loop Test_Keyboard until correct selection has been performed (CHOICE=0/1)
|
|
while true; do
|
|
test_keyboard_func
|
|
if !(test $CHOICE -eq -1 || test $CHOICE -eq 255); then
|
|
break
|
|
fi
|
|
done
|
|
elif (test "$CONSOLE_VARIANT" == "bittboy" && grep -q "$DETECTED_4" "${MOUNTDIR}/uEnv.txt") ; then
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 3 --msgbox "Auto-Detected $DETECTED_4" 0 0
|
|
# Test_Video'2-prompt if proper miyoo video's version driver was loaded:
|
|
test_video2_func
|
|
fi
|
|
fi
|
|
|
|
# III - Test_Block
|
|
detect_console_func
|
|
BITTBOY_CONFIG=false
|
|
MIYOO_CONFIG=false
|
|
if $FOUND_CONSOLE; then
|
|
# Info_Box about selected/edited device in console.cfg
|
|
case $CONSOLE_VARIANT in
|
|
bittboy2x_v1)
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --colors --timeout 2 --ok-label " Your device " --msgbox " BittBoy2x v1" 5 18
|
|
BITTBOY_CONFIG=true
|
|
;;
|
|
bittboy2x_v2)
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --colors --timeout 2 --ok-label " Your device " --msgbox " BittBoy2x v2" 5 18
|
|
BITTBOY_CONFIG=true
|
|
;;
|
|
bittboy3.5)
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --colors --timeout 2 --ok-label " Your device " --msgbox " BittBoy3.5" 5 18
|
|
BITTBOY_CONFIG=true
|
|
;;
|
|
q20)
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --colors --timeout 2 --ok-label " Your device " --msgbox " Powkiddy Q20" 5 18
|
|
MIYOO_CONFIG=true
|
|
;;
|
|
q90)
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --colors --timeout 2 --ok-label " Your device " --msgbox " Powkiddy Q90" 5 18
|
|
MIYOO_CONFIG=true
|
|
;;
|
|
v90)
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --colors --timeout 2 --ok-label " Your device " --msgbox " Powkiddy V90" 5 18
|
|
MIYOO_CONFIG=true
|
|
;;
|
|
pocketgo)
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --colors --timeout 2 --ok-label " Your device " --msgbox " PocketGo" 5 18
|
|
MIYOO_CONFIG=true
|
|
;;
|
|
pocketgo_TE)
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --colors --timeout 2 --ok-label " Your device " --msgbox " PocketGo+TE" 5 18
|
|
MIYOO_CONFIG=true
|
|
;;
|
|
xyc_gc9306)
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --colors --timeout 2 --ok-label " Your device " --msgbox " XYC Q8" 5 18
|
|
MIYOO_CONFIG=true
|
|
;;
|
|
m3_r61520)
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --colors --timeout 2 --ok-label " Your device " --msgbox " SUP M3\n (controller of r61520fb)" 6 29
|
|
MIYOO_CONFIG=true
|
|
;;
|
|
m3_rm68090)
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --colors --timeout 2 --ok-label " Your device " --msgbox " SUP M3\n(RM68090 controller)" 6 24
|
|
MIYOO_CONFIG=true
|
|
;;
|
|
m3_hx8347d)
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --colors --timeout 2 --ok-label " Your device " --msgbox " SUP M3\n(HX8347D controller)" 6 24
|
|
MIYOO_CONFIG=true
|
|
;;
|
|
m3_gc9306)
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --colors --timeout 2 --ok-label " Your device " --msgbox " SUP M3\n(GC9306 controller)" 6 24
|
|
MIYOO_CONFIG=true
|
|
;;
|
|
*)
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --colors --timeout 2 --ok-label " Your device " --msgbox "\Zb\Z1 Unknown-Error\Zn" 5 18
|
|
esac
|
|
# Test_Variant-prompt if correct CONSOLE_VARIANT has been written to console.cfg
|
|
test_variant_func
|
|
else
|
|
dialog --backtitle "MiyooCFW 2.0" --no-shadow --colors --timeout 2 --ok-label " Your device " --msgbox "\Zb\Z1 Unknown\Zn" 5 18
|
|
console_unknown_func
|
|
fi
|
|
|
|
# License_agreement-prompt
|
|
if (dialog --backtitle "MiyooCFW 2.0" --no-shadow --clear --ok-label NO --cancel-label YES --stdout --title " License agreement" \
|
|
--colors --pause "\n \ZbMiyooCFW\Zn\n$LICENSE" 22 60 30 || test $? -eq 255); then
|
|
echo -en " We understand. Have a nice day!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
|
|
sleep 1
|
|
console_unknown_func
|
|
safe_poweroff_func
|
|
fi
|
|
|
|
# Format swap parition
|
|
/sbin/mkswap /dev/mmcblk0p3
|
|
/sbin/swapon /dev/mmcblk0p3
|
|
|
|
mount -o remount,ro "${MOUNTDIR}" | tee -a ${LOG}
|
|
|
|
#grep all partitions current size
|
|
SD_SIZE=$(cat "/sys/block/mmcblk0/size")
|
|
P1_SIZE=$(cat "/sys/block/mmcblk0/mmcblk0p1/size")
|
|
P2_SIZE=$(cat "/sys/block/mmcblk0/mmcblk0p2/size")
|
|
P3_SIZE=$(cat "/sys/block/mmcblk0/mmcblk0p3/size")
|
|
P4_SIZE=$(cat "/sys/block/mmcblk0/mmcblk0p4/size")
|
|
SD_SIZE_IN_MiB=$((SD_SIZE * 512 / 1024 / 1024))
|
|
SD_SIZE_IN_GiB=$((SD_SIZE * 512 / 1024 / 1024 / 1024))
|
|
BOOT_SIZE=$(((1016+1) * 1024 / 512)) #bootloader partition=1016K (see `genimage` script in buildroot)
|
|
## boot_size calculated to 512 byte sector size blocks, adding +1K as a safety measure for roundups (at fatresize we use KibiBits)
|
|
|
|
#Calculate unallocated left space to expand MAIN:
|
|
SD_MAX_UNALL_SIZE="$((${SD_SIZE} - (${P1_SIZE} + ${P2_SIZE} + ${P3_SIZE} + ${P4_SIZE}) - $BOOT_SIZE))"
|
|
SD_MAX_UNALL_SIZE_IN_MiB=$((SD_MAX_UNALL_SIZE * 512 / 1024 / 1024))
|
|
SD_MAX_UNALL_SIZE_IN_GiB=$(echo "scale=1; ${SD_MAX_UNALL_SIZE} * 512 / 1024 / 1024 / 1024" | bc)
|
|
|
|
#Calculate available space for 4'th partition (MAIN):
|
|
SD_MAX_AVAIL_SIZE="$((${SD_SIZE} - (${P1_SIZE} + ${P2_SIZE} + ${P3_SIZE}) - $BOOT_SIZE))"
|
|
SD_MAX_AVAIL_SIZE_IN_KiB=$((SD_MAX_AVAIL_SIZE * 512 / 1024))
|
|
|
|
# Expand_MAIN_Partition-prompt for fatresize the p4 partition if requested
|
|
RESIZE_COMMENCED=false
|
|
if (dialog --backtitle "MiyooCFW 2.0" --no-shadow --clear --stdout --ok-label YES --cancel-label NO --title " AUTO-RESIZE" \
|
|
--colors --pause "\n\n \Z5Expand MAIN partition?\Zn\n\n Select an option & press START
|
|
\n\n \ZbWARNING:\Zn\n After 10s auto-resize\n of BTRFS partition will begin." 15 60 10); then
|
|
clear
|
|
SD_MAX_AVAIL_SIZE_IN_GiB=$(echo "scale=1; ${SD_MAX_AVAIL_SIZE_IN_KiB} / 1024 / 1024" | bc) #only to inform user about end point for resize
|
|
SD_MAX_AVAIL_SIZE_IN_GB=$(echo "scale=1; ${SD_MAX_AVAIL_SIZE_IN_KiB} * 1024 / 1000 / 1000 / 1000" | bc)
|
|
P4_SIZE_IN_GB=$(echo "scale=1; ${P4_SIZE} * 512 / 1000 / 1000 / 1000" | bc)
|
|
# roundup GB value to 0,1GB for integer calculations:
|
|
SD_MAX_AVAIL_SIZE_IN_GBx10=$(echo "$SD_MAX_AVAIL_SIZE_IN_GB" | tr -d ".")
|
|
P4_SIZE_IN_GBx10=$(echo "$P4_SIZE_IN_GB" | tr -d ".")
|
|
#Sanity checks if we don't down- or over-resize partition:
|
|
if (test "$P4_SIZE_IN_GBx10" -ge "$SD_MAX_AVAIL_SIZE_IN_GBx10" || test "$SD_MAX_UNALL_SIZE_IN_MiB" -le 15); then
|
|
echo "Your MAIN partition is greater than available space for resizing or you lack unallocated sectors space" | tee -a ${LOG}
|
|
sleep 1.5
|
|
RESIZE_ABORT=true
|
|
fi
|
|
echo "The full size of your SD is ${SD_SIZE_IN_MiB}MB large" | tee -a ${LOG}
|
|
echo "Unallocated space available for resizing equals ${SD_MAX_UNALL_SIZE_IN_GiB}GB," | tee -a ${LOG}
|
|
echo "and more precisely it's ${SD_MAX_UNALL_SIZE_IN_MiB}MB big" | tee -a ${LOG}
|
|
echo "Resizing the MAIN partition to ${SD_MAX_AVAIL_SIZE_IN_GiB}GB." | tee -a ${LOG}
|
|
echo "This can take a few seconds." | tee -a ${LOG}
|
|
umount /dev/mmcblk0p4 | tee -a ${LOG}
|
|
P4_START_POINT=` parted /dev/mmcblk0 unit MB print | grep '4' | tail -n1 | awk '{print $2}'`
|
|
parted -a optimal /dev/mmcblk0 --script rm 4 | tee -a ${LOG}
|
|
parted -a optimal /dev/mmcblk0 --script mkpart primary $P4_START_POINT 100% | tee -a ${LOG}
|
|
partx -u /dev/mmcblk0 | tee -a ${LOG}
|
|
mount /dev/mmcblk0p4 ${HOME} | tee -a ${LOG}
|
|
btrfs filesystem resize max ${HOME} | tee -a ${LOG}
|
|
partprobe
|
|
RESIZE_COMMENCED=true
|
|
fi
|
|
|
|
# Cleanup - delete the temporary file storing variable value
|
|
rm $TEMP
|
|
|
|
# disable this script
|
|
mount -o remount,rw "${MOUNTDIR}" | tee -a ${LOG}
|
|
echo "Disabling the firstboot script." | tee -a ${LOG}
|
|
mv "${MOUNTDIR}/firstboot" "${MOUNTDIR}/firstboot.done" | tee -a ${LOG}
|
|
|
|
# copy over the config files
|
|
echo "Copying default configuration files into place..." | tee -a ${LOG}
|
|
if $BITTBOY_CONFIG; then
|
|
cp "${HOME}/gmenu2x/input_bittboy.conf" "${HOME}/gmenu2x/input.conf"
|
|
elif $MIYOO_CONFIG; then
|
|
cp "${HOME}/gmenu2x/input_miyoo.conf" "${HOME}/gmenu2x/input.conf"
|
|
fi
|
|
mount -o remount,ro "${MOUNTDIR}" | tee -a ${LOG}
|
|
|
|
sync
|
|
echo "firstboot script finished." | tee -a ${LOG}
|
|
touch ${HOME}/firstboot.completed
|
|
echo
|
|
|
|
#install IPK packages
|
|
if ( $RESIZE_COMMENCED ); then
|
|
echo "starting ipk install manager..." | tee -a ${LOG}
|
|
${BASEDIR}/ipk_install.sh | tee -a ${LOG}
|
|
fi
|
|
|
|
# Reboot device if CONSOLE_VARIANT was overwritten from $CHOICE so that it could be applied in u-boot by readID
|
|
## or found firstboot custom script
|
|
if ($CONSOLE_OVERWRITE || test -r "${BASEDIR}/firstboot.custom.sh"); then
|
|
safe_reboot_func
|
|
else
|
|
#just grep logs from temp directory before continuing
|
|
yes | mv ${LOG} ${HOME}/log_firstboot.txt
|
|
fi
|