blob: d7752533865ff9a0a24c7b85034282169a23019d [file] [log] [blame]
Mauro Carvalho Chehab638b6422019-07-26 18:01:55 -03001=================================
2Boot image header in RISC-V Linux
3=================================
Atish Patra0f327f22019-06-06 16:08:00 -07004
Mauro Carvalho Chehab638b6422019-07-26 18:01:55 -03005:Author: Atish Patra <atish.patra@wdc.com>
6:Date: 20 May 2019
Atish Patra0f327f22019-06-06 16:08:00 -07007
8This document only describes the boot image header details for RISC-V Linux.
Atish Patra0f327f22019-06-06 16:08:00 -07009
Mauro Carvalho Chehab638b6422019-07-26 18:01:55 -030010TODO:
11 Write a complete booting guide.
12
13The following 64-byte header is present in decompressed Linux kernel image::
Atish Patra0f327f22019-06-06 16:08:00 -070014
15 u32 code0; /* Executable code */
Mauro Carvalho Chehab638b6422019-07-26 18:01:55 -030016 u32 code1; /* Executable code */
Atish Patra0f327f22019-06-06 16:08:00 -070017 u64 text_offset; /* Image load offset, little endian */
18 u64 image_size; /* Effective Image size, little endian */
19 u64 flags; /* kernel flags, little endian */
20 u32 version; /* Version of this header */
Mauro Carvalho Chehab638b6422019-07-26 18:01:55 -030021 u32 res1 = 0; /* Reserved */
22 u64 res2 = 0; /* Reserved */
Atish Patra0f327f22019-06-06 16:08:00 -070023 u64 magic = 0x5643534952; /* Magic number, little endian, "RISCV" */
Chester Lin185271a2019-09-16 13:01:40 +000024 u32 magic2 = 0x05435352; /* Magic number 2, little endian, "RSC\x05" */
Atish Patra1d5c17e2019-10-08 18:06:37 -070025 u32 res3; /* Reserved for PE COFF offset */
Atish Patra0f327f22019-06-06 16:08:00 -070026
27This header format is compliant with PE/COFF header and largely inspired from
28ARM64 header. Thus, both ARM64 & RISC-V header can be combined into one common
29header in future.
30
Mauro Carvalho Chehab638b6422019-07-26 18:01:55 -030031Notes
32=====
33
Atish Patra0f327f22019-06-06 16:08:00 -070034- This header can also be reused to support EFI stub for RISC-V in future. EFI
35 specification needs PE/COFF image header in the beginning of the kernel image
36 in order to load it as an EFI application. In order to support EFI stub,
Atish Patra1d5c17e2019-10-08 18:06:37 -070037 code0 should be replaced with "MZ" magic string and res3(at offset 0x3c) should
Atish Patra0f327f22019-06-06 16:08:00 -070038 point to the rest of the PE/COFF header.
39
Mauro Carvalho Chehab638b6422019-07-26 18:01:55 -030040- version field indicate header version number
41
42 ========== =============
43 Bits 0:15 Minor version
44 Bits 16:31 Major version
45 ========== =============
Atish Patra0f327f22019-06-06 16:08:00 -070046
47 This preserves compatibility across newer and older version of the header.
Paul Walmsley474efec2019-09-13 18:35:50 -070048 The current version is defined as 0.2.
Atish Patra0f327f22019-06-06 16:08:00 -070049
Paul Walmsley474efec2019-09-13 18:35:50 -070050- The "magic" field is deprecated as of version 0.2. In a future
51 release, it may be removed. This originally should have matched up
52 with the ARM64 header "magic" field, but unfortunately does not.
53 The "magic2" field replaces it, matching up with the ARM64 header.
Atish Patra0f327f22019-06-06 16:08:00 -070054
Paul Walmsley474efec2019-09-13 18:35:50 -070055- In current header, the flags field has only one field.
Mauro Carvalho Chehab638b6422019-07-26 18:01:55 -030056
57 ===== ====================================
58 Bit 0 Kernel endianness. 1 if BE, 0 if LE.
59 ===== ====================================
Atish Patra0f327f22019-06-06 16:08:00 -070060
61- Image size is mandatory for boot loader to load kernel image. Booting will
62 fail otherwise.