From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
To: edk2-devel@lists.01.org, leif.lindholm@linaro.org,
ryan.harkin@linaro.org
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: [PATCH 1/3] EmbeddedPkg/AndroidFastboot: drop dependency on the LinuxLoader
Date: Mon, 21 Nov 2016 12:28:08 +0000 [thread overview]
Message-ID: <1479731290-22497-2-git-send-email-ard.biesheuvel@linaro.org> (raw)
In-Reply-To: <1479731290-22497-1-git-send-email-ard.biesheuvel@linaro.org>
When booting the kernel via Fastboot, invoke the kernel image directly
rather than passing it to the LinuxLoader app. This requires the kernel
image to be built with UEFI stub support.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
---
Build tested only.
EmbeddedPkg/Application/AndroidFastboot/Arm/BootAndroidBootImg.c | 70 ++++++--------------
1 file changed, 22 insertions(+), 48 deletions(-)
diff --git a/EmbeddedPkg/Application/AndroidFastboot/Arm/BootAndroidBootImg.c b/EmbeddedPkg/Application/AndroidFastboot/Arm/BootAndroidBootImg.c
index acedd3e0e3cd..46a7ceb3a41c 100644
--- a/EmbeddedPkg/Application/AndroidFastboot/Arm/BootAndroidBootImg.c
+++ b/EmbeddedPkg/Application/AndroidFastboot/Arm/BootAndroidBootImg.c
@@ -21,11 +21,6 @@
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiLib.h>
-#define LINUX_LOADER_COMMAND_LINE L"%s -f %s -c %s"
-
-// This GUID is defined in the INGF file of ArmPkg/Application/LinuxLoader
-CONST EFI_GUID mLinuxLoaderAppGuid = { 0x701f54f2, 0x0d70, 0x4b89, { 0xbc, 0x0a, 0xd9, 0xca, 0x25, 0x37, 0x90, 0x59 }};
-
// Device Path representing an image in memory
#pragma pack(1)
typedef struct {
@@ -68,11 +63,7 @@ BootAndroidBootImg (
VOID *Ramdisk;
UINTN RamdiskSize;
MEMORY_DEVICE_PATH KernelDevicePath;
- MEMORY_DEVICE_PATH* RamdiskDevicePath;
- CHAR16* KernelDevicePathTxt;
- CHAR16* RamdiskDevicePathTxt;
- EFI_DEVICE_PATH* LinuxLoaderDevicePath;
- CHAR16* LoadOptions;
+ CHAR16 *LoadOptions, *NewLoadOptions;
Status = ParseAndroidBootImg (
Buffer,
@@ -93,55 +84,38 @@ BootAndroidBootImg (
KernelDevicePath.Node1.StartingAddress = (EFI_PHYSICAL_ADDRESS)(UINTN) Kernel;
KernelDevicePath.Node1.EndingAddress = (EFI_PHYSICAL_ADDRESS)(UINTN) Kernel + KernelSize;
- RamdiskDevicePath = NULL;
- if (RamdiskSize != 0) {
- RamdiskDevicePath = (MEMORY_DEVICE_PATH*)DuplicateDevicePath ((EFI_DEVICE_PATH_PROTOCOL*) &MemoryDevicePathTemplate);
-
- RamdiskDevicePath->Node1.StartingAddress = (EFI_PHYSICAL_ADDRESS)(UINTN) Ramdisk;
- RamdiskDevicePath->Node1.EndingAddress = ((EFI_PHYSICAL_ADDRESS)(UINTN) Ramdisk) + RamdiskSize;
- }
-
- //
- // Boot Linux using the Legacy Linux Loader
- //
-
- Status = LocateEfiApplicationInFvByGuid (&mLinuxLoaderAppGuid, &LinuxLoaderDevicePath);
- if (EFI_ERROR (Status)) {
- Print (L"Couldn't Boot Linux: %d\n", Status);
- return EFI_DEVICE_ERROR;
- }
-
- KernelDevicePathTxt = ConvertDevicePathToText ((EFI_DEVICE_PATH_PROTOCOL *) &KernelDevicePath, FALSE, FALSE);
- if (KernelDevicePathTxt == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- RamdiskDevicePathTxt = ConvertDevicePathToText ((EFI_DEVICE_PATH_PROTOCOL *) RamdiskDevicePath, FALSE, FALSE);
- if (RamdiskDevicePathTxt == NULL) {
+ // Initialize Linux command line
+ LoadOptions = CatSPrint (NULL, L"%a", KernelArgs);
+ if (LoadOptions == NULL) {
return EFI_OUT_OF_RESOURCES;
}
- // Initialize Legacy Linux loader command line
- LoadOptions = CatSPrint (NULL, LINUX_LOADER_COMMAND_LINE, KernelDevicePathTxt, RamdiskDevicePathTxt, KernelArgs);
- if (LoadOptions == NULL) {
- return EFI_OUT_OF_RESOURCES;
+ if (RamdiskSize != 0) {
+ NewLoadOptions = CatSPrint (LoadOptions, L" initrd=0x%x,0x%x",
+ (UINTN)Ramdisk, RamdiskSize);
+ FreePool (LoadOptions);
+ if (NewLoadOptions == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+ LoadOptions = NewLoadOptions;
}
- Status = BdsStartEfiApplication (gImageHandle, LinuxLoaderDevicePath, StrSize (LoadOptions), LoadOptions);
+ Status = BdsStartEfiApplication (gImageHandle,
+ (EFI_DEVICE_PATH_PROTOCOL *) &KernelDevicePath,
+ StrSize (LoadOptions),
+ LoadOptions);
if (EFI_ERROR (Status)) {
DEBUG ((EFI_D_ERROR, "Couldn't Boot Linux: %d\n", Status));
- return EFI_DEVICE_ERROR;
- }
-
- if (RamdiskDevicePath) {
- FreePool (RamdiskDevicePathTxt);
- FreePool (RamdiskDevicePath);
+ Status = EFI_DEVICE_ERROR;
+ goto FreeLoadOptions;
}
- FreePool (KernelDevicePathTxt);
-
// If we got here we do a confused face because BootLinuxFdt returned,
// reporting success.
DEBUG ((EFI_D_ERROR, "WARNING: BdsBootLinuxFdt returned EFI_SUCCESS.\n"));
return EFI_SUCCESS;
+
+FreeLoadOptions:
+ FreePool (LoadOptions);
+ return Status;
}
--
2.7.4
next prev parent reply other threads:[~2016-11-21 12:28 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-21 12:28 [PATCH 0/3] Remove the ArmPkg LinuxLoader Ard Biesheuvel
2016-11-21 12:28 ` Ard Biesheuvel [this message]
2016-11-22 17:07 ` [PATCH 1/3] EmbeddedPkg/AndroidFastboot: drop dependency on the LinuxLoader Ryan Harkin
2016-11-21 12:28 ` [PATCH 2/3] BeagleBoardPkg/BeagleBoardPkg.dsc: remove the LinuxLoader application Ard Biesheuvel
2016-11-21 12:28 ` [PATCH 3/3] ArmPkg: " Ard Biesheuvel
2016-11-21 12:29 ` [PATCH 0/3] Remove the ArmPkg LinuxLoader Ard Biesheuvel
2016-11-21 17:28 ` Ryan Harkin
2016-11-22 17:09 ` Ryan Harkin
2016-11-25 12:59 ` Ard Biesheuvel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1479731290-22497-2-git-send-email-ard.biesheuvel@linaro.org \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox