Fix the issue when booting the latest recalbox img file. (#1423)

This commit is contained in:
longpanda 2022-02-06 00:25:27 +08:00
parent 82e99a3b37
commit 34a36bfc3e
7 changed files with 102 additions and 3 deletions

View File

@ -124,6 +124,7 @@ static int g_list_script_pos = 0;
static char *g_part_list_buf = NULL; static char *g_part_list_buf = NULL;
static int g_part_list_pos = 0; static int g_part_list_pos = 0;
static grub_uint64_t g_part_end_max = 0;
static int g_video_mode_max = 0; static int g_video_mode_max = 0;
static int g_video_mode_num = 0; static int g_video_mode_num = 0;
@ -3646,6 +3647,7 @@ end:
static int ventoy_img_partition_callback (struct grub_disk *disk, const grub_partition_t partition, void *data) static int ventoy_img_partition_callback (struct grub_disk *disk, const grub_partition_t partition, void *data)
{ {
grub_uint64_t end_max = 0;
int *pCnt = (int *)data; int *pCnt = (int *)data;
(void)disk; (void)disk;
@ -3654,6 +3656,12 @@ static int ventoy_img_partition_callback (struct grub_disk *disk, const grub_par
g_part_list_pos += grub_snprintf(g_part_list_buf + g_part_list_pos, VTOY_MAX_SCRIPT_BUF - g_part_list_pos, g_part_list_pos += grub_snprintf(g_part_list_buf + g_part_list_pos, VTOY_MAX_SCRIPT_BUF - g_part_list_pos,
"0 %llu linear /dev/ventoy %llu\n", "0 %llu linear /dev/ventoy %llu\n",
(ulonglong)partition->len, (ulonglong)partition->start); (ulonglong)partition->len, (ulonglong)partition->start);
end_max = (partition->len + partition->start) * 512;
if (end_max > g_part_end_max)
{
g_part_end_max = end_max;
}
return 0; return 0;
} }
@ -3668,6 +3676,7 @@ static grub_err_t ventoy_cmd_img_part_info(grub_extcmd_context_t ctxt, int argc,
(void)ctxt; (void)ctxt;
g_part_list_pos = 0; g_part_list_pos = 0;
g_part_end_max = 0;
grub_env_unset("vtoy_img_part_file"); grub_env_unset("vtoy_img_part_file");
if (argc != 1) if (argc != 1)
@ -3696,6 +3705,9 @@ static grub_err_t ventoy_cmd_img_part_info(grub_extcmd_context_t ctxt, int argc,
grub_snprintf(buf, sizeof(buf), "%d", cnt); grub_snprintf(buf, sizeof(buf), "%d", cnt);
grub_env_set("vtoy_img_part_cnt", buf); grub_env_set("vtoy_img_part_cnt", buf);
grub_snprintf(buf, sizeof(buf), "%llu", (ulonglong)g_part_end_max);
grub_env_set("vtoy_img_max_part_end", buf);
end: end:

View File

@ -312,7 +312,10 @@ ventoy_dm_patch() {
vtKv=$($BUSYBOX_PATH/uname -r) vtKv=$($BUSYBOX_PATH/uname -r)
if [ -d /lib/modules/$vtKv/kernel/fs ]; then if [ ! -d /lib/modules/$vtKv ]; then
vtlog "No modules directory found"
return
elif [ -d /lib/modules/$vtKv/kernel/fs ]; then
vtModPath=$($FIND /lib/modules/$vtKv/kernel/fs/ -name "*.ko*" | $HEAD -n1) vtModPath=$($FIND /lib/modules/$vtKv/kernel/fs/ -name "*.ko*" | $HEAD -n1)
else else
vtModPath=$($FIND /lib/modules/$vtKv/kernel/ -name "xfs.ko*" | $HEAD -n1) vtModPath=$($FIND /lib/modules/$vtKv/kernel/ -name "xfs.ko*" | $HEAD -n1)
@ -326,7 +329,10 @@ ventoy_dm_patch() {
vtlog "template module is $vtModPath $vtModName" vtlog "template module is $vtModPath $vtModName"
if echo $vtModPath | $GREP -q "[.]ko$"; then if [ -z "$vtModPath" ]; then
vtlog "No template module found"
return
elif echo $vtModPath | $GREP -q "[.]ko$"; then
$BUSYBOX_PATH/cp -a $vtModPath $VTOY_PATH/$vtModName $BUSYBOX_PATH/cp -a $vtModPath $VTOY_PATH/$vtModName
elif echo $vtModPath | $GREP -q "[.]ko[.]xz$"; then elif echo $vtModPath | $GREP -q "[.]ko[.]xz$"; then
$BUSYBOX_PATH/xzcat $vtModPath > $VTOY_PATH/$vtModName $BUSYBOX_PATH/xzcat $vtModPath > $VTOY_PATH/$vtModName

View File

@ -0,0 +1,45 @@
#!/ventoy/busybox/sh
#************************************************************************************
# Copyright (c) 2020, longpanda <admin@ventoy.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
#************************************************************************************
. /ventoy/hook/ventoy-hook-lib.sh
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
if [ -f /vtoy_dm_table ]; then
vtPartCnt=$(cat /vtoy_dm_table | wc -l)
if [ $vtPartCnt -ne 1 ]; then
exit 0
fi
else
exit 0
fi
vtlog "try patch init script"
if [ -f /new_root/etc/init.d/S11share ]; then
cp -a /new_root/etc/init.d/S11share /new_root/overlay/S11share
sed "/^ *createMissingPartitions *$/r $VTOY_PATH/loop/recalbox/ventoy-share.sh" -i /new_root/overlay/S11share
vtFile=$(ls -1 /new_root/etc/init.d/ | grep -m1 S01)
mount --bind /new_root/overlay/S11share /new_root/etc/init.d/$vtFile
vtlog "patch S11share to $vtFile"
fi
PATH=$VTPATH_OLD

View File

@ -36,10 +36,15 @@ if [ "$vtdiskname" = "unknown" ]; then
exit 0 exit 0
fi fi
if [ -f $VTOY_PATH/modules/dm-mod.ko ]; then
insmod $VTOY_PATH/modules/dm-mod.ko
fi
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace" ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
ventoy_create_dev_ventoy_part ventoy_create_dev_ventoy_part
PATH=$VTPATH_OLD PATH=$VTPATH_OLD
set_ventoy_hook_finish set_ventoy_hook_finish

View File

@ -20,4 +20,6 @@
. $VTOY_PATH/hook/ventoy-os-lib.sh . $VTOY_PATH/hook/ventoy-os-lib.sh
$SED "/mount.*devtmpfs/a\ $BUSYBOX_PATH/sh $VTOY_PATH/loop/recalbox/ventoy-disk.sh" -i /init $SED "/mount.*devtmpfs/a\ $BUSYBOX_PATH/sh $VTOY_PATH/loop/recalbox/ventoy-disk.sh" -i /init
$SED "/switch_root/i\ $BUSYBOX_PATH/sh $VTOY_PATH/loop/recalbox/ventoy-create-part.sh" -i /init
#$SED "/switch_root/i\ exec /ventoy/busybox/sh" -i /init

View File

@ -0,0 +1,15 @@
echo '#################################################' > /dev/console
echo '#################################################' > /dev/console
echo '### PLEASE REBOOT AND BOOT FROM VENTOY AGAIN ###' > /dev/console
echo '#################################################' > /dev/console
echo '#################################################' > /dev/console
echo '#################################################' > /dev/tty0
echo '#################################################' > /dev/tty0
echo '### PLEASE REBOOT AND BOOT FROM VENTOY AGAIN ###' > /dev/tty0
echo '#################################################' > /dev/tty0
echo '#################################################' > /dev/tty0
sync
sleep 3600

View File

@ -1688,9 +1688,23 @@ function ventoy_img_ubos {
} }
function ventoy_img_recalbox { function ventoy_img_recalbox {
if [ $vtoy_img_max_part_end -gt $vt_chosen_size ]; then
echo -e "\nPlease extend the img file size before boot it. \n"
ventoy_pause
return
fi
vt_load_cpio $vtoy_path "${vt_chosen_path}" ${vtoy_iso_part} "busybox=$ventoy_busybox_ver" vt_load_cpio $vtoy_path "${vt_chosen_path}" ${vtoy_iso_part} "busybox=$ventoy_busybox_ver"
vt_trailer_cpio ${vtoy_iso_part} "${vt_chosen_path}" noinit vt_trailer_cpio ${vtoy_iso_part} "${vt_chosen_path}" noinit
if [ -e (vtimghd,1)/boot/recalbox ]; then
loopback recalbox (vtimghd,1)/boot/recalbox
vt_get_lib_module_ver (recalbox) /lib/modules/ vt_module_ver
if [ -n "$vt_module_ver" ]; then
vt_img_extra_initrd_append (recalbox)/lib/modules/$vt_module_ver/kernel/drivers/md/dm-mod.ko
fi
fi
ventoy_debug_pause ventoy_debug_pause
#boot image file #boot image file
@ -1971,7 +1985,7 @@ function img_common_menuentry {
ventoy_img_batocera ventoy_img_batocera
elif vt_str_begin "$vtImgHd1Label" "Tails"; then elif vt_str_begin "$vtImgHd1Label" "Tails"; then
ventoy_img_tails ventoy_img_tails
elif [ "$vtImgHd2Label" = "RECALBOX" ]; then elif [ "$vtImgHd2Label" = "RECALBOX" -o "$vtImgHd1Label" = "RECALBOX" ]; then
ventoy_img_recalbox ventoy_img_recalbox
elif [ "$vtImgHd1Label" = "ESYSRESCUE" ]; then elif [ "$vtImgHd1Label" = "ESYSRESCUE" ]; then
ventoy_img_esysrescue ventoy_img_esysrescue