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