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::
|
* Console header tags::
|
||||||
* Module alignment tag::
|
* Module alignment tag::
|
||||||
* EFI boot services tag::
|
* EFI boot services tag::
|
||||||
|
* Relocatable header tag::
|
||||||
|
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@@ -679,6 +680,47 @@ u32 | size = 8 |
|
|||||||
This tag indicates that payload supports starting without
|
This tag indicates that payload supports starting without
|
||||||
terminating boot services.
|
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
|
@node Machine state
|
||||||
@section MIPS machine state
|
@section MIPS machine state
|
||||||
|
|
||||||
@@ -1323,6 +1365,20 @@ u64 | pointer |
|
|||||||
This tag contains pointer to EFI amd64 image handle.
|
This tag contains pointer to EFI amd64 image handle.
|
||||||
Usually it is boot loader 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
|
@node Examples
|
||||||
@chapter Examples
|
@chapter Examples
|
||||||
|
|
||||||
|
|||||||
@@ -62,6 +62,7 @@
|
|||||||
#define MULTIBOOT_TAG_TYPE_EFI_BS 18
|
#define MULTIBOOT_TAG_TYPE_EFI_BS 18
|
||||||
#define MULTIBOOT_TAG_TYPE_EFI32_IH 19
|
#define MULTIBOOT_TAG_TYPE_EFI32_IH 19
|
||||||
#define MULTIBOOT_TAG_TYPE_EFI64_IH 20
|
#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_END 0
|
||||||
#define MULTIBOOT_HEADER_TAG_INFORMATION_REQUEST 1
|
#define MULTIBOOT_HEADER_TAG_INFORMATION_REQUEST 1
|
||||||
@@ -73,11 +74,16 @@
|
|||||||
#define MULTIBOOT_HEADER_TAG_EFI_BS 7
|
#define MULTIBOOT_HEADER_TAG_EFI_BS 7
|
||||||
#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI32 8
|
#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI32 8
|
||||||
#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI64 9
|
#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI64 9
|
||||||
|
#define MULTIBOOT_HEADER_TAG_RELOCATABLE 10
|
||||||
|
|
||||||
#define MULTIBOOT_ARCHITECTURE_I386 0
|
#define MULTIBOOT_ARCHITECTURE_I386 0
|
||||||
#define MULTIBOOT_ARCHITECTURE_MIPS32 4
|
#define MULTIBOOT_ARCHITECTURE_MIPS32 4
|
||||||
#define MULTIBOOT_HEADER_TAG_OPTIONAL 1
|
#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_CONSOLE_REQUIRED 1
|
||||||
#define MULTIBOOT_CONSOLE_FLAGS_EGA_TEXT_SUPPORTED 2
|
#define MULTIBOOT_CONSOLE_FLAGS_EGA_TEXT_SUPPORTED 2
|
||||||
|
|
||||||
@@ -162,6 +168,17 @@ struct multiboot_header_tag_module_align
|
|||||||
multiboot_uint32_t size;
|
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
|
struct multiboot_color
|
||||||
{
|
{
|
||||||
multiboot_uint8_t red;
|
multiboot_uint8_t red;
|
||||||
@@ -388,6 +405,13 @@ struct multiboot_tag_efi64_ih
|
|||||||
multiboot_uint64_t pointer;
|
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 /* ! ASM_FILE */
|
||||||
|
|
||||||
#endif /* ! MULTIBOOT_HEADER */
|
#endif /* ! MULTIBOOT_HEADER */
|
||||||
Reference in new issue
Block a user