英语
RISC-V Linux 中的引导镜像头¶
- 作者:
Atish Patra <atish.patra@wdc.com>
- 日期:
2019 年 5 月 20 日
本文档仅描述 RISC-V Linux 的引导镜像头的详细信息。
以下 64 字节的头部存在于解压缩的 Linux 内核镜像中
u32 code0; /* Executable code */
u32 code1; /* Executable code */
u64 text_offset; /* Image load offset, little endian */
u64 image_size; /* Effective Image size, little endian */
u64 flags; /* kernel flags, little endian */
u32 version; /* Version of this header */
u32 res1 = 0; /* Reserved */
u64 res2 = 0; /* Reserved */
u64 magic = 0x5643534952; /* Magic number, little endian, "RISCV" */
u32 magic2 = 0x05435352; /* Magic number 2, little endian, "RSC\x05" */
u32 res3; /* Reserved for PE COFF offset */
此头部格式符合 PE/COFF 头部,并且很大程度上受到 ARM64 头部的启发。因此,未来可以将 ARM64 和 RISC-V 头部合并为一个通用头部。
注释¶
此头部也重用于支持 RISC-V 的 EFI stub。EFI 规范需要在内核镜像的开头包含 PE/COFF 镜像头,以便将其作为 EFI 应用程序加载。为了支持 EFI stub,code0 被替换为 “MZ” 魔术字符串,res3 (偏移量 0x3c) 指向 PE/COFF 头的其余部分。
version 字段表示头部版本号
位 0:15
次版本
位 16:31
主版本
这可以保持新旧头部版本之间的兼容性。当前版本定义为 0.2。
“magic” 字段自 0.2 版本起已弃用。在未来的版本中,可能会将其删除。此字段最初应与 ARM64 头部 “magic” 字段匹配,但不幸的是没有。“magic2” 字段取代了它,与 ARM64 头部匹配。
在当前的头部中,flags 字段只有一个字段。
位 0
内核字节序。如果为 BE,则为 1,如果为 LE,则为 0。
镜像大小对于引导加载程序加载内核镜像至关重要。否则,引导将失败。