Loader: support booting OS from memory disk (MD)
Until now, the boot image can be embedded into the loader with /sys/tools/embed_mfs.sh, and memory disk (MD) is already supported in loader source. But due to memory disk (MD) driver isn't registered to the loader yet, the boot image can't be boot from embedded memory disk. Reviewed by: dab, tsoome MFC after: 1 week Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D29512
This commit is contained in:
parent
0f07c234ca
commit
5984246f96
@ -35,6 +35,10 @@ __FBSDID("$FreeBSD$");
|
|||||||
|
|
||||||
extern struct devsw vdisk_dev;
|
extern struct devsw vdisk_dev;
|
||||||
|
|
||||||
|
#ifdef MD_IMAGE_SIZE
|
||||||
|
extern struct devsw md_dev;
|
||||||
|
#endif
|
||||||
|
|
||||||
struct devsw *devsw[] = {
|
struct devsw *devsw[] = {
|
||||||
&efipart_fddev,
|
&efipart_fddev,
|
||||||
&efipart_cddev,
|
&efipart_cddev,
|
||||||
@ -46,6 +50,9 @@ struct devsw *devsw[] = {
|
|||||||
&vdisk_dev,
|
&vdisk_dev,
|
||||||
#ifdef EFI_ZFS_BOOT
|
#ifdef EFI_ZFS_BOOT
|
||||||
&zfs_dev,
|
&zfs_dev,
|
||||||
|
#endif
|
||||||
|
#ifdef MD_IMAGE_SIZE
|
||||||
|
&md_dev,
|
||||||
#endif
|
#endif
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
@ -296,6 +296,21 @@ probe_zfs_currdev(uint64_t guid)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef MD_IMAGE_SIZE
|
||||||
|
static bool
|
||||||
|
probe_md_currdev(void)
|
||||||
|
{
|
||||||
|
extern struct devsw md_dev;
|
||||||
|
bool rv;
|
||||||
|
|
||||||
|
set_currdev_devsw(&md_dev, 0);
|
||||||
|
rv = sanity_check_currdev();
|
||||||
|
if (!rv)
|
||||||
|
printf("MD not present\n");
|
||||||
|
return (rv);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
try_as_currdev(pdinfo_t *hd, pdinfo_t *pp)
|
try_as_currdev(pdinfo_t *hd, pdinfo_t *pp)
|
||||||
{
|
{
|
||||||
@ -569,6 +584,15 @@ find_currdev(bool do_bootmgr, bool is_last,
|
|||||||
}
|
}
|
||||||
#endif /* EFI_ZFS_BOOT */
|
#endif /* EFI_ZFS_BOOT */
|
||||||
|
|
||||||
|
#ifdef MD_IMAGE_SIZE
|
||||||
|
/*
|
||||||
|
* If there is an embedded MD, try to use that.
|
||||||
|
*/
|
||||||
|
printf("Trying MD\n");
|
||||||
|
if (probe_md_currdev())
|
||||||
|
return (0);
|
||||||
|
#endif /* MD_IMAGE_SIZE */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Try to find the block device by its handle based on the
|
* Try to find the block device by its handle based on the
|
||||||
* image we're booting. If we can't find a sane partition,
|
* image we're booting. If we can't find a sane partition,
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
.\"
|
.\"
|
||||||
.\" $FreeBSD$
|
.\" $FreeBSD$
|
||||||
.\"
|
.\"
|
||||||
.Dd October 2, 2020
|
.Dd April 7, 2021
|
||||||
.Dt LOADER 8
|
.Dt LOADER 8
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -987,6 +987,23 @@ See
|
|||||||
for details.
|
for details.
|
||||||
In order for this to be effective, one should also configure the firmware
|
In order for this to be effective, one should also configure the firmware
|
||||||
(BIOS or UEFI) to prevent booting from unauthorized devices.
|
(BIOS or UEFI) to prevent booting from unauthorized devices.
|
||||||
|
.Sh MD
|
||||||
|
Memory disk (MD) can be used when the
|
||||||
|
.Nm
|
||||||
|
was compiled with
|
||||||
|
.Va MD_IMAGE_SIZE .
|
||||||
|
The size of the memory disk is determined by
|
||||||
|
.Va MD_IMAGE_SIZE .
|
||||||
|
If MD available, a file system can be embedded into the
|
||||||
|
.Nm
|
||||||
|
with
|
||||||
|
.Pa /sys/tools/embed_mfs.sh .
|
||||||
|
Then, MD will be probed and be set to
|
||||||
|
.Va currdev
|
||||||
|
during initialization.
|
||||||
|
.Pp
|
||||||
|
Currently, MD is only supported in
|
||||||
|
.Xr loader.efi 8 .
|
||||||
.Sh FILES
|
.Sh FILES
|
||||||
.Bl -tag -width /usr/share/examples/bootforth/ -compact
|
.Bl -tag -width /usr/share/examples/bootforth/ -compact
|
||||||
.It Pa /boot/loader
|
.It Pa /boot/loader
|
||||||
|
Loading…
Reference in New Issue
Block a user