- This multiboot support is built into linux module for aarch64.
- The implementation for Xen is following <Multiboot on ARM Specification>:
http://wiki.xen.org/wiki/Xen_ARM_with_Virtualization_Extensions/Multiboot
and xen/docs/misc/arm/device-tree/booting.txt in Xen source code.
- The example of this support is <How to boot Xen with GRUB on AArch64 the Foundation FVP model>
https://wiki.linaro.org/LEG/Engineering/Grub2/Xen_booting_on_Foundation_FVP…
- This adds support for the Xen Multiboot on ARM specification for arm64,
enabling config file portability across the architectures.
- The multiboot command is currently x86-only, so reusing these command names
should not conflict with any future additions of ARM support to multiboot2.
- The reason of adding this functionality to the existing "linux" module
rather than "multiboot(2)"
(1)multiboot is x86 only
(2)Multiboot is added to "linux" module because it reuses existing code.
- Some changes in original linux module code
Move some #define from grub-core/loader/arm64/linux.c to include/grub/arm64/linux.h
Make some shared functions for multiboot.c
Remove "loaded" checking in the grub_cmd_devicetree of linux.c
- Add grub_fdt_set_reg64 macro into fdt.h header file for inserting "reg" properiy,
while #address-cells = <0x2> and #size-cells = <0x2>
- Add the introduction of multiboot/module command in docs/grub.texi
This multiboot support will be built in linux module for aarch64,
and can not be used alone.
docs/grub.texi | 10 +
grub-core/Makefile.core.def | 1 +
grub-core/loader/arm64/linux.c | 72 ++---
grub-core/loader/arm64/multiboot.c | 593 +++++++++++++++++++++++++++++++++++++
include/grub/arm64/linux.h | 11 +
include/grub/arm64/multiboot.h | 115 +++++++
include/grub/fdt.h | 12 +
7 files changed, 778 insertions(+), 36 deletions(-)
create mode 100644 grub-core/loader/arm64/multiboot.c
create mode 100644 include/grub/arm64/multiboot.h
Signed-off-by: Fu Wei <fu.wei(a)linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm(a)linaro.org>
--
1.8.3.1
in docs/grub.texi
Signed-off-by: Fu Wei <fu.wei(a)linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm(a)linaro.org>
---
docs/grub.texi | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/docs/grub.texi b/docs/grub.texi
index 46b9e7f..f903413 100644
--- a/docs/grub.texi
+++ b/docs/grub.texi
@@ -4512,6 +4512,14 @@ Alias for @code{hashsum --hash md5 arg @dots{}}. See command @command{hashsum}
@deffn Command module [--nounzip] file [arguments]
Load a module for multiboot kernel image. The rest of the
line is passed verbatim as the module command line.
+Platforms that use the Xen fdt multiboot protocol differ in the following way:
+
+- The --nounzip option is not supported.
+
+- There is a [--type <compatible stream>] option to override default
+compatible string for the current module.
+See @uref{http://wiki.xen.org/wiki/Xen_ARM_with_Virtualization_Extensions/Multiboot},
+ to obtain more information.
@end deffn
@node multiboot
@@ -4523,6 +4531,8 @@ line is passed verbatim as the @dfn{kernel command-line}. Any module must
be reloaded after using this command (@pxref{module}).
Some kernels have known problems. You need to specify --quirk-* for those.
+Platforms that use the Xen fdt multiboot protocol do not support --quirk-*.
+
--quirk-bad-kludge is a problem seen in several products that they include
loading kludge information with invalid data in ELF file. GRUB prior to 0.97
and some custom builds prefered ELF information while 0.97 and GRUB 2
--
1.8.3.1
Signed-off-by: Fu Wei <fu.wei(a)linaro.org>
---
docs/grub.texi | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/docs/grub.texi b/docs/grub.texi
index 46b9e7f..2c69182 100644
--- a/docs/grub.texi
+++ b/docs/grub.texi
@@ -4512,6 +4512,23 @@ Alias for @code{hashsum --hash md5 arg @dots{}}. See command @command{hashsum}
@deffn Command module [--nounzip] file [arguments]
Load a module for multiboot kernel image. The rest of the
line is passed verbatim as the module command line.
+There is not --nounzip support on ARM64 machine.
+
+On the platforms those support the Xen fdt multiboot protocol,
+each module will be given a default compatibility property based on the order
+in which the modules are added:
+
+(1)"multiboot,kernel", "multiboot,module"
+
+(2)"multiboot,ramdisk", "multiboot,module"
+
+All subsequent modules will be: "multiboot,module"
+
+There is a [--type <compatible stream>] option to
+override default compatible string for the current module.
+Note that --type is only for ARM64 currently.
+See @uref{http://wiki.xen.org/wiki/Xen_ARM_with_Virtualization_Extensions/Multiboot},
+ to obtain more information.
@end deffn
@node multiboot
@@ -4523,6 +4540,8 @@ line is passed verbatim as the @dfn{kernel command-line}. Any module must
be reloaded after using this command (@pxref{module}).
Some kernels have known problems. You need to specify --quirk-* for those.
+There is not --quirk-* support on ARM64 machine.
+
--quirk-bad-kludge is a problem seen in several products that they include
loading kludge information with invalid data in ELF file. GRUB prior to 0.97
and some custom builds prefered ELF information while 0.97 and GRUB 2
--
1.8.3.1
Hello List,
I am following Leif's blog entry on this link
http://blog.eciton.net/drafts/foundation-atf-uefi.html to build UEFI for
ARM AArch64. However it failed when calling iASL for some asl files. What I
want to understand is how iASL determine it is "Flag value is too large"
and get to know "(Maximum 1 bit)" for that case. I mean, the iASL must have
checked some definitions for that "Secure EL1 Interrupt : 0000001d" entry
and determined that the specifying of 0000001d is wrong. So where should I
find the definitions? My build environment is a Ubuntu 14.04 with iASL of
20140325-64.
{
"iasl"
-p/home/coryxie/tools/linaro-edk2/Build/ArmVExpress-FVP-AArch64-Minimal/DEBUG_GCC49/AARCH64/ArmPlatformPkg/ArmVExpressPkg/AcpiTables/rtsm_ve-aemv8a/AcpiTables/OUTPUT/./gtdt.aml
/home/coryxie/tools/linaro-edk2/Build/ArmVExpress-FVP-AArch64-Minimal/DEBUG_GCC49/AARCH64/ArmPlatformPkg/ArmVExpressPkg/AcpiTables/rtsm_ve-aemv8a/AcpiTables/OUTPUT/./gtdt.iiii
/home/coryxie/tools/linaro-edk2/Build/ArmVExpress-FVP-AArch64-Minimal/DEBUG_GCC49/AARCH64/ArmPlatformPkg/ArmVExpressPkg/AcpiTables/rtsm_ve-aemv8a/AcpiTables/OUTPUT/./gtdt.iiii
12: [0004] Secure EL1 Interrupt : 0000001d
Error 6153 -
Flag value is too large ^ (Maximum 1
bit)
/home/coryxie/tools/linaro-edk2/Build/ArmVExpress-FVP-AArch64-Minimal/DEBUG_GCC49/AARCH64/ArmPlatformPkg/ArmVExpressPkg/AcpiTables/rtsm_ve-aemv8a/AcpiTables/OUTPUT/./gtdt.iiii
27: [0004] Non-Secure EL2 Interrupt : 0000001a
Error 6153 -
Flag value is too large ^
(Maximum 1 bit)
Intel ACPI Component Architecture
ASL Optimizing Compiler version 20140325-64 [Dec 4 2014]
Copyright (c) 2000 - 2014 Intel Corporation
Table Input:
/home/coryxie/tools/linaro-edk2/Build/ArmVExpress-FVP-AArch64-Minimal/DEBUG_GCC49/AARCH64/ArmPlatformPkg/ArmVExpressPkg/AcpiTables/rtsm_ve-aemv8a/AcpiTables/OUTPUT/./gtdt.iiii
- 55 lines, 2144 bytes, 28 fields
Compilation complete. 2 Errors, 0 Warnings, 0 Remarks
make: ***
[/home/coryxie/tools/linaro-edk2/Build/ArmVExpress-FVP-AArch64-Minimal/DEBUG_GCC49/AARCH64/ArmPlatformPkg/ArmVExpressPkg/AcpiTables/rtsm_ve-aemv8a/AcpiTables/OUTPUT/gtdt.aml]
Error 255
build.py...
: error 7000: Failed to execute command
make tbuild
[/home/coryxie/tools/linaro-edk2/Build/ArmVExpress-FVP-AArch64-Minimal/DEBUG_GCC49/AARCH64/ArmPlatformPkg/ArmVExpressPkg/AcpiTables/rtsm_ve-aemv8a/AcpiTables]
}
Thanks in advance,
Cory
Hello List,
I am following Leif's blog entry on this link
http://blog.eciton.net/drafts/foundation-atf-uefi.html to build UEFI for
ARM AArch64. However it failed when calling iASL for some asl files. What I
want to understand is how iASL determine it is "Flag value is too large"
and get to know "(Maximum 1 bit)" for that case. I mean, the iASL must have
checked some definitions for that "Secure EL1 Interrupt : 0000001d" entry
and determined that the specifying of 0000001d is wrong. So where should I
find the definitions? My build environment is a Ubuntu 14.04 with iASL of
20140325-64.
{
"iasl"
-p/home/coryxie/tools/linaro-edk2/Build/ArmVExpress-FVP-AArch64-Minimal/DEBUG_GCC49/AARCH64/ArmPlatformPkg/ArmVExpressPkg/AcpiTables/rtsm_ve-aemv8a/AcpiTables/OUTPUT/./gtdt.aml
/home/coryxie/tools/linaro-edk2/Build/ArmVExpress-FVP-AArch64-Minimal/DEBUG_GCC49/AARCH64/ArmPlatformPkg/ArmVExpressPkg/AcpiTables/rtsm_ve-aemv8a/AcpiTables/OUTPUT/./gtdt.iiii
/home/coryxie/tools/linaro-edk2/Build/ArmVExpress-FVP-AArch64-Minimal/DEBUG_GCC49/AARCH64/ArmPlatformPkg/ArmVExpressPkg/AcpiTables/rtsm_ve-aemv8a/AcpiTables/OUTPUT/./gtdt.iiii
12: [0004] Secure EL1 Interrupt : 0000001d
Error 6153 -
Flag value is too large ^ (Maximum 1
bit)
/home/coryxie/tools/linaro-edk2/Build/ArmVExpress-FVP-AArch64-Minimal/DEBUG_GCC49/AARCH64/ArmPlatformPkg/ArmVExpressPkg/AcpiTables/rtsm_ve-aemv8a/AcpiTables/OUTPUT/./gtdt.iiii
27: [0004] Non-Secure EL2 Interrupt : 0000001a
Error 6153 -
Flag value is too large ^
(Maximum 1 bit)
Intel ACPI Component Architecture
ASL Optimizing Compiler version 20140325-64 [Dec 4 2014]
Copyright (c) 2000 - 2014 Intel Corporation
Table Input:
/home/coryxie/tools/linaro-edk2/Build/ArmVExpress-FVP-AArch64-Minimal/DEBUG_GCC49/AARCH64/ArmPlatformPkg/ArmVExpressPkg/AcpiTables/rtsm_ve-aemv8a/AcpiTables/OUTPUT/./gtdt.iiii
- 55 lines, 2144 bytes, 28 fields
Compilation complete. 2 Errors, 0 Warnings, 0 Remarks
make: ***
[/home/coryxie/tools/linaro-edk2/Build/ArmVExpress-FVP-AArch64-Minimal/DEBUG_GCC49/AARCH64/ArmPlatformPkg/ArmVExpressPkg/AcpiTables/rtsm_ve-aemv8a/AcpiTables/OUTPUT/gtdt.aml]
Error 255
build.py...
: error 7000: Failed to execute command
make tbuild
[/home/coryxie/tools/linaro-edk2/Build/ArmVExpress-FVP-AArch64-Minimal/DEBUG_GCC49/AARCH64/ArmPlatformPkg/ArmVExpressPkg/AcpiTables/rtsm_ve-aemv8a/AcpiTables]
}
Thanks in advance,
Cory