.. include:: ../../disclaimer-zh_CN.rst :Original: Documentation/arch/riscv/boot-image-header.rst :翻译: å¸å»¶è…¾ Yanteng Si <siyanteng@loongson.cn> .. _cn_boot-image-header.rst: ========================== RISC-V Linuxå¯åŠ¨é•œåƒæ–‡ä»¶å¤´ ========================== :Author: Atish Patra <atish.patra@wdc.com> :Date: 20 May 2019 æ¤æ–‡æ¡£ä»…æè¿°RISC-V Linux å¯åŠ¨æ–‡ä»¶å¤´çš„详情。 TODO: 写一个完整的å¯åŠ¨æŒ‡å—。 在解压åŽçš„Linuxå†…æ ¸é•œåƒä¸å˜åœ¨ä»¥ä¸‹64å—节的文件头:: 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æ¡©æ供支æŒã€‚ä¸ºäº†ä½¿å†…æ ¸é•œåƒå¦‚åŒä¸€ä¸ª EFI应用程åºä¸€æ ·åŠ 载,EFI规范ä¸è§„å®šåœ¨å†…æ ¸é•œåƒçš„开始需è¦PE/COFFé•œåƒæ–‡ä»¶å¤´ã€‚为了 支æŒEFI桩,应该用“MZâ€é”术å—符替æ¢æŽ‰code0,并且res3(å移é‡æœª0x3c)应指å‘PE/COFF 文件头的其余部分. - 表示文件头版本å·çš„Drop-bitä½åŸŸ ========== ========== Bits 0:15 æ¬¡è¦ ç‰ˆæœ¬ Bits 16:31 ä¸»è¦ ç‰ˆæœ¬ ========== ========== è¿™ä¿æŒäº†æ–°æ—§ç‰ˆæœ¬ä¹‹é—´çš„兼容性。 当å‰ç‰ˆæœ¬è¢«å®šä¹‰ä¸º0.2。 - 从版本0.2开始,结构体æˆå‘˜â€œmagicâ€å°±å·²ç»è¢«å¼ƒç”¨ï¼Œåœ¨ä¹‹åŽçš„版本ä¸ï¼Œå¯èƒ½ä¼šç§»é™¤æŽ‰å®ƒã€‚ 最åˆï¼Œè¯¥æˆå‘˜åº”该与ARM64头的“magicâ€æˆå‘˜åŒ¹é…,但é—憾的是并没有。 “magic2â€æˆå‘˜ä»£æ›¿â€œmagicâ€æˆå‘˜ä¸ŽARM64头相匹é…。 - 在当å‰çš„æ–‡ä»¶å¤´ï¼Œæ ‡å¿—ä½åŸŸåªå‰©ä¸‹äº†ä¸€ä¸ªä½ã€‚ ===== ============================== Bit 0 å†…æ ¸å—节åºã€‚1 if BE, 0 if LE. ===== ============================== - å¯¹äºŽå¼•å¯¼åŠ è½½ç¨‹åºåŠ è½½å†…æ ¸æ˜ åƒæ¥è¯´ï¼Œimage_sizeæˆå‘˜å¯¹å¼•å¯¼åŠ 载程åºè€Œè¨€æ˜¯å¿…é¡»çš„ï¼Œå¦ åˆ™å°†å¼•å¯¼å¤±è´¥ã€‚