diff options
author | Haojian Zhuang <haojian.zhuang@linaro.org> | 2018-08-14 14:13:29 +0800 |
---|---|---|
committer | Haojian Zhuang <haojian.zhuang@linaro.org> | 2018-08-14 14:22:52 +0800 |
commit | ce3fe5ea2186566f2a5b8f255a7bb7ea7820cf3e (patch) | |
tree | af7a40a54ed8b4add4aa834423a6129829430a0d | |
parent | 534df93ade3d02d9fcb19329b3de9a350d62d49f (diff) | |
download | edk2-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.c | 36 |
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; } |