summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaojian Zhuang <haojian.zhuang@linaro.org>2018-08-14 14:13:29 +0800
committerHaojian Zhuang <haojian.zhuang@linaro.org>2018-08-14 14:22:52 +0800
commitce3fe5ea2186566f2a5b8f255a7bb7ea7820cf3e (patch)
treeaf7a40a54ed8b4add4aa834423a6129829430a0d
parent534df93ade3d02d9fcb19329b3de9a350d62d49f (diff)
downloadedk2-ce3fe5ea2186566f2a5b8f255a7bb7ea7820cf3e.tar.gz
EmbeddedPkg/AbootimgLib: make initrd kernel parameter flexible
Create "initrd=" kenrel parameter only when ramdisk exists in boot image. Signed-off-by: Haojian Zhuang <haojian.zhuang@linaro.org>
-rw-r--r--EmbeddedPkg/Library/AbootimgLib/AbootimgLib.c36
1 files changed, 19 insertions, 17 deletions
diff --git a/EmbeddedPkg/Library/AbootimgLib/AbootimgLib.c b/EmbeddedPkg/Library/AbootimgLib/AbootimgLib.c
index a8db3ac1a..7b81d079c 100644
--- a/EmbeddedPkg/Library/AbootimgLib/AbootimgLib.c
+++ b/EmbeddedPkg/Library/AbootimgLib/AbootimgLib.c
@@ -268,23 +268,25 @@ AllocateRamdisk (
ASSERT (IS_POWER_OF_2 (Header->PageSize));
- Address = (EFI_PHYSICAL_ADDRESS)(UINTN)Header->RamdiskAddress;
- Status = gBS->AllocatePages (
- AllocateAddress, EfiBootServicesData,
- EFI_SIZE_TO_PAGES (Header->RamdiskSize), &Address);
- if (EFI_ERROR (Status)) {
- return Status;
- }
- Source = (VOID *) (BootImgBytePtr + Header->PageSize +
- ALIGN_VALUE (Header->KernelSize, Header->PageSize));
- CopyMem ((VOID *)(UINTN)Address, Source, Header->RamdiskSize);
- // Set the ramdisk in command line arguments
- if (KernelArgs != NULL) {
- UnicodeSPrint (
- (CHAR16 *)KernelArgs + StrLen (KernelArgs), BOOTIMG_KERNEL_ARGS_SIZE,
- L" initrd=0x%x,0x%x",
- (UINTN)Address, Header->RamdiskSize
- );
+ if (Header->RamdiskAddress && Header->RamdiskSize) {
+ Address = (EFI_PHYSICAL_ADDRESS)(UINTN)Header->RamdiskAddress;
+ Status = gBS->AllocatePages (
+ AllocateAddress, EfiBootServicesData,
+ EFI_SIZE_TO_PAGES (Header->RamdiskSize), &Address);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+ Source = (VOID *) (BootImgBytePtr + Header->PageSize +
+ ALIGN_VALUE (Header->KernelSize, Header->PageSize));
+ CopyMem ((VOID *)(UINTN)Address, Source, Header->RamdiskSize);
+ // Set the ramdisk in command line arguments
+ if (KernelArgs != NULL) {
+ UnicodeSPrint (
+ (CHAR16 *)KernelArgs + StrLen (KernelArgs), BOOTIMG_KERNEL_ARGS_SIZE,
+ L" initrd=0x%x,0x%x",
+ (UINTN)Address, Header->RamdiskSize
+ );
+ }
}
return Status;
}