コード例 #1
0
ファイル: cpu_init.c プロジェクト: Ninals-GitHub/TRON
/*
 * CPU-dependent initialization
 */
EXPORT ER cpu_initialize( void )
{
	/* -------------------------------------------------------------------- */
	/* setup idt								*/
	/* -------------------------------------------------------------------- */
	init_default_int_handlers( );
	
	initIdt();
	
	/* -------------------------------------------------------------------- */
	/* collect cpuid information						*/
	/* -------------------------------------------------------------------- */
	initCpuInformation();
	
	return E_OK;
}
コード例 #2
0
void kernelMain(void) {
    putStr("\nstarting kernel\n");

    initGdt();
    initTss();
    initIdt();

    putStr("mapping the first 2M with va = pa\n");

    for (uint32_t p = 0; p < 0x200000; p += 4096) {
        vmm_map(p,p);
    }

    CHECK((getcr0() & 0x80000000) == 0);

    putStr("about to enable paging\n");
    vmm_on();

    CHECK((getcr0() & 0x80000000) != 0);

    CHECK (vmm_pa(0xf0000000) == 0xffffffff);

    uint32_t pa = vmm_frame();
    vmm_map(0xf0000000, pa);

    CHECK (vmm_pa(0xf0000000) != 0xffffffff);
    CHECK ((vmm_pa(0xf0000123) & 0xfff) == 0x123);

    CHECK(vmm_dirty(0xf0000000) == 0); 
    CHECK(vmm_accessed(0xf0000000) == 0); 

    CHECK(peek(0xf0000000) == 0);
    CHECK(vmm_dirty(0xf0000000) == 0); 
    CHECK(vmm_accessed(0xf0000000) == 1); 

    poke(0xf0000000, 0x12345678);
    CHECK(peek(0xf0000000) == 0x12345678);
    CHECK(vmm_dirty(0xf0000000) == 1); 
    CHECK(vmm_accessed(0xf0000000) == 1); 

    CHECK(vmm_dirty(0xe0000000) == 0); 
    CHECK(vmm_accessed(0xe0000000) == 0); 

    CHECK(vmm_pa(0x40000000) == 0xffffffff);

    vmm_map(0xe0000000, pa);
    CHECK(peek(0xe0000000) == 0x12345678);

    CHECK(vmm_dirty(0xe0000000) == 0); 
    CHECK(vmm_accessed(0xe0000000) == 1); 

    CHECK(peek(0x44444444) == 0);
    CHECK(vmm_dirty(0x44444000) == 0); 
    CHECK(vmm_accessed(0x44443000) == 0); 
    CHECK(vmm_accessed(0x44444000) == 1); 
    CHECK(vmm_accessed(0x44445000) == 0); 

    poke(0x88888888,0x88888888);
    CHECK(peek(0x88888888) == 0x88888888);

    vmm_map(0xccccc000, vmm_pa(0x88888000));
    CHECK(peek(0xccccc888) == 0x88888888);

    CHECK (vmm_pa(0xccccc666) == vmm_pa(0x88888666));

    vmm_unmap(0xccccc000);
    CHECK(peek(0xccccc888) == 0);
    CHECK(peek(0x88888888) == 0x88888888);

    shutdown();
}