C++ Crashkurs
Startup of additional cores, the application processors (APs) More...
Namespaces | |
ApplicationProcessor | |
Application Processor Boot. | |
Functions | |
void | ApplicationProcessor::relocateSetupCode () |
Relocate the real mode setup code. More... | |
void | ApplicationProcessor::boot () |
Boot all application processors. More... | |
void | setup_ap () ERROR_ON_CALL("The setup function for application processors shall never be called from your code!") |
Entry point for application processors. More... | |
void | startup_ap () ERROR_ON_CALL("The startup function for application processors shall never be called from your code!") |
Startup for application processors. More... | |
Constants | |
const uintptr_t | ApplicationProcessor::RELOCATED_SETUP = 0x40000 |
Address (below 1 MiB) to which the setup code gets relocated. | |
char | ___SETUP_AP_START__ |
Begin of setup code for application processors. More... | |
char | ___SETUP_AP_END__ |
End of startup code for application processors. More... | |
char | setup_ap_gdt |
Memory reserved for a temporary real mode GDT within the relocatable memory area of the setup code. | |
char | setup_ap_gdtd |
Memory reserved for a temporary real mode GDT descriptor within the relocatable memory area of the setup code. | |
Detailed Description
Startup of additional cores, the application processors (APs)
Function Documentation
void setup_ap | ( | ) |
Entry point for application processors.
Unlike the bootstrap processor, the application processors have not been setup by the boot loader – they start in Real Mode
(16 bit) and have to be switched manually to Protected Mode
(32 bit). This is exactly what this real mode function does, handing over control to the (32 bit) function startup_ap()
This code is written is assembly (boot/startup_ap.asm
) and relocated by ApplicationProcessor::relocateSetupCode() during ApplicationProcessor::boot()
void startup_ap | ( | ) |
Startup for application processors.
This function behaves similar to startup_bsp(): Initializes stack pointer, switches to long mode and calls the C++ kernel_init function
Variable Documentation
char ___SETUP_AP_START__ |
Begin of setup code for application processors.
The setup code has to switch from real mode (16 bit) to protected mode (32 bit), hence it is written in assembly and must be executed in low memory (< 1 MiB).
After kernel start the code is somewhere above 16 MiB (the bootstrap processor was already launched in protected mode by the boot loader). Therefore this symbol is required for relocate the code to the position specified by ApplicationProcessor::RELOCATED_SETUP.
Luckily, the setup_ap
code in boot/startup_ap.asm
is rather simple and doesn't depend on absolute addressing – and is therefore relocatable.
Relocation is done by the function ApplicationProcessor::relocateSetupCode()
The ___SETUP_AP_START__
symbol is defined in the linker script (compiler/section.ld
)
char ___SETUP_AP_END__ |
End of startup code for application processors.
This Symbol is defined in the linker script (compiler/section.ld
)