Back to home page

OSCL-LXR

 
 

    


0001 .. include:: ../disclaimer-zh_CN.rst
0002 
0003 :Original: Documentation/riscv/boot-image-header.rst
0004 
0005 :翻译:
0006 
0007  司延腾 Yanteng Si <siyanteng@loongson.cn>
0008 
0009 .. _cn_boot-image-header.rst:
0010 
0011 ==========================
0012 RISC-V Linux启动镜像文件头
0013 ==========================
0014 
0015 :Author: Atish Patra <atish.patra@wdc.com>
0016 :Date:   20 May 2019
0017 
0018 此文档仅描述RISC-V Linux 启动文件头的详情。
0019 
0020 TODO:
0021   写一个完整的启动指南。
0022 
0023 在解压后的Linux内核镜像中存在以下64字节的文件头::
0024 
0025         u32 code0;                /* Executable code */
0026         u32 code1;                /* Executable code */
0027         u64 text_offset;          /* Image load offset, little endian */
0028         u64 image_size;           /* Effective Image size, little endian */
0029         u64 flags;                /* kernel flags, little endian */
0030         u32 version;              /* Version of this header */
0031         u32 res1 = 0;             /* Reserved */
0032         u64 res2 = 0;             /* Reserved */
0033         u64 magic = 0x5643534952; /* Magic number, little endian, "RISCV" */
0034         u32 magic2 = 0x05435352;  /* Magic number 2, little endian, "RSC\x05" */
0035         u32 res3;                 /* Reserved for PE COFF offset */
0036 
0037 这种头格式与PE/COFF文件头兼容,并在很大程度上受到ARM64文件头的启发。因此,ARM64
0038 和RISC-V文件头可以在未来合并为一个共同的头。
0039 
0040 注意
0041 ====
0042 
0043 - 将来也可以复用这个文件头,用来对RISC-V的EFI桩提供支持。为了使内核镜像如同一个
0044   EFI应用程序一样加载,EFI规范中规定在内核镜像的开始需要PE/COFF镜像文件头。为了
0045   支持EFI桩,应该用“MZ”魔术字符替换掉code0,并且res3(偏移量未0x3c)应指向PE/COFF
0046   文件头的其余部分.
0047 
0048 - 表示文件头版本号的Drop-bit位域
0049 
0050         ==========  ==========
0051         Bits 0:15   次要  版本
0052         Bits 16:31  主要  版本
0053         ==========  ==========
0054 
0055   这保持了新旧版本之间的兼容性。
0056   当前版本被定义为0.2。
0057 
0058 - 从版本0.2开始,结构体成员“magic”就已经被弃用,在之后的版本中,可能会移除掉它。
0059   最初,该成员应该与ARM64头的“magic”成员匹配,但遗憾的是并没有。
0060   “magic2”成员代替“magic”成员与ARM64头相匹配。
0061 
0062 - 在当前的文件头,标志位域只剩下了一个位。
0063 
0064         =====  ==============================
0065         Bit 0  内核字节序。1 if BE, 0 if LE.
0066         =====  ==============================
0067 
0068 - 对于引导加载程序加载内核映像来说,image_size成员对引导加载程序而言是必须的,否
0069   则将引导失败。