mirror of
https://github.com/MiyooCFW/buildroot.git
synced 2025-09-27 22:24:19 +03:00
[FIRSTBOOT/MAIN] refactor fatresize -s max
/ LOGs
*) FIRSTBOOT: - calculate manually "size=max" of MAIN partition (workaround for know bug in libparted ``max_size`` class) - add debug: write LOG to /mnt/log_firstboot.txt - ditch "/boot/resize" file method *)MAIN - add debug: write LOGS to /mnt/log.txt - cleanup & use tabs for indendent - use ${HOME} variable often *) GENIMAGE - rm "resize" file (no use)
This commit is contained in:
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
MOUNTDIR=/boot
|
MOUNTDIR=/boot
|
||||||
# expect to be run from /boot, where the boot partition is mounted (readonly)
|
# expect to be run from /boot, where the boot partition is mounted (readonly)
|
||||||
|
export LOG=$(mktemp)
|
||||||
LOG=/dev/null
|
#LOG=/dev/null
|
||||||
|
|
||||||
# high brightness
|
# high brightness
|
||||||
echo '10' > /sys/devices/platform/backlight/backlight/backlight/brightness
|
echo '10' > /sys/devices/platform/backlight/backlight/backlight/brightness
|
||||||
@@ -56,7 +56,7 @@ console_var_func(){
|
|||||||
# write logs, sync & unmount MAIN then reboot/poweroff
|
# write logs, sync & unmount MAIN then reboot/poweroff
|
||||||
safe_reboot_func(){
|
safe_reboot_func(){
|
||||||
echo "please wait a few seconds for a reboot...." | tee -a ${LOG}
|
echo "please wait a few seconds for a reboot...." | tee -a ${LOG}
|
||||||
dmesg > /mnt/dmesg.txt
|
dmesg > ${HOME}/dmesg.txt
|
||||||
sync
|
sync
|
||||||
sleep 1
|
sleep 1
|
||||||
mount -o remount,ro "${MOUNTDIR}" | tee -a ${LOG}
|
mount -o remount,ro "${MOUNTDIR}" | tee -a ${LOG}
|
||||||
@@ -68,7 +68,7 @@ safe_reboot_func(){
|
|||||||
|
|
||||||
safe_poweroff_func(){
|
safe_poweroff_func(){
|
||||||
echo "please wait a few seconds for a shutdown...." | tee -a ${LOG}
|
echo "please wait a few seconds for a shutdown...." | tee -a ${LOG}
|
||||||
dmesg > /mnt/dmesg.txt
|
dmesg > ${HOME}/dmesg.txt
|
||||||
sync
|
sync
|
||||||
sleep 1
|
sleep 1
|
||||||
mount -o remount,ro "${MOUNTDIR}" | tee -a ${LOG}
|
mount -o remount,ro "${MOUNTDIR}" | tee -a ${LOG}
|
||||||
@@ -222,7 +222,7 @@ if ! $FOUND_CONSOLE && ! $FOUND_CONSOLE_AUTO && $CONSOLE_DETECTED; then
|
|||||||
## thus correct "invert" colors parameter on video driver
|
## thus correct "invert" colors parameter on video driver
|
||||||
else
|
else
|
||||||
#TODO - make "invert" flag overwriting less dependent
|
#TODO - make "invert" flag overwriting less dependent
|
||||||
echo "INVERT=0" >> /mnt/options.cfg
|
echo "INVERT=0" >> ${HOME}/options.cfg
|
||||||
safe_reboot_func
|
safe_reboot_func
|
||||||
fi
|
fi
|
||||||
# look in II Test block for following DETECTED versions as these imply devices_auto_ID variants:
|
# look in II Test block for following DETECTED versions as these imply devices_auto_ID variants:
|
||||||
@@ -470,20 +470,40 @@ fi
|
|||||||
mount -o remount,ro "${MOUNTDIR}" | tee -a ${LOG}
|
mount -o remount,ro "${MOUNTDIR}" | tee -a ${LOG}
|
||||||
|
|
||||||
RESIZE_COMMENCED=false
|
RESIZE_COMMENCED=false
|
||||||
|
#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))
|
||||||
|
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_MB=$((SD_MAX_UNALL_SIZE * 512 / 1024 / 1000))
|
||||||
|
SD_MAX_UNALL_SIZE_IN_GB=$((SD_MAX_UNALL_SIZE * 512 / 1024 / 1000 / 1000))
|
||||||
|
#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))
|
||||||
|
|
||||||
# resize the main partition if requested
|
# resize the main partition if requested
|
||||||
if ((test -e "${MOUNTDIR}/resize") && (dialog --clear --stdout --ok-label YES --cancel-label NO --title " AUTO-RESIZE" \
|
if (dialog --clear --stdout --ok-label YES --cancel-label NO --title " AUTO-RESIZE" \
|
||||||
--colors --pause "\n\n \ZuExpand MAIN partition?\Zn\n\n Select an option & press START
|
--colors --pause "\n\n \ZuExpand MAIN partition?\Zn\n\n Select an option & press START
|
||||||
\n\n \ZbWARNING:\Zn\n After 10s auto-resize\n of FAT32 partition will begin." 15 60 10)); then
|
\n\n \ZbWARNING:\Zn\n After 10s auto-resize\n of FAT32 partition will begin." 15 60 10); then
|
||||||
clear
|
clear
|
||||||
|
echo "The full size of your SD is ${SD_SIZE_IN_MiB}MiB large" | tee -a ${LOG}
|
||||||
|
echo "Unallocated space available for resizing equals ${SD_MAX_UNALL_SIZE_IN_GB}GB" | tee -a ${LOG}
|
||||||
echo "Going to resize the MAIN partition." | tee -a ${LOG}
|
echo "Going to resize the MAIN partition." | tee -a ${LOG}
|
||||||
echo "This can take A LONG TIME, so be patient." | tee -a ${LOG}
|
echo "This can take A LONG TIME, so be patient." | tee -a ${LOG}
|
||||||
umount /dev/mmcblk0p4 | tee -a ${LOG}
|
umount /dev/mmcblk0p4 | tee -a ${LOG}
|
||||||
fsck.fat -y /dev/mmcblk0p4 | tee -a ${LOG}
|
fsck.fat -y /dev/mmcblk0p4 | tee -a ${LOG}
|
||||||
fatresize -s max -v -p /dev/mmcblk0p4 -n 4
|
fatresize --size="${SD_MAX_AVAIL_SIZE_IN_KiB}"ki -v -p /dev/mmcblk0p4 -n4 | tee -a ${LOG}
|
||||||
fsck.fat -y /dev/mmcblk0p4 | tee -a ${LOG}
|
fsck.fat -y /dev/mmcblk0p4 | tee -a ${LOG}
|
||||||
echo -n -e \\xEB\\x58\\x90 > /dev/mmcblk0p4
|
echo -n -e \\xEB\\x58\\x90 > /dev/mmcblk0p4
|
||||||
sync
|
sync
|
||||||
mount -t vfat -o rw,sync,utf8 /dev/mmcblk0p4 /mnt | tee -a ${LOG}
|
mount -t vfat -o rw,sync,utf8 /dev/mmcblk0p4 ${HOME} | tee -a ${LOG}
|
||||||
RESIZE_COMMENCED=true
|
RESIZE_COMMENCED=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -494,16 +514,13 @@ rm $TEMP
|
|||||||
mount -o remount,rw "${MOUNTDIR}" | tee -a ${LOG}
|
mount -o remount,rw "${MOUNTDIR}" | tee -a ${LOG}
|
||||||
echo "Disabling the firstboot script." | tee -a ${LOG}
|
echo "Disabling the firstboot script." | tee -a ${LOG}
|
||||||
mv "${MOUNTDIR}/firstboot" "${MOUNTDIR}/firstboot.done" | tee -a ${LOG}
|
mv "${MOUNTDIR}/firstboot" "${MOUNTDIR}/firstboot.done" | tee -a ${LOG}
|
||||||
if test -e "${MOUNTDIR}/resize"; then
|
|
||||||
rm "${MOUNTDIR}/resize"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# copy over the config files
|
# copy over the config files
|
||||||
echo "Copying default configuration files into place..." | tee -a ${LOG}
|
echo "Copying default configuration files into place..." | tee -a ${LOG}
|
||||||
if $BITTBOY_CONFIG; then
|
if $BITTBOY_CONFIG; then
|
||||||
cp "/mnt/gmenu2x/input_bittboy.conf" "${MOUNTDIR}/configs/input.conf"
|
cp "${HOME}/gmenu2x/input_bittboy.conf" "${MOUNTDIR}/configs/input.conf"
|
||||||
elif $MIYOO_CONFIG; then
|
elif $MIYOO_CONFIG; then
|
||||||
cp "/mnt/gmenu2x/input_miyoo.conf" "${MOUNTDIR}/configs/input.conf"
|
cp "${HOME}/gmenu2x/input_miyoo.conf" "${MOUNTDIR}/configs/input.conf"
|
||||||
fi
|
fi
|
||||||
mount -o remount,ro "${MOUNTDIR}" | tee -a ${LOG}
|
mount -o remount,ro "${MOUNTDIR}" | tee -a ${LOG}
|
||||||
if test -r "${BASEDIR}/configs/manifest"; then
|
if test -r "${BASEDIR}/configs/manifest"; then
|
||||||
@@ -517,8 +534,8 @@ if test -r "${BASEDIR}/configs/manifest"; then
|
|||||||
if test "${TO}" == ""; then
|
if test "${TO}" == ""; then
|
||||||
TO="$1"
|
TO="$1"
|
||||||
fi
|
fi
|
||||||
echo "Copying $1 to /mnt/$TO..." | tee -a ${LOG}
|
echo "Copying $1 to ${HOME}/$TO..." | tee -a ${LOG}
|
||||||
cp -f "${BASEDIR}/configs/$1" "/mnt/$TO" | tee -a ${LOG}
|
cp -f "${BASEDIR}/configs/$1" "${HOME}/$TO" | tee -a ${LOG}
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -527,11 +544,13 @@ echo
|
|||||||
|
|
||||||
sync
|
sync
|
||||||
echo "firstboot script finished." | tee -a ${LOG}
|
echo "firstboot script finished." | tee -a ${LOG}
|
||||||
|
#grep logs from temp directory
|
||||||
|
mv ${LOG} ${HOME}/log_firstboot.txt
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# Reboot device if CONSOLE_VARIANT was overwritten from $CHOICE so that it could be applied in u-boot by readID
|
# Reboot device if CONSOLE_VARIANT was overwritten from $CHOICE so that it could be applied in u-boot by readID
|
||||||
## or resizing FAT partition has completed / found firstboot custom script
|
## or resizing FAT partition has completed / found firstboot custom script
|
||||||
if ($CONSOLE_OVERWRITE || $RESIZE_COMMENCED || test -r "${BASEDIR}/firstboot.custom.sh"); then
|
if ($CONSOLE_OVERWRITE || $RESIZE_COMMENCED || test -r "${BASEDIR}/firstboot.custom.sh"); then
|
||||||
|
touch ${HOME}/firstboot.completed
|
||||||
safe_reboot_func
|
safe_reboot_func
|
||||||
fi
|
fi
|
||||||
|
@@ -12,7 +12,6 @@ image bootfs.vfat {
|
|||||||
"boot/firstboot.custom.sh-OFF",
|
"boot/firstboot.custom.sh-OFF",
|
||||||
"boot/modules.custom.sh",
|
"boot/modules.custom.sh",
|
||||||
"boot/normalboot.custom.sh",
|
"boot/normalboot.custom.sh",
|
||||||
"boot/resize"
|
|
||||||
}
|
}
|
||||||
file configs/manifest {
|
file configs/manifest {
|
||||||
image = "boot/configs/manifest"
|
image = "boot/configs/manifest"
|
||||||
|
@@ -7,15 +7,15 @@ START="${HOME}/autoexec.sh"
|
|||||||
|
|
||||||
BOOTDIR=/boot # we expect /dev/mmcblk0p1 has been mounted here read only, from inittab
|
BOOTDIR=/boot # we expect /dev/mmcblk0p1 has been mounted here read only, from inittab
|
||||||
LOGS=/dev/null
|
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
|
|
||||||
|
|
||||||
# check if it's first boot and turn on messages if yes
|
# check if it's first boot and turn on messages if yes
|
||||||
if test -r "${BOOTDIR}/firstboot"; then
|
if ((test -r "${BOOTDIR}/firstboot") || (test -r "${HOME}/firstboot.completed")); then
|
||||||
DEBUG_MSG="yes"
|
DEBUG_MSG="yes"
|
||||||
|
LOGS=$(mktemp)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
export LOGS # so that subshells can use this as well
|
||||||
|
|
||||||
if test "x${DEBUG_MSG}" == "xyes"; then
|
if test "x${DEBUG_MSG}" == "xyes"; then
|
||||||
echo -e "\e[0m" # normal foreground color
|
echo -e "\e[0m" # normal foreground color
|
||||||
export DEBUG_MSG # set it globally for further programs
|
export DEBUG_MSG # set it globally for further programs
|
||||||
@@ -30,22 +30,19 @@ mount -t configfs none /sys/kernel/config >> "${LOGS}" 2>&1
|
|||||||
gadget-ms /dev/mmcblk0p1 /dev/mmcblk0p4 >> "${LOGS}" 2>&1
|
gadget-ms /dev/mmcblk0p1 /dev/mmcblk0p4 >> "${LOGS}" 2>&1
|
||||||
|
|
||||||
|
|
||||||
# just load the expected ones (screen driver) from here
|
# Load the expected one screen driver from here with modprobe
|
||||||
# do it directly and not rely on modprobe trying to find them
|
## automatically from rootfs/lib/modules/VERSION
|
||||||
# automatically in rootfs/lib/modules/VERSION
|
# The uEnv.txt is autogenerated by u-boot from HW which outputs
|
||||||
# (also because with custom kernels the VERSION will be different.
|
## 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`
|
||||||
# the uEnv.txt is autogenerated by u-boot from HW which outputs
|
params=`cat ${BOOTDIR}/uEnv.txt |grep -a "CONSOLE_PARAMETERS" | cut -d "=" -f 2-`
|
||||||
# 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 scripting backend
|
||||||
tvout=`cat ${HOME}/tvout`
|
tvout=`cat ${HOME}/tvout`
|
||||||
if ((test -r "${HOME}/tvout")); then
|
if ((test -r "${HOME}/tvout")); then
|
||||||
echo 0 > /sys/class/backlight/backlight/brightness
|
echo 0 > /sys/class/backlight/backlight/brightness
|
||||||
echo 0 > /sys/class/vtconsole/vtcon1/bind
|
echo 0 > /sys/class/vtconsole/vtcon1/bind
|
||||||
cp /mnt/.backlight.conf /mnt/.backlight.bak
|
cp ${HOME}/.backlight.conf ${HOME}/.backlight.bak
|
||||||
echo 0 > ${HOME}/.backlight.conf
|
echo 0 > ${HOME}/.backlight.conf
|
||||||
modprobe -r $video
|
modprobe -r $video
|
||||||
#TVMODE options.cfg setting
|
#TVMODE options.cfg setting
|
||||||
@@ -53,7 +50,7 @@ gadget-ms /dev/mmcblk0p1 /dev/mmcblk0p4 >> "${LOGS}" 2>&1
|
|||||||
modprobe miyoo-tvout $tvmode
|
modprobe miyoo-tvout $tvmode
|
||||||
echo 1 > /sys/class/vtconsole/vtcon1/bind
|
echo 1 > /sys/class/vtconsole/vtcon1/bind
|
||||||
modprobe -r $video
|
modprobe -r $video
|
||||||
else
|
else
|
||||||
if ((test -r "${HOME}/.backlight.bak")); then
|
if ((test -r "${HOME}/.backlight.bak")); then
|
||||||
mv ${HOME}/.backlight.bak ${HOME}/.backlight.conf
|
mv ${HOME}/.backlight.bak ${HOME}/.backlight.conf
|
||||||
fi
|
fi
|
||||||
@@ -67,23 +64,25 @@ gadget-ms /dev/mmcblk0p1 /dev/mmcblk0p4 >> "${LOGS}" 2>&1
|
|||||||
else
|
else
|
||||||
(cd "${BOOTDIR}" && sh modules.custom.sh ) >> "${LOGS}" 2>&1
|
(cd "${BOOTDIR}" && sh modules.custom.sh ) >> "${LOGS}" 2>&1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# check if it's first boot and defer to the firstboot script if yes
|
# check if it's first boot and defer to the firstboot script if yes
|
||||||
if test -r "${BOOTDIR}/firstboot"; then
|
if test -r "${BOOTDIR}/firstboot"; then
|
||||||
exec sh "${BOOTDIR}/firstboot"
|
exec sh "${BOOTDIR}/firstboot"
|
||||||
|
elif test -r "${HOME}/firstboot.completed"; then
|
||||||
|
rm "${HOME}/firstboot.completed"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if !(grep -q FAT_CHECK\=\0 "${HOME}/options.cfg"); then
|
if !(grep -q FAT_CHECK\=\0 "${HOME}/options.cfg"); then
|
||||||
##Check if fat32 is flagged as "dirty", and if so unmount, repair, remount
|
##Check if fat32 is flagged as "dirty", and if so unmount, repair, remount
|
||||||
if dmesg | grep "mmcblk0p4" > /dev/null; then
|
if dmesg | grep "mmcblk0p4" > /dev/null; then
|
||||||
echo -e "\e[31mUnclean shutdown detected.\e[0m"
|
echo -e "\e[31mUnclean shutdown detected.\e[0m"
|
||||||
echo -e "\e[32mChecking FAT32 partition...\e[0m"
|
echo -e "\e[32mChecking FAT32 partition...\e[0m"
|
||||||
umount /dev/mmcblk0p4
|
umount /dev/mmcblk0p4
|
||||||
fsck.vfat -y /dev/mmcblk0p4 > /dev/null;
|
fsck.vfat -y /dev/mmcblk0p4 > /dev/null;
|
||||||
mount /dev/mmcblk0p4 "${HOME}" -t vfat -o rw,sync,utf8
|
mount /dev/mmcblk0p4 "${HOME}" -t vfat -o rw,sync,utf8
|
||||||
echo -e "\e[32mCheck complete.\e[0m"
|
echo -e "\e[32mCheck complete.\e[0m"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
clear
|
clear
|
||||||
@@ -118,7 +117,8 @@ fi
|
|||||||
# Writes dmesg after firstboot procedure or if DEBUG_MSG=yes
|
# Writes dmesg after firstboot procedure or if DEBUG_MSG=yes
|
||||||
if test "x${DEBUG_MSG}" == "xyes"; then
|
if test "x${DEBUG_MSG}" == "xyes"; then
|
||||||
sleep 1
|
sleep 1
|
||||||
dmesg > /mnt/dmesg.txt
|
dmesg > ${HOME}/dmesg.txt
|
||||||
|
mv ${LOGS} ${HOME}/log.txt
|
||||||
fi
|
fi
|
||||||
|
|
||||||
while [ 1 ]
|
while [ 1 ]
|
||||||
@@ -126,9 +126,8 @@ do
|
|||||||
if test -f "${START}"; then
|
if test -f "${START}"; then
|
||||||
source "${START}"
|
source "${START}"
|
||||||
else
|
else
|
||||||
|
|
||||||
cd "${HOME}"/gmenu2x;
|
cd "${HOME}"/gmenu2x;
|
||||||
./gmenu2x >> "${LOGS}" 2>&1;
|
./gmenu2x >> /dev/null 2>&1;
|
||||||
fi
|
fi
|
||||||
clear
|
clear
|
||||||
done
|
done
|
||||||
|
Reference in New Issue
Block a user