| ================================= | 
 | Boot image header in RISC-V Linux | 
 | ================================= | 
 |  | 
 | :Author: Atish Patra <atish.patra@wdc.com> | 
 | :Date:   20 May 2019 | 
 |  | 
 | This document only describes the boot image header details for RISC-V Linux. | 
 |  | 
 | TODO: | 
 |   Write a complete booting guide. | 
 |  | 
 | The following 64-byte header is present in decompressed Linux kernel image:: | 
 |  | 
 | 	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 */ | 
 |  | 
 | This header format is compliant with PE/COFF header and largely inspired from | 
 | ARM64 header. Thus, both ARM64 & RISC-V header can be combined into one common | 
 | header in future. | 
 |  | 
 | Notes | 
 | ===== | 
 |  | 
 | - This header can also be reused to support EFI stub for RISC-V in future. EFI | 
 |   specification needs PE/COFF image header in the beginning of the kernel image | 
 |   in order to load it as an EFI application. In order to support EFI stub, | 
 |   code0 should be replaced with "MZ" magic string and res3(at offset 0x3c) should | 
 |   point to the rest of the PE/COFF header. | 
 |  | 
 | - version field indicate header version number | 
 |  | 
 | 	==========  ============= | 
 | 	Bits 0:15   Minor version | 
 | 	Bits 16:31  Major version | 
 | 	==========  ============= | 
 |  | 
 |   This preserves compatibility across newer and older version of the header. | 
 |   The current version is defined as 0.2. | 
 |  | 
 | - The "magic" field is deprecated as of version 0.2.  In a future | 
 |   release, it may be removed.  This originally should have matched up | 
 |   with the ARM64 header "magic" field, but unfortunately does not. | 
 |   The "magic2" field replaces it, matching up with the ARM64 header. | 
 |  | 
 | - In current header, the flags field has only one field. | 
 |  | 
 | 	=====  ==================================== | 
 | 	Bit 0  Kernel endianness. 1 if BE, 0 if LE. | 
 | 	=====  ==================================== | 
 |  | 
 | - Image size is mandatory for boot loader to load kernel image. Booting will | 
 |   fail otherwise. |