mirror of
https://github.com/ventoy/Ventoy.git
synced 2024-12-25 06:35:59 -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 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;
|
||||||
@ -3655,6 +3657,12 @@ static int ventoy_img_partition_callback (struct grub_disk *disk, const grub_par
|
|||||||
"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)
|
||||||
@ -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_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:
|
||||||
|
|
||||||
check_free(device_name, grub_free);
|
check_free(device_name, grub_free);
|
||||||
|
@ -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
|
||||||
|
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
|
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
|
||||||
|
@ -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
|
||||||
|
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 {
|
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
|
||||||
|
Loading…
Reference in New Issue
Block a user