43 lines
1.1 KiB
C
43 lines
1.1 KiB
C
#include "types.h"
|
|
#include "param.h"
|
|
#include "memlayout.h"
|
|
#include "riscv.h"
|
|
#include "defs.h"
|
|
|
|
volatile static int started = 0;
|
|
|
|
// start() jumps here in supervisor mode on all CPUs.
|
|
void
|
|
main()
|
|
{
|
|
if(cpuid() == 0){
|
|
consoleinit();
|
|
printfinit();
|
|
printf("hart %d starting\n", cpuid());
|
|
kinit(); // physical page allocator
|
|
kvminit(); // create kernel page table
|
|
kvminithart(); // turn on paging
|
|
procinit(); // process table
|
|
trapinit(); // trap vectors
|
|
trapinithart(); // install kernel trap vector
|
|
plicinit(); // set up interrupt controller
|
|
plicinithart(); // ask PLIC for device interrupts
|
|
binit(); // buffer cache
|
|
fileinit(); // file table
|
|
virtio_disk_init(); // emulated hard disk
|
|
userinit(); // first user process
|
|
__sync_synchronize();
|
|
started = 1;
|
|
} else {
|
|
while(started == 0)
|
|
;
|
|
__sync_synchronize();
|
|
printf("hart %d starting\n", cpuid());
|
|
kvminithart(); // turn on paging
|
|
trapinithart(); // install kernel trap vector
|
|
plicinithart(); // ask PLIC for device interrupts
|
|
}
|
|
|
|
scheduler();
|
|
}
|