diff options
author | Kartik Agaram <vc@akkartik.com> | 2020-01-01 18:22:19 -0800 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2020-01-01 18:42:48 -0800 |
commit | 65409d2312e702a48d3cf5b32479d25266bda3c3 (patch) | |
tree | 62a7262fce61f2302109246da4536ce6f8e9ef80 /kernel.soso/main.c | |
parent | a6da50ad30d2e1825575ffef497ab450a8f26e94 (diff) | |
download | mu-65409d2312e702a48d3cf5b32479d25266bda3c3.tar.gz |
5858
Move script to create a Soso boot image into a sub-directory. I'm trying to streamline newcomer attention to just a couple of use cases.
Diffstat (limited to 'kernel.soso/main.c')
-rw-r--r-- | kernel.soso/main.c | 214 |
1 files changed, 0 insertions, 214 deletions
diff --git a/kernel.soso/main.c b/kernel.soso/main.c deleted file mode 100644 index cc457469..00000000 --- a/kernel.soso/main.c +++ /dev/null @@ -1,214 +0,0 @@ -#include "screen.h" -#include "descriptortables.h" -#include "timer.h" -#include "multiboot.h" -#include "fs.h" -#include "syscalls.h" -#include "serial.h" -#include "isr.h" -#include "vmm.h" -#include "alloc.h" -#include "process.h" -#include "keyboard.h" -#include "ttydriver.h" -#include "devfs.h" -#include "systemfs.h" -#include "pipe.h" -#include "sharedmemory.h" -#include "random.h" -#include "null.h" -#include "elf.h" -#include "debugprint.h" -#include "ramdisk.h" -#include "fatfilesystem.h" -#include "vbe.h" -#include "fifobuffer.h" -#include "gfx.h" -#include "mouse.h" -#include "sleep.h" - -extern uint32 _start; -extern uint32 _end; -uint32 gPhysicalKernelStartAddress = (uint32)&_start; -uint32 gPhysicalKernelEndAddress = (uint32)&_end; - -static void* locateInitrd(struct Multiboot *mbi, uint32* size) { - if (mbi->mods_count > 0) { - uint32 startLocation = *((uint32*)mbi->mods_addr); - uint32 endLocation = *(uint32*)(mbi->mods_addr + 4); - - *size = endLocation - startLocation; - - return (void*)startLocation; - } - - return NULL; -} - -void printUsageInfo() { - char buffer[164]; - - sprintf(buffer, "Used kheap:%d", getKernelHeapUsed()); - Screen_Print(0, 60, buffer); - - sprintf(buffer, "Pages:%d/%d ", getUsedPageCount(), getTotalPageCount()); - Screen_Print(1, 60, buffer); - - sprintf(buffer, "Uptime:%d sec ", getUptimeSeconds()); - Screen_Print(2, 60, buffer); - - Thread* p = getMainKernelThread(); - - int line = 3; - sprintf(buffer, "[idle] cs:%d ", p->totalContextSwitchCount); - Screen_Print(line++, 60, buffer); - p = p->next; - while (p != NULL) { - sprintf(buffer, "thread:%d cs:%d ", p->threadId, p->totalContextSwitchCount); - - Screen_Print(line++, 60, buffer); - - p = p->next; - } -} - -int executeFile(const char *path, char *const argv[], char *const envp[], FileSystemNode* tty) { - int result = -1; - - Process* process = getCurrentThread()->owner; - if (process) { - FileSystemNode* node = getFileSystemNodeAbsoluteOrRelative(path, process); - if (node) { - File* f = open_fs(node, 0); - if (f) { - void* image = kmalloc(node->length); - - int32 bytesRead = read_fs(f, node->length, image); - - if (bytesRead > 0) { - Process* newProcess = createUserProcessFromElfData("userProcess", image, argv, envp, process, tty); - - if (newProcess) { - result = newProcess->pid; - } - } - close_fs(f); - - kfree(image); - } - - } - } - - return result; -} - -void printAsciiArt() { - printkf(" ________ ________ ________ ________ \n"); - printkf(" |\\ ____\\ |\\ __ \\ |\\ ____\\ |\\ __ \\ \n"); - printkf(" \\ \\ \\___|_ \\ \\ \\|\\ \\ \\ \\ \\___|_ \\ \\ \\|\\ \\ \n"); - printkf(" \\ \\_____ \\ \\ \\ \\\\\\ \\ \\ \\_____ \\ \\ \\ \\\\\\ \\ \n"); - printkf(" \\|____|\\ \\ \\ \\ \\\\\\ \\ \\|____|\\ \\ \\ \\ \\\\\\ \\ \n"); - printkf(" ____\\_\\ \\ \\ \\_______\\ ____\\_\\ \\ \\ \\_______\\\n"); - printkf(" |\\_________\\ \\|_______| |\\_________\\ \\|_______|\n"); - printkf(" \\|_________| \\|_________| \n"); - printkf("\n"); -} - -int kmain(struct Multiboot *mboot_ptr) { - int stack = 5; - - initializeDescriptorTables(); - - initializeSerial(); - - uint32 memoryKb = mboot_ptr->mem_upper;//96*1024; - initializeMemory(memoryKb); - - initializeVFS(); - initializeDevFS(); - - if (MULTIBOOT_FRAMEBUFFER_TYPE_RGB == mboot_ptr->framebuffer_type) { - Gfx_Initialize((uint32*)(uint32)mboot_ptr->framebuffer_addr, mboot_ptr->framebuffer_width, mboot_ptr->framebuffer_height, mboot_ptr->framebuffer_bpp / 32, mboot_ptr->framebuffer_pitch); - - initializeTTYs(TRUE); - } - else { - initializeTTYs(FALSE); - } - //printkf works after TTY initialization - - printAsciiArt(); - - printkf("Lower Memory: %d KB\n", mboot_ptr->mem_lower); - printkf("Upper Memory: %d KB\n", mboot_ptr->mem_upper); - printkf("Memory initialized for %d MB\n", memoryKb / 1024); - printkf("Kernel start: %x - end:%x\n", gPhysicalKernelStartAddress, gPhysicalKernelEndAddress); - printkf("Initial stack: %x\n", &stack); - printkf("Video: %dx%dx%d Pitch:%d\n", mboot_ptr->framebuffer_width, mboot_ptr->framebuffer_height, mboot_ptr->framebuffer_bpp, mboot_ptr->framebuffer_pitch); - - initializeSystemFS(); - initializePipes(); - initializeSharedMemory(); - - initializeTasking(); - - initialiseSyscalls(); - - initializeTimer(); - - initializeKeyboard(); - initializeMouse(); - - if (0 != mboot_ptr->cmdline) { - printkf("Kernel cmdline:%s\n", (char*)mboot_ptr->cmdline); - } - - Debug_initialize("/dev/tty9"); - - Serial_PrintF("pitch:%d\n", mboot_ptr->framebuffer_pitch); - - initializeRandom(); - initializeNull(); - - createRamdisk("ramdisk1", 20*1024*1024); - - initializeFatFileSystem(); - - printkf("System started!\n"); - - char* argv[] = {"shell", NULL}; - char* envp[] = {"HOME=/", "PATH=/initrd", NULL}; - - uint32 initrdSize = 0; - uint8* initrdLocation = locateInitrd(mboot_ptr, &initrdSize); - if (initrdLocation == NULL) { - PANIC("Initrd not found!\n"); - } - else { - printkf("Initrd found at %x (%d bytes)\n", initrdLocation, initrdSize); - memcpy((uint8*)*(uint32*)getFileSystemNode("/dev/ramdisk1")->privateNodeData, initrdLocation, initrdSize); - BOOL mountSuccess = mountFileSystem("/dev/ramdisk1", "/initrd", "fat", 0, 0); - - if (mountSuccess) { - printkf("Starting shell on TTYs\n"); - - executeFile("/initrd/init", argv, envp, getFileSystemNode("/dev/tty1")); - } - else { - printkf("Mounting initrd failed!\n"); - } - } - - enableScheduler(); - - enableInterrupts(); - - while(TRUE) { - //Idle thread - - halt(); - } - - return 0; -} |