grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] multiboot2: Add module relocatable tag to support modules reloca


From: Zide Chen
Subject: [PATCH] multiboot2: Add module relocatable tag to support modules relocation
Date: Thu, 16 Apr 2020 15:56:08 -0700

Also change the name from "relocatable header tag" to "kernel relocatable
tag" to make it less confusing. These two tags are independent from each
other.

Signed-off-by: Zide Chen <address@hidden>
---
 doc/multiboot.texi | 51 +++++++++++++++++++++++++++++++++++++++++-----
 doc/multiboot2.h   | 11 ++++++++++
 2 files changed, 57 insertions(+), 5 deletions(-)

diff --git a/doc/multiboot.texi b/doc/multiboot.texi
index df8a0d056e76..bf0150dc86a0 100644
--- a/doc/multiboot.texi
+++ b/doc/multiboot.texi
@@ -355,7 +355,8 @@ executable header.
 * Console header tags::
 * Module alignment tag::
 * EFI boot services tag::
-* Relocatable header tag::
+* Kernel relocatable tag::
+* Module relocatable tag::
 
 @end menu
 
@@ -691,8 +692,8 @@ u32     | size = 8          |
 This tag indicates that payload supports starting without
 terminating boot services.
 
-@node Relocatable header tag
-@subsection Relocatable header tag
+@node Kernel relocatable tag
+@subsection Kernel relocatable tag
 
 @example
 @group
@@ -708,7 +709,7 @@ u32     | preference        |
 @end group
 @end example
 
-This tag indicates that image is relocatable.
+This tag indicates that kernel image is relocatable.
 
 The meaning of each field is as follows:
 
@@ -730,6 +731,46 @@ 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.
+
+@node Module relocatable tag
+@subsection Module relocatable tag
+
+@example
+@group
+        +-------------------+
+u16     | type = 11         |
+u16     | flags             |
+u32     | size = 20         |
+u32     | min_addr          |
+u32     | max_addr          |
+u32     | preference        |
+        +-------------------+
+@end group
+@end example
+
+This tag is independent to the kernel relocatable tag. All of the
+address fields in this tag are physical addresses.
+
+The meaning of each field is as follows:
+
+@table @code
+@item min_addr
+Lowest possible physical address at which any modules should be
+loaded. The bootloader cannot load any part of any modules below
+this address.
+
+@item max_addr
+Highest possible physical address at which any loaded modules should
+end. The bootloader cannot load any part of any modules above this
+address.
+
+@item preference
+It contains load address placement suggestion for Multiboot2 modules
+Boot loader should follow it. @samp{0} means load modules not lower
+than min_addr, and not higher than max_addr, but no preference on either
+lower or higher address; @samp{1} means load modules at lowest possible
+address but not lower than min_addr; @samp{2} means load modules at
+highest possible address but not higher than max_addr.
 @end table
 
 @node Machine state
@@ -1399,7 +1440,7 @@ u32     | load_base_addr    |
 @end example
 
 This tag contains image load base physical address. It is
-provided only if image has relocatable header tag.
+provided only if image has kernel relocatable tag.
 
 @node Examples
 @chapter Examples
diff --git a/doc/multiboot2.h b/doc/multiboot2.h
index b181607075b2..d97d10c2691a 100644
--- a/doc/multiboot2.h
+++ b/doc/multiboot2.h
@@ -75,6 +75,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_HEADER_TAG_MODULE_RELOCATABLE  11
 
 #define MULTIBOOT_ARCHITECTURE_I386  0
 #define MULTIBOOT_ARCHITECTURE_MIPS32  4
@@ -179,6 +180,16 @@ struct multiboot_header_tag_relocatable
   multiboot_uint32_t preference;
 };
 
+struct multiboot_header_tag_module_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 preference;
+};
+
 struct multiboot_color
 {
   multiboot_uint8_t red;
-- 
2.17.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]