1d619afd3SYanteng Si.. include:: ../disclaimer-zh_CN.rst
2d619afd3SYanteng Si
3*8137a49eSYanteng Si:Original: Documentation/riscv/boot-image-header.rst
4*8137a49eSYanteng Si
5*8137a49eSYanteng Si:翻译:
6*8137a49eSYanteng Si
7*8137a49eSYanteng Si 司延腾 Yanteng Si <siyanteng@loongson.cn>
8d619afd3SYanteng Si
9d619afd3SYanteng Si.. _cn_boot-image-header.rst:
10d619afd3SYanteng Si
11d619afd3SYanteng Si==========================
12d619afd3SYanteng SiRISC-V Linux启动镜像文件头
13d619afd3SYanteng Si==========================
14d619afd3SYanteng Si
15d619afd3SYanteng Si:Author: Atish Patra <atish.patra@wdc.com>
16d619afd3SYanteng Si:Date:   20 May 2019
17d619afd3SYanteng Si
18d619afd3SYanteng Si此文档仅描述RISC-V Linux 启动文件头的详情。
19d619afd3SYanteng Si
20d619afd3SYanteng SiTODO:
21d619afd3SYanteng Si  写一个完整的启动指南。
22d619afd3SYanteng Si
23d619afd3SYanteng Si在解压后的Linux内核镜像中存在以下64字节的文件头::
24d619afd3SYanteng Si
25d619afd3SYanteng Si	u32 code0;		  /* Executable code */
26d619afd3SYanteng Si	u32 code1;		  /* Executable code */
27d619afd3SYanteng Si	u64 text_offset;	  /* Image load offset, little endian */
28d619afd3SYanteng Si	u64 image_size;		  /* Effective Image size, little endian */
29d619afd3SYanteng Si	u64 flags;		  /* kernel flags, little endian */
30d619afd3SYanteng Si	u32 version;		  /* Version of this header */
31d619afd3SYanteng Si	u32 res1 = 0;		  /* Reserved */
32d619afd3SYanteng Si	u64 res2 = 0;		  /* Reserved */
33d619afd3SYanteng Si	u64 magic = 0x5643534952; /* Magic number, little endian, "RISCV" */
34d619afd3SYanteng Si	u32 magic2 = 0x05435352;  /* Magic number 2, little endian, "RSC\x05" */
35d619afd3SYanteng Si	u32 res3;		  /* Reserved for PE COFF offset */
36d619afd3SYanteng Si
37d619afd3SYanteng Si这种头格式与PE/COFF文件头兼容,并在很大程度上受到ARM64文件头的启发。因此,ARM64
38d619afd3SYanteng Si和RISC-V文件头可以在未来合并为一个共同的头。
39d619afd3SYanteng Si
40d619afd3SYanteng Si注意
41d619afd3SYanteng Si====
42d619afd3SYanteng Si
43d619afd3SYanteng Si- 将来也可以复用这个文件头,用来对RISC-V的EFI桩提供支持。为了使内核镜像如同一个
44d619afd3SYanteng Si  EFI应用程序一样加载,EFI规范中规定在内核镜像的开始需要PE/COFF镜像文件头。为了
45d619afd3SYanteng Si  支持EFI桩,应该用“MZ”魔术字符替换掉code0,并且res3(偏移量未0x3c)应指向PE/COFF
46d619afd3SYanteng Si  文件头的其余部分.
47d619afd3SYanteng Si
48d619afd3SYanteng Si- 表示文件头版本号的Drop-bit位域
49d619afd3SYanteng Si
50d619afd3SYanteng Si	==========  ==========
51d619afd3SYanteng Si	Bits 0:15   次要  版本
52d619afd3SYanteng Si	Bits 16:31  主要  版本
53d619afd3SYanteng Si	==========  ==========
54d619afd3SYanteng Si
55d619afd3SYanteng Si  这保持了新旧版本之间的兼容性。
56d619afd3SYanteng Si  当前版本被定义为0.2。
57d619afd3SYanteng Si
58d619afd3SYanteng Si- 从版本0.2开始,结构体成员“magic”就已经被弃用,在之后的版本中,可能会移除掉它。
59d619afd3SYanteng Si  最初,该成员应该与ARM64头的“magic”成员匹配,但遗憾的是并没有。
60d619afd3SYanteng Si  “magic2”成员代替“magic”成员与ARM64头相匹配。
61d619afd3SYanteng Si
62d619afd3SYanteng Si- 在当前的文件头,标志位域只剩下了一个位。
63d619afd3SYanteng Si
64d619afd3SYanteng Si	=====  ==============================
65d619afd3SYanteng Si	Bit 0  内核字节序。1 if BE, 0 if LE.
66d619afd3SYanteng Si	=====  ==============================
67d619afd3SYanteng Si
68d619afd3SYanteng Si- 对于引导加载程序加载内核映像来说,image_size成员对引导加载程序而言是必须的,否
69d619afd3SYanteng Si  则将引导失败。
70