1 .. include:: ../disclaimer-zh_CN.rst
3 :Original: Documentation/riscv/boot-image-header.rst
7 司延腾 Yanteng Si <siyanteng@loongson.cn>
9 .. _cn_boot-image-header.rst:
11 ==========================
13 ==========================
15 :Author: Atish Patra <atish.patra@wdc.com>
18 此文档仅描述RISC-V Linux 启动文件头的详情。
23 在解压后的Linux内核镜像中存在以下64字节的文件头::
25 u32 code0; /* Executable code */
26 u32 code1; /* Executable code */
27 u64 text_offset; /* Image load offset, little endian */
28 u64 image_size; /* Effective Image size, little endian */
29 u64 flags; /* kernel flags, little endian */
30 u32 version; /* Version of this header */
31 u32 res1 = 0; /* Reserved */
32 u64 res2 = 0; /* Reserved */
33 u64 magic = 0x5643534952; /* Magic number, little endian, "RISCV" */
34 u32 magic2 = 0x05435352; /* Magic number 2, little endian, "RSC\x05" */
35 u32 res3; /* Reserved for PE COFF offset */
37 这种头格式与PE/COFF文件头兼容,并在很大程度上受到ARM64文件头的启发。因此,ARM64
38 和RISC-V文件头可以在未来合并为一个共同的头。
43 - 将来也可以复用这个文件头,用来对RISC-V的EFI桩提供支持。为了使内核镜像如同一个
44 EFI应用程序一样加载,EFI规范中规定在内核镜像的开始需要PE/COFF镜像文件头。为了
45 支持EFI桩,应该用“MZ”魔术字符替换掉code0,并且res3(偏移量未0x3c)应指向PE/COFF
58 - 从版本0.2开始,结构体成员“magic”就已经被弃用,在之后的版本中,可能会移除掉它。
59 最初,该成员应该与ARM64头的“magic”成员匹配,但遗憾的是并没有。
60 “magic2”成员代替“magic”成员与ARM64头相匹配。
62 - 在当前的文件头,标志位域只剩下了一个位。
64 ===== ==============================
65 Bit 0 内核字节序。1 if BE, 0 if LE.
66 ===== ==============================
68 - 对于引导加载程序加载内核映像来说,image_size成员对引导加载程序而言是必须的,否