VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/FirmwareNew/EmbeddedPkg/Application/AndroidFastboot/AndroidBootImg.c@ 101296

最後變更 在這個檔案從101296是 99404,由 vboxsync 提交於 2 年 前

Devices/EFI/FirmwareNew: Update to edk2-stable202302 and make it build, bugref:4643

  • 屬性 svn:eol-style 設為 native
檔案大小: 1.7 KB
 
1/** @file
2
3 Copyright (c) 2013-2014, ARM Ltd. All rights reserved.<BR>
4
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7**/
8
9#include "AndroidFastbootApp.h"
10
11// Find the kernel and ramdisk in an Android boot.img.
12// return EFI_INVALID_PARAMETER if the boot.img is invalid (i.e. doesn't have the
13// right magic value),
14// return EFI_NOT_FOUND if there was no kernel in the boot.img.
15// Note that the Ramdisk is optional - *Ramdisk won't be touched if it isn't
16// present, but RamdiskSize will be set to 0.
17EFI_STATUS
18ParseAndroidBootImg (
19 IN VOID *BootImg,
20 OUT VOID **Kernel,
21 OUT UINTN *KernelSize,
22 OUT VOID **Ramdisk,
23 OUT UINTN *RamdiskSize,
24 OUT CHAR8 *KernelArgs
25 )
26{
27 ANDROID_BOOTIMG_HEADER *Header;
28 UINT8 *BootImgBytePtr;
29
30 // Cast to UINT8 so we can do pointer arithmetic
31 BootImgBytePtr = (UINT8 *)BootImg;
32
33 Header = (ANDROID_BOOTIMG_HEADER *)BootImg;
34
35 if (AsciiStrnCmp (
36 (CONST CHAR8 *)Header->BootMagic,
37 ANDROID_BOOT_MAGIC,
38 ANDROID_BOOT_MAGIC_LENGTH
39 ) != 0)
40 {
41 return EFI_INVALID_PARAMETER;
42 }
43
44 if (Header->KernelSize == 0) {
45 return EFI_NOT_FOUND;
46 }
47
48 ASSERT (IS_VALID_ANDROID_PAGE_SIZE (Header->PageSize));
49
50 *KernelSize = Header->KernelSize;
51 *Kernel = BootImgBytePtr + Header->PageSize;
52 *RamdiskSize = Header->RamdiskSize;
53
54 if (Header->RamdiskSize != 0) {
55 *Ramdisk = (VOID *)(BootImgBytePtr
56 + Header->PageSize
57 + ALIGN_VALUE (Header->KernelSize, Header->PageSize));
58 }
59
60 AsciiStrnCpyS (
61 KernelArgs,
62 ANDROID_BOOTIMG_KERNEL_ARGS_SIZE,
63 Header->KernelArgs,
64 ANDROID_BOOTIMG_KERNEL_ARGS_SIZE
65 );
66
67 return EFI_SUCCESS;
68}
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette