Suggested-by: H. Peter Anvin <hpa@xxxxxxxxx> Signed-off-by: Cao jin <caoj.fnst@xxxxxxxxxxxxxx> --- for 64-bit protocol, setup data still needs to be mapped, as there is operation on it in extract_kernel(), like: sanitize_boot_params(boot_params); initrd doesn't need to be mapped, which is also what KASLR does in its mem_avoid_init(). Documentation/x86/boot.rst | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/Documentation/x86/boot.rst b/Documentation/x86/boot.rst index 7fafc7ac00d7..392c6e147e70 100644 --- a/Documentation/x86/boot.rst +++ b/Documentation/x86/boot.rst @@ -1353,12 +1353,12 @@ In 32-bit boot protocol, the kernel is started by jumping to the 32/64-bit kernel. At entry, the CPU must be in 32-bit protected mode with paging -disabled; a GDT must be loaded with the descriptors for selectors -__BOOT_CS(0x10) and __BOOT_DS(0x18); both descriptors must be 4G flat -segment; __BOOT_CS must have execute/read permission, and __BOOT_DS -must have read/write permission; CS must be __BOOT_CS and DS, ES, SS -must be __BOOT_DS; interrupt must be disabled; %esi must hold the base -address of the struct boot_params; %ebp, %edi and %ebx must be zero. +disabled and a GDT must be loaded with the descriptors for selectors +__BOOT_CS(0x10) and __BOOT_DS(0x18): both descriptors must be 4G flat +segment with __BOOT_CS having execute/read permission and __BOOT_DS +having read/write permission. CS must be __BOOT_CS and DS, ES, SS +must be __BOOT_DS. Interrupt must be disabled and %esi must hold the +base address of the struct boot_params. %ebp, %edi and %ebx must be zero. 64-bit Boot Protocol ==================== @@ -1379,7 +1379,7 @@ can be calculated as follows:: In addition to read/modify/write the setup header of the struct boot_params as that of 16-bit boot protocol, the boot loader should also fill the additional fields of the struct boot_params as described -in zero-page.txt. +in zero-page.rst. After setting up the struct boot_params, the boot loader can load 64-bit kernel in the same way as that of 16-bit boot protocol, but @@ -1389,15 +1389,14 @@ In 64-bit boot protocol, the kernel is started by jumping to the 64-bit kernel entry point, which is the start address of loaded 64-bit kernel plus 0x200. -At entry, the CPU must be in 64-bit mode with paging enabled. -The range with setup_header.init_size from start address of loaded -kernel and zero page and command line buffer get ident mapping; -a GDT must be loaded with the descriptors for selectors -__BOOT_CS(0x10) and __BOOT_DS(0x18); both descriptors must be 4G flat -segment; __BOOT_CS must have execute/read permission, and __BOOT_DS -must have read/write permission; CS must be __BOOT_CS and DS, ES, SS -must be __BOOT_DS; interrupt must be disabled; %rsi must hold the base -address of the struct boot_params. +At entry, the CPU must be in 64-bit mode. The range with +setup_header.init_size from start address of loaded kernel, the zero page, +and the command line buffer get identity-mapped, and a GDT must be loaded +with the descriptors for selectors __BOOT_CS(0x10) and __BOOT_DS(0x18): +both descriptors must be 4G flat segment with __BOOT_CS having execute/read +permission and __BOOT_DS having read/write permission. CS must be __BOOT_CS +and DS, ES, SS must be __BOOT_DS. Interrupt must be disabled and %rsi must +hold the base address of the struct boot_params. EFI Handover Protocol (deprecated) ================================== -- 2.21.0