X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/839da03f6ebe838d780e52190318d4c3048990f1..df61e9d0fec3d5e75820e27e7a2459d132364585:/lunaix-os/kernel/proc0.c diff --git a/lunaix-os/kernel/proc0.c b/lunaix-os/kernel/proc0.c index 3a6ea62..b9a2470 100644 --- a/lunaix-os/kernel/proc0.c +++ b/lunaix-os/kernel/proc0.c @@ -2,7 +2,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -12,11 +14,13 @@ #include #include -#include +#include #include #include #include +#include + LOG_MODULE("PROC0") extern void @@ -107,14 +111,50 @@ extern uint8_t __kernel_end; /* link/linker.ld */ extern uint8_t __init_hhk_end; /* link/linker.ld */ extern multiboot_info_t* _k_init_mb_info; /* k_init.c */ +char test_sequence[] = "Once upon a time, in a magical land of Equestria. " + "There were two regal sisters who ruled together " + "and created harmony for all the land."; + void -init_platform() +__test_disk_io() { - assert_msg(kalloc_init(), "Fail to initialize heap"); + struct hba_port* port = ahci_get_port(0); + char* buffer = valloc_dma(port->device->block_size); + strcpy(buffer, test_sequence); + kprintf("WRITE: %s\n", buffer); + int result; + + // 写入第一扇区 + result = + port->device->ops.write_buffer(port, 1, buffer, port->device->block_size); + if (!result) { + kprintf(KWARN "fail to write: %x\n", port->device->last_error); + } + + memset(buffer, 0, port->device->block_size); + + // 读出我们刚刚写的内容! + result = + port->device->ops.read_buffer(port, 1, buffer, port->device->block_size); + kprintf(KDEBUG "%x, %x\n", port->regs[HBA_RPxIS], port->regs[HBA_RPxTFD]); + if (!result) { + kprintf(KWARN "fail to read: %x\n", port->device->last_error); + } else { + kprint_hex(buffer, 256); + } +} +void +init_platform() +{ // 锁定所有系统预留页(内存映射IO,ACPI之类的),并且进行1:1映射 lock_reserved_memory(); + cake_init(); + + assert_msg(kalloc_init(), "Fail to initialize heap"); + valloc_init(); + acpi_init(_k_init_mb_info); apic_init(); ioapic_init(); @@ -123,9 +163,12 @@ init_platform() ps2_kbd_init(); pci_init(); ahci_init(); - pci_print_device(); ahci_list_device(); + __test_disk_io(); + + cake_stats(); + syscall_install(); console_start_flushing();