mirror of
https://github.com/ventoy/Ventoy.git
synced 2024-12-24 22:25:57 -05:00
Fix the issue when booting the latest recalbox img file. (#1423)
This commit is contained in:
parent
82e99a3b37
commit
34a36bfc3e
@ -124,6 +124,7 @@ static int g_list_script_pos = 0;
|
||||
|
||||
static char *g_part_list_buf = NULL;
|
||||
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_num = 0;
|
||||
@ -3646,6 +3647,7 @@ end:
|
||||
|
||||
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;
|
||||
|
||||
(void)disk;
|
||||
@ -3655,6 +3657,12 @@ static int ventoy_img_partition_callback (struct grub_disk *disk, const grub_par
|
||||
"0 %llu linear /dev/ventoy %llu\n",
|
||||
(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;
|
||||
}
|
||||
|
||||
@ -3668,6 +3676,7 @@ static grub_err_t ventoy_cmd_img_part_info(grub_extcmd_context_t ctxt, int argc,
|
||||
(void)ctxt;
|
||||
|
||||
g_part_list_pos = 0;
|
||||
g_part_end_max = 0;
|
||||
grub_env_unset("vtoy_img_part_file");
|
||||
|
||||
if (argc != 1)
|
||||
@ -3697,6 +3706,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_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:
|
||||
|
||||
check_free(device_name, grub_free);
|
||||
|
@ -312,7 +312,10 @@ ventoy_dm_patch() {
|
||||
|
||||
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)
|
||||
else
|
||||
vtModPath=$($FIND /lib/modules/$vtKv/kernel/ -name "xfs.ko*" | $HEAD -n1)
|
||||
@ -326,7 +329,10 @@ ventoy_dm_patch() {
|
||||
|
||||
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
|
||||
elif echo $vtModPath | $GREP -q "[.]ko[.]xz$"; then
|
||||
$BUSYBOX_PATH/xzcat $vtModPath > $VTOY_PATH/$vtModName
|
||||
|
45
IMG/cpio/ventoy/loop/recalbox/ventoy-create-part.sh
Normal file
45
IMG/cpio/ventoy/loop/recalbox/ventoy-create-part.sh
Normal 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
|
@ -36,10 +36,15 @@ if [ "$vtdiskname" = "unknown" ]; then
|
||||
exit 0
|
||||
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_create_dev_ventoy_part
|
||||
|
||||
|
||||
PATH=$VTPATH_OLD
|
||||
|
||||
set_ventoy_hook_finish
|
||||
|
@ -20,4 +20,6 @@
|
||||
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
||||
|
||||
$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
|
||||
|
15
IMG/cpio/ventoy/loop/recalbox/ventoy-share.sh
Normal file
15
IMG/cpio/ventoy/loop/recalbox/ventoy-share.sh
Normal 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
|
@ -1688,9 +1688,23 @@ function ventoy_img_ubos {
|
||||
}
|
||||
|
||||
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_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
|
||||
|
||||
#boot image file
|
||||
@ -1971,7 +1985,7 @@ function img_common_menuentry {
|
||||
ventoy_img_batocera
|
||||
elif vt_str_begin "$vtImgHd1Label" "Tails"; then
|
||||
ventoy_img_tails
|
||||
elif [ "$vtImgHd2Label" = "RECALBOX" ]; then
|
||||
elif [ "$vtImgHd2Label" = "RECALBOX" -o "$vtImgHd1Label" = "RECALBOX" ]; then
|
||||
ventoy_img_recalbox
|
||||
elif [ "$vtImgHd1Label" = "ESYSRESCUE" ]; then
|
||||
ventoy_img_esysrescue
|
||||
|
Loading…
Reference in New Issue
Block a user