asmlinkage __visible void __init __noreturn i386_start_kernel(void)
{ /* Make sure IDT is set up before any exception happens */
idt_setup_early_handler();
load_ucode_bsp();
zap_early_initrd_mapping();
cr4_init_shadow();
sanitize_boot_params(&boot_params);
x86_early_init_platform_quirks();
/* Call the subarch specific early setup function */ switch (boot_params.hdr.hardware_subarch) { case X86_SUBARCH_INTEL_MID:
x86_intel_mid_early_setup(); break; case X86_SUBARCH_CE4100:
x86_ce4100_early_setup(); break; default:
i386_default_early_setup(); break;
}
start_kernel();
}
/* * Initialize page tables. This creates a PDE and a set of page * tables, which are located immediately beyond __brk_base. The variable * _brk_end is set up to point to the first "safe" location. * Mappings are created both at virtual address 0 (identity mapping) * and PAGE_OFFSET for up to _end. * * In PAE mode initial_page_table is statically defined to contain * enough entries to cover the VMSPLIT option (that is the top 1, 2 or 3 * entries). The identity mapping is handled by pointing two PGD entries * to the first kernel PMD. Note the upper half of each PMD or PTE are * always zero at this stage.
*/ #ifdef CONFIG_X86_PAE typedef pmd_t pl2_t; #define pl2_base initial_pg_pmd #define SET_PL2(val) { .pmd = (val), } #else typedef pgd_t pl2_t; #define pl2_base initial_page_table #define SET_PL2(val) { .pgd = (val), } #endif
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.