kernel/main.c

45 lines
1#include "types.h"2#include "param.h"3#include "memlayout.h"4#include "riscv.h"5#include "defs.h"67volatile static int started = 0;89// start() jumps here in supervisor mode on all CPUs.10void11main()12{13  if(cpuid() == 0){14    consoleinit();15    printfinit();16    printf("\n");17    printf("xv6 kernel is booting\n");18    printf("\n");19    kinit();         // physical page allocator20    kvminit();       // create kernel page table21    kvminithart();   // turn on paging22    procinit();      // process table23    trapinit();      // trap vectors24    trapinithart();  // install kernel trap vector25    plicinit();      // set up interrupt controller26    plicinithart();  // ask PLIC for device interrupts27    binit();         // buffer cache28    iinit();         // inode table29    fileinit();      // file table30    virtio_disk_init(); // emulated hard disk31    userinit();      // first user process32    __sync_synchronize();33    started = 1;34  } else {35    while(started == 0)36      ;37    __sync_synchronize();38    printf("hart %d starting\n", cpuid());39    kvminithart();    // turn on paging40    trapinithart();   // install kernel trap vector41    plicinithart();   // ask PLIC for device interrupts42  }4344  scheduler();        45}46