update code
This commit is contained in:
parent
54f9f09ded
commit
bd1c01cdf9
|
@ -102,7 +102,9 @@ bread(uint dev, uint blockno)
|
|||
// virtio_disk_rw(b, 0);
|
||||
uint64 sector = b->blockno * (BSIZE / 512);
|
||||
if(sd_read_sector(b->data, sector, sizeof(b->data))) {
|
||||
panic("[bio.c]bread err\n");
|
||||
panic("[bread]bread err\n");
|
||||
} else {
|
||||
printf("[bread]read data: %s\n", b->data);
|
||||
}
|
||||
b->valid = 1;
|
||||
}
|
||||
|
|
|
@ -14,11 +14,11 @@ void
|
|||
main(unsigned long hartid, unsigned long dtb_pa)
|
||||
{
|
||||
|
||||
// printf("hart %d enter main()...\n", hartid);
|
||||
if (hartid == 0) {
|
||||
printf("\n");
|
||||
printf("xv6-k210 kernel is booting\n");
|
||||
printf("\n");
|
||||
printf("hart %d enter main()...\n", hartid);
|
||||
kinit(); // physical page allocator
|
||||
kvminit(); // create kernel page table
|
||||
kvminithart(); // turn on paging
|
||||
|
@ -52,19 +52,14 @@ main(unsigned long hartid, unsigned long dtb_pa)
|
|||
__sync_synchronize();
|
||||
started = 1;
|
||||
|
||||
scheduler();
|
||||
// scheduler();
|
||||
|
||||
} else
|
||||
{
|
||||
// hart 1
|
||||
// sbi_console_putchar('A');
|
||||
// sbi_console_putchar('B');
|
||||
// sbi_console_putchar('C');
|
||||
// sbi_console_putchar('D');
|
||||
// sbi_console_putchar('\n');
|
||||
printf("hart %d enter main()...\n", hartid);
|
||||
}
|
||||
|
||||
|
||||
while (1) {
|
||||
}
|
||||
}
|
||||
|
|
74
kernel/sbi.c
74
kernel/sbi.c
|
@ -1,74 +0,0 @@
|
|||
// SBI Call Implementation
|
||||
|
||||
|
||||
#define SBI_SET_TIMER 0
|
||||
#define SBI_CONSOLE_PUTCHAR 1
|
||||
#define SBI_CONSOLE_GETCHAR 2
|
||||
#define SBI_CLEAR_IPI 3
|
||||
#define SBI_SEND_IPI 4
|
||||
#define SBI_REMOTE_FENCE_I 5
|
||||
#define SBI_REMOTE_SFENCE_VMA 6
|
||||
#define SBI_REMOTE_SFENCE_VMA_ASID 7
|
||||
#define SBI_SHUTDOWN 8
|
||||
|
||||
static long sbi_call(unsigned long which, unsigned long arg0, unsigned long arg1, unsigned long arg2) {
|
||||
long ret;
|
||||
asm volatile (
|
||||
"ld x10, %1 \n\t"
|
||||
"ld x11, %2 \n\t"
|
||||
"ld x12, %3 \n\t"
|
||||
"ld x17, %4 \n\t"
|
||||
"ecall \n\t"
|
||||
"sd x10, %0 \n\t"
|
||||
:"=m"(ret)
|
||||
:"m"(arg0), "m"(arg1), "m"(arg2), "m"(which)
|
||||
:"memory"
|
||||
);
|
||||
return ret;
|
||||
}
|
||||
|
||||
// put a char in console
|
||||
void sbi_console_putchar(int ch) {
|
||||
sbi_call(SBI_CONSOLE_PUTCHAR, ch, 0, 0);
|
||||
}
|
||||
|
||||
int sbi_console_getchar() {
|
||||
return sbi_call(SBI_CONSOLE_GETCHAR, 0, 0, 0);
|
||||
}
|
||||
|
||||
void sbi_set_timer(uint64 stime_value) {
|
||||
sbi_call(SBI_SET_TIMER, (unsigned long)stime_value, 0, 0);
|
||||
}
|
||||
|
||||
void sbi_send_ipi(const unsigned long *hart_mask) {
|
||||
sbi_call(SBI_SEND_IPI, (unsigned long)hart_mask, 0, 0);
|
||||
}
|
||||
|
||||
void sbi_clear_ipi(void) {
|
||||
sbi_call(SBI_CLEAR_IPI, 0, 0, 0);
|
||||
}
|
||||
|
||||
void sbi_remote_fence_i(const unsigned long *hart_mask) {
|
||||
sbi_call(SBI_REMOTE_FENCE_I, (unsigned long)hart_mask, 0, 0);
|
||||
}
|
||||
|
||||
void sbi_remote_sfence_vma(const unsigned long *hart_mask,
|
||||
unsigned long start,
|
||||
unsigned long size) {
|
||||
sbi_call(SBI_REMOTE_SFENCE_VMA, (unsigned long)hart_mask, 0, 0);
|
||||
}
|
||||
|
||||
void sbi_remote_sfence_vma_asid(const unsigned long *hart_mask,
|
||||
unsigned long start,
|
||||
unsigned long size,
|
||||
unsigned long asid) {
|
||||
sbi_call(SBI_REMOTE_SFENCE_VMA_ASID, (unsigned long)hart_mask, 0, 0);
|
||||
}
|
||||
|
||||
void sbi_shutdown(void) {
|
||||
sbi_call(SBI_SHUTDOWN, 0, 0, 0);
|
||||
while (1)
|
||||
{
|
||||
// unreachable!
|
||||
}
|
||||
}
|
|
@ -18,6 +18,7 @@ void test_kalloc() {
|
|||
memset(mem, 0, PGSIZE);
|
||||
strncpy(mem, "Hello, xv6-k210", 16);
|
||||
printf("[test_kalloc]mem: %s\n", mem);
|
||||
kfree(mem);
|
||||
}
|
||||
|
||||
void ptesprint(pagetable_t pagetable, int level){
|
||||
|
@ -46,15 +47,15 @@ int vmprint(pagetable_t pagetable){
|
|||
}
|
||||
|
||||
void test_vm(unsigned long hart_id) {
|
||||
printf("UART:\n");
|
||||
printf("[test_vm]UART:\n");
|
||||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", UART0, kvmpa(UART0));
|
||||
printf("virto mmio:\n");
|
||||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", VIRTIO0, kvmpa(VIRTIO0));
|
||||
printf("CLINT:\n");
|
||||
printf("[test_vm]CLINT:\n");
|
||||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", CLINT, kvmpa(CLINT));
|
||||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", CLINT_MTIMECMP(hart_id), kvmpa(CLINT_MTIMECMP(hart_id)));
|
||||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", CLINT_MTIME, kvmpa(CLINT_MTIME));
|
||||
printf("PLIC\n");
|
||||
printf("[test_vm]PLIC\n");
|
||||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", PLIC, kvmpa(PLIC));
|
||||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", PLIC_PRIORITY, kvmpa(PLIC_PRIORITY));
|
||||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", PLIC_PENDING, kvmpa(PLIC_PENDING));
|
||||
|
@ -64,22 +65,22 @@ void test_vm(unsigned long hart_id) {
|
|||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", PLIC_SPRIORITY(hart_id), kvmpa(PLIC_SPRIORITY(hart_id)));
|
||||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", PLIC_MCLAIM(hart_id), kvmpa(PLIC_MCLAIM(hart_id)));
|
||||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", PLIC_SCLAIM(hart_id), kvmpa(PLIC_SCLAIM(hart_id)));
|
||||
printf("kernel base:\n");
|
||||
printf("[test_vm]kernel base:\n");
|
||||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", KERNBASE, kvmpa(KERNBASE));
|
||||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", KERNBASE + 0x1000, kvmpa(KERNBASE + 0x1000));
|
||||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", KERNBASE + 0x2000, kvmpa(KERNBASE + 0x2000));
|
||||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", KERNBASE + 0x3000, kvmpa(KERNBASE + 0x3000));
|
||||
printf("etext_addr:\n");
|
||||
printf("[test_vm]etext_addr:\n");
|
||||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", etext_addr, kvmpa(etext_addr));
|
||||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", etext_addr + 0x1000, kvmpa(etext_addr + 0x1000));
|
||||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", etext_addr + 0x2000, kvmpa(etext_addr + 0x2000));
|
||||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", etext_addr + 0x3000, kvmpa(etext_addr + 0x3000));
|
||||
printf("trampoline:\n");
|
||||
printf("[test_vm]trampoline:\n");
|
||||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", TRAMPOLINE, kvmpa(TRAMPOLINE));
|
||||
printf("[test_vm](kvmpa) va: %p, pa: %p\n", TRAMPOLINE + PGSIZE - 1, kvmpa(TRAMPOLINE + PGSIZE - 1));
|
||||
printf("[test_vm]create test pagetable\n");
|
||||
pagetable_t test_pagetable = uvmcreate();
|
||||
printf("test_pagetable: %p\n", test_pagetable);
|
||||
printf("[test_vm]test_pagetable: %p\n", test_pagetable);
|
||||
char *test_mem = kalloc();
|
||||
memset(test_mem, 0, PGSIZE);
|
||||
if(mappages(test_pagetable, 0, PGSIZE, (uint64)test_mem, PTE_R | PTE_W | PTE_U | PTE_X) != 0) {
|
||||
|
@ -90,8 +91,8 @@ void test_vm(unsigned long hart_id) {
|
|||
}
|
||||
|
||||
void test_sdcard() {
|
||||
uint8 buffer[20];
|
||||
uint8 pre_buffer[20];
|
||||
uint8 *buffer = kalloc();
|
||||
uint8 *pre_buffer = kalloc();
|
||||
memset(buffer, 0, sizeof(buffer));
|
||||
if(sd_read_sector(pre_buffer, 0, sizeof(pre_buffer))) {
|
||||
printf("[test_sdcard]SD card read sector err\n");
|
||||
|
@ -118,4 +119,6 @@ void test_sdcard() {
|
|||
} else {
|
||||
printf("[test_sdcard]SD card recover succeed\n");
|
||||
}
|
||||
kfree(buffer);
|
||||
kfree(pre_buffer);
|
||||
}
|
Loading…
Reference in New Issue