/* Check if the compiler thinks you are targeting the wrong operating system. */ #if defined(__linux__) #error "You are not using a cross-compiler, you will most certainly run into trouble" #endif /* This tutorial will only work for the 32-bit ix86 targets. */ #if !defined(__i386__) #error "This kernel needs to be compiled with a ix86-elf compiler" #endif #include #include #include #include #include #include #include #include #include #include #include #include #include /*#include */ #include #include #include #include #include #include #include #define DEBUG /*extern HBA_MEM *abar; extern HBA_PORT *ahci_port;*/ extern void _hang_asm(void); extern void _sti_asm(void); void kernel_main(multiboot_info_t* mbd, unsigned int magic) { /* --- BEGIN INITIALIZATION SECTION --- */ const char* espresso_kernel_version = "0.0.0f"; /* We need to initialize the terminal so that any error/debuging messages show. */ terminal_initialize(); printf("Loading Espresso %s...\n", espresso_kernel_version); terminal_setcolor(VGA_COLOR_RED); /* Make sure the magic number matches for memory mapping*/ if(magic != MULTIBOOT_BOOTLOADER_MAGIC) { printf("[ ERROR ] invalid magic number!\n"); _hang_asm(); } /* Check bit 6 to see if we have a valid memory map */ if(!(mbd->flags >> 6 & 0x1)) { printf("[ ERROR ] invalid memory map given by GRUB bootloader\n"); _hang_asm(); } gdt_install(false); pic_remap(); idt_init(); /*pit_init(1000); 1000 Hz = 1ms tick */ _sti_asm(); terminal_setcolor(VGA_COLOR_GREEN); printd("Initializing physical memory manager...\n"); pmm_init(mbd); printd("Physical memory manager initialized\n"); printd("Initializing paging...\n"); paging_init(); printd("Paging initialized\n"); printd("Initializing heap allocator...\n"); heap_init(); printd("Heap allocator initialized\n"); printd("Testing SSE...\n"); int32_t sse_test_result = test_sse(); if (sse_test_result != 0) { printf("[ DEBUG ] SSE test failed with RV %d\n", sse_test_result); } else { printd("SSE test succeeded\n"); } printd("Initializing the PIT...\n"); pit_init(); printd("PIT initialized\n"); printd("Initializing the PS/2 keyboard...\n"); keyboard_init(); printd("PS/2 Keyboard initialized\n"); /* printd("Initalizing AHCI...\n"); ahci_init(); printd("AHCI initialized\n"); */ printd("Initializing VFS...\n"); vfs_init(); printd("VFS initialized.\n"); printd("Initializing IDE system...\n"); ide_initialize(); printd("IDE initialized\n"); /*printd("Initializing DuckFS...\n"); duckfs_init(); printd("DuckFS initialized\n");*/ /*printd("Initializing FAT32...\n"); fat32_init(0); printd("FAT32 initialized\n");*/ /* --- END INITIALIZATION SECTION --- */ terminal_setcolor(VGA_COLOR_LIGHT_GREEN); /*pit_sleep(4000); begin_anim(espresso_kernel_version);*/ printf("Creating file via VFS...\n"); FILE file = create_file("test.txt", 't', 'n', -128); printf("file = %d\n", file); char buf[32] = "Hello from VFS"; char bufr[32] = { 0 }; write_file(file, buf, strlen(buf)); read_file(file, bufr, sizeof(bufr)); printf("Read data: %s\n", bufr); /*printf("Creating file...\n"); ramfs_file_header_t* fil = ramfs_create_file("text", "txt", 't', 'n', ramfs_get_root()); if (!fil) { printf("File creation failed!\n"); return; } printf("File created\n"); char buf[32] = "hello from RAMFS"; char bufr[32] = { 0 }; ramfs_write_file(fil, buf, strlen(buf)); ramfs_read_file(fil, bufr, sizeof(bufr)); printf("Read data: %s\n", bufr);*/ printf("Guten tag and welcome to Espresso\n"); while (true) { } }