update code

This commit is contained in:
hustccc 2020-11-03 21:26:21 +09:00
parent 54f9f09ded
commit bd1c01cdf9
4 changed files with 18 additions and 92 deletions

View File

@ -102,7 +102,9 @@ bread(uint dev, uint blockno)
// virtio_disk_rw(b, 0); // virtio_disk_rw(b, 0);
uint64 sector = b->blockno * (BSIZE / 512); uint64 sector = b->blockno * (BSIZE / 512);
if(sd_read_sector(b->data, sector, sizeof(b->data))) { 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; b->valid = 1;
} }

View File

@ -14,11 +14,11 @@ void
main(unsigned long hartid, unsigned long dtb_pa) main(unsigned long hartid, unsigned long dtb_pa)
{ {
// printf("hart %d enter main()...\n", hartid);
if (hartid == 0) { if (hartid == 0) {
printf("\n"); printf("\n");
printf("xv6-k210 kernel is booting\n"); printf("xv6-k210 kernel is booting\n");
printf("\n"); printf("\n");
printf("hart %d enter main()...\n", hartid);
kinit(); // physical page allocator kinit(); // physical page allocator
kvminit(); // create kernel page table kvminit(); // create kernel page table
kvminithart(); // turn on paging kvminithart(); // turn on paging
@ -52,19 +52,14 @@ main(unsigned long hartid, unsigned long dtb_pa)
__sync_synchronize(); __sync_synchronize();
started = 1; started = 1;
scheduler(); // scheduler();
} else } else
{ {
// hart 1 // hart 1
// sbi_console_putchar('A'); printf("hart %d enter main()...\n", hartid);
// sbi_console_putchar('B');
// sbi_console_putchar('C');
// sbi_console_putchar('D');
// sbi_console_putchar('\n');
} }
while (1) { while (1) {
} }
} }

View File

@ -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!
}
}

View File

@ -18,6 +18,7 @@ void test_kalloc() {
memset(mem, 0, PGSIZE); memset(mem, 0, PGSIZE);
strncpy(mem, "Hello, xv6-k210", 16); strncpy(mem, "Hello, xv6-k210", 16);
printf("[test_kalloc]mem: %s\n", mem); printf("[test_kalloc]mem: %s\n", mem);
kfree(mem);
} }
void ptesprint(pagetable_t pagetable, int level){ void ptesprint(pagetable_t pagetable, int level){
@ -46,15 +47,15 @@ int vmprint(pagetable_t pagetable){
} }
void test_vm(unsigned long hart_id) { 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("[test_vm](kvmpa) va: %p, pa: %p\n", UART0, kvmpa(UART0));
printf("virto mmio:\n"); printf("virto mmio:\n");
printf("[test_vm](kvmpa) va: %p, pa: %p\n", VIRTIO0, kvmpa(VIRTIO0)); 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, 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_MTIMECMP(hart_id), kvmpa(CLINT_MTIMECMP(hart_id)));
printf("[test_vm](kvmpa) va: %p, pa: %p\n", CLINT_MTIME, kvmpa(CLINT_MTIME)); 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, 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_PRIORITY, kvmpa(PLIC_PRIORITY));
printf("[test_vm](kvmpa) va: %p, pa: %p\n", PLIC_PENDING, kvmpa(PLIC_PENDING)); 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_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_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("[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, 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 + 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 + 0x2000, kvmpa(KERNBASE + 0x2000));
printf("[test_vm](kvmpa) va: %p, pa: %p\n", KERNBASE + 0x3000, kvmpa(KERNBASE + 0x3000)); 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, 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 + 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 + 0x2000, kvmpa(etext_addr + 0x2000));
printf("[test_vm](kvmpa) va: %p, pa: %p\n", etext_addr + 0x3000, kvmpa(etext_addr + 0x3000)); 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, kvmpa(TRAMPOLINE));
printf("[test_vm](kvmpa) va: %p, pa: %p\n", TRAMPOLINE + PGSIZE - 1, kvmpa(TRAMPOLINE + PGSIZE - 1)); printf("[test_vm](kvmpa) va: %p, pa: %p\n", TRAMPOLINE + PGSIZE - 1, kvmpa(TRAMPOLINE + PGSIZE - 1));
printf("[test_vm]create test pagetable\n"); printf("[test_vm]create test pagetable\n");
pagetable_t test_pagetable = uvmcreate(); 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(); char *test_mem = kalloc();
memset(test_mem, 0, PGSIZE); memset(test_mem, 0, PGSIZE);
if(mappages(test_pagetable, 0, PGSIZE, (uint64)test_mem, PTE_R | PTE_W | PTE_U | PTE_X) != 0) { 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() { void test_sdcard() {
uint8 buffer[20]; uint8 *buffer = kalloc();
uint8 pre_buffer[20]; uint8 *pre_buffer = kalloc();
memset(buffer, 0, sizeof(buffer)); memset(buffer, 0, sizeof(buffer));
if(sd_read_sector(pre_buffer, 0, sizeof(pre_buffer))) { if(sd_read_sector(pre_buffer, 0, sizeof(pre_buffer))) {
printf("[test_sdcard]SD card read sector err\n"); printf("[test_sdcard]SD card read sector err\n");
@ -118,4 +119,6 @@ void test_sdcard() {
} else { } else {
printf("[test_sdcard]SD card recover succeed\n"); printf("[test_sdcard]SD card recover succeed\n");
} }
kfree(buffer);
kfree(pre_buffer);
} }