コード例 #1
0
ファイル: base_paging_init.c プロジェクト: dzavalishin/oskit
void base_paging_init(void)
{
	if (ptab_alloc(&base_pdir_pa))
		panic("Can't allocate kernel page directory");

	if (pdir_map_range(base_pdir_pa, 0, 0, round_superpage(phys_mem_max),
		INTEL_PDE_VALID | INTEL_PDE_WRITE | INTEL_PDE_USER))
		panic("Can't direct-map physical memory");
}
コード例 #2
0
ファイル: boot_kernel.c プロジェクト: RajasekharBhumi/L4Re
void
bootstrap (l4util_mb_info_t *mbi, unsigned int flag, char *rm_pointer)
{
  l4_uint32_t vma_start, vma_end;
  struct
  {
    l4_uint32_t start;
    l4_uint16_t cs __attribute__((packed));
  } far_ptr;
  l4_uint64_t mem_upper;

  // setup stuff for base_paging_init()
  base_cpu_setup();

#ifdef REALMODE_LOADING
  mem_upper = *(unsigned long*)(rm_pointer + 0x1e0);
  mem_upper = 1024 * (1024 + mem_upper);
#else
  mem_upper = find_upper_mem(mbi);
  if (!mem_upper)
    mem_upper = 1024 * (1024 + mbi->mem_upper);
#endif

  printf("Highest physical memory address found: %llx\n", mem_upper);

  // now do base_paging_init(): sets up paging with one-to-one mapping
  base_paging_init(round_superpage(mem_upper));

  printf("Loading 64bit part...\n");
  // switch from 32 Bit compatibility mode to 64 Bit mode
  far_ptr.cs    = KERNEL_CS_64;
  far_ptr.start = load_elf(&_binary_bootstrap64_bin_start,
                           &vma_start, &vma_end);

  asm volatile("ljmp *(%4)"
                :: "D"(mbi), "S"(flag), "d"(rm_pointer),
                   "c"(&ptab64_mem_info),
                   "r"(&far_ptr), "m"(far_ptr));
}