mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-25 16:49:23 +00:00
multiboot2: Add description of support for relocatable images
Signed-off-by: Daniel Kiper <daniel.kiper@oracle.com> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
1 parent
4f0405eeb3
commit
7b35cf63f8
2 files changed
+80
No files matched your search
@@ -353,6 +353,7 @@ executable header.
|
||||
* Console header tags::
|
||||
* Module alignment tag::
|
||||
* EFI boot services tag::
|
||||
* Relocatable header tag::
|
||||
|
||||
@end menu
|
||||
|
||||
@@ -679,6 +680,47 @@ u32 | size = 8 |
|
||||
This tag indicates that payload supports starting without
|
||||
terminating boot services.
|
||||
|
||||
@node Relocatable header tag
|
||||
@subsection Relocatable header tag
|
||||
|
||||
@example
|
||||
@group
|
||||
+-------------------+
|
||||
u16 | type = 10 |
|
||||
u16 | flags |
|
||||
u32 | size = 24 |
|
||||
u32 | min_addr |
|
||||
u32 | max_addr |
|
||||
u32 | align |
|
||||
u32 | preference |
|
||||
+-------------------+
|
||||
@end group
|
||||
@end example
|
||||
|
||||
This tag indicates that image is relocatable.
|
||||
|
||||
The meaning of each field is as follows:
|
||||
|
||||
@table @code
|
||||
@item min_addr
|
||||
Lowest possible physical address at which image should be loaded.
|
||||
The bootloader cannot load any part of image below this address.
|
||||
|
||||
@item max_addr
|
||||
Highest possible physical address at which loaded image should end.
|
||||
The bootloader cannot load any part of image above this address.
|
||||
|
||||
@item align
|
||||
Image alignment in memory, e.g. 4096.
|
||||
|
||||
@item preference
|
||||
It contains load address placement suggestion for boot loader.
|
||||
Boot loader should follow it. @samp{0} means none, @samp{1} means
|
||||
load image at lowest possible address but not lower than min_addr
|
||||
and @samp{2} means load image at highest possible address but not
|
||||
higher than max_addr.
|
||||
@end table
|
||||
|
||||
@node Machine state
|
||||
@section MIPS machine state
|
||||
|
||||
@@ -1323,6 +1365,20 @@ u64 | pointer |
|
||||
This tag contains pointer to EFI amd64 image handle.
|
||||
Usually it is boot loader image handle.
|
||||
|
||||
@subsection Image load base physical address
|
||||
@example
|
||||
@group
|
||||
+-------------------+
|
||||
u32 | type = 21 |
|
||||
u32 | size = 12 |
|
||||
u32 | load_base_addr |
|
||||
+-------------------+
|
||||
@end group
|
||||
@end example
|
||||
|
||||
This tag contains image load base physical address. It is
|
||||
provided only if image has relocatable header tag.
|
||||
|
||||
@node Examples
|
||||
@chapter Examples
|
||||
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
#define MULTIBOOT_TAG_TYPE_EFI_BS 18
|
||||
#define MULTIBOOT_TAG_TYPE_EFI32_IH 19
|
||||
#define MULTIBOOT_TAG_TYPE_EFI64_IH 20
|
||||
#define MULTIBOOT_TAG_TYPE_LOAD_BASE_ADDR 21
|
||||
|
||||
#define MULTIBOOT_HEADER_TAG_END 0
|
||||
#define MULTIBOOT_HEADER_TAG_INFORMATION_REQUEST 1
|
||||
@@ -73,11 +74,16 @@
|
||||
#define MULTIBOOT_HEADER_TAG_EFI_BS 7
|
||||
#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI32 8
|
||||
#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI64 9
|
||||
#define MULTIBOOT_HEADER_TAG_RELOCATABLE 10
|
||||
|
||||
#define MULTIBOOT_ARCHITECTURE_I386 0
|
||||
#define MULTIBOOT_ARCHITECTURE_MIPS32 4
|
||||
#define MULTIBOOT_HEADER_TAG_OPTIONAL 1
|
||||
|
||||
#define MULTIBOOT_LOAD_PREFERENCE_NONE 0
|
||||
#define MULTIBOOT_LOAD_PREFERENCE_LOW 1
|
||||
#define MULTIBOOT_LOAD_PREFERENCE_HIGH 2
|
||||
|
||||
#define MULTIBOOT_CONSOLE_FLAGS_CONSOLE_REQUIRED 1
|
||||
#define MULTIBOOT_CONSOLE_FLAGS_EGA_TEXT_SUPPORTED 2
|
||||
|
||||
@@ -162,6 +168,17 @@ struct multiboot_header_tag_module_align
|
||||
multiboot_uint32_t size;
|
||||
};
|
||||
|
||||
struct multiboot_header_tag_relocatable
|
||||
{
|
||||
multiboot_uint16_t type;
|
||||
multiboot_uint16_t flags;
|
||||
multiboot_uint32_t size;
|
||||
multiboot_uint32_t min_addr;
|
||||
multiboot_uint32_t max_addr;
|
||||
multiboot_uint32_t align;
|
||||
multiboot_uint32_t preference;
|
||||
};
|
||||
|
||||
struct multiboot_color
|
||||
{
|
||||
multiboot_uint8_t red;
|
||||
@@ -388,6 +405,13 @@ struct multiboot_tag_efi64_ih
|
||||
multiboot_uint64_t pointer;
|
||||
};
|
||||
|
||||
struct multiboot_tag_load_base_addr
|
||||
{
|
||||
multiboot_uint32_t type;
|
||||
multiboot_uint32_t size;
|
||||
multiboot_uint32_t load_base_addr;
|
||||
};
|
||||
|
||||
#endif /* ! ASM_FILE */
|
||||
|
||||
#endif /* ! MULTIBOOT_HEADER */
|
||||
Reference in new issue
Block a user