From e5d3b460b380eb038f12aff1ba19921fa890332d Mon Sep 17 00:00:00 2001 From: xamidev Date: Fri, 9 Aug 2024 12:55:09 +0200 Subject: [PATCH] Add: cpuid, meminfo, system info; + minor fixes --- com1.out | Bin 180 -> 229 bytes iso/boot/kernel.elf | Bin 30624 -> 30808 bytes src/kernel/kmain.c | 19 ++++++------ src/kernel/loader.s | 3 +- src/kernel/shell.c | 1 + src/kernel/sysinfo.c | 11 +++++++ src/kernel/sysinfo.h | 6 ++++ src/kernel/system.h | 2 ++ src/programs/misc.c | 2 +- src/programs/programs.h | 4 +++ src/programs/sysinfo.c | 64 ++++++++++++++++++++++++++++++++++++++++ 11 files changed, 100 insertions(+), 12 deletions(-) create mode 100644 src/kernel/sysinfo.c create mode 100644 src/kernel/sysinfo.h create mode 100644 src/programs/sysinfo.c diff --git a/com1.out b/com1.out index a2cf745a7865ba5d55bfe36099415cc1da4fe395..66b510031c253d5531b6e03c041e1bea62b56084 100644 GIT binary patch delta 45 zcmdnO_>^(N;)xwRyd{~rsYMDIiFqkGsYMfO#f7p{E0gjQi&7L)iZaVmix{{V0F_P< AUH||9 delta 24 fcmaFLxP@`TV!`axqP)}`h2oOLqLS1U1}+8wczOte diff --git a/iso/boot/kernel.elf b/iso/boot/kernel.elf index 4abba8b26bf7dae3e1c05f7b97c2784000d56b56..4430a0ebf871ff4225e785dabb25db8303d594de 100755 GIT binary patch delta 9297 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 I$y`qV3vx_c?f?J) delta 8721 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 L+O&Uo*wpJE#{Ue$ diff --git a/src/kernel/kmain.c b/src/kernel/kmain.c index c14f6ad..0a9e5be 100644 --- a/src/kernel/kmain.c +++ b/src/kernel/kmain.c @@ -14,9 +14,12 @@ char* ascii_title = " o888ooo888 o888o 88ooo88 8o o888o o888o o888o o888o 88ooo88 o88oooo888\n\n" " --------------------------------- v0.3.45 --------------------------------\n\n"; -int kmain(int retvalue) +unsigned int g_multiboot_info_address; + +void kmain(unsigned int multiboot_info_address) { - + g_multiboot_info_address = multiboot_info_address; + init_serial(); log("serial connection established", 3); gdt_install(); @@ -29,18 +32,14 @@ int kmain(int retvalue) __asm__ __volatile__("sti"); log("initialized IRQs", 2), - log("kernel started", 2); - clear(); - colorputs(ascii_title, 10); colorputs(" by @xamidev - star the repo for a cookie!\n\n", 14); - - // TODO: Grub modules to load programs - + timer_install(); + log("initialized timer handler", 2); keyboard_install(); + log("initialized keyboard driver", 2); shell_install(); - - return retvalue; + log("started system shell", 2); } diff --git a/src/kernel/loader.s b/src/kernel/loader.s index f159209..2459695 100644 --- a/src/kernel/loader.s +++ b/src/kernel/loader.s @@ -19,7 +19,8 @@ extern kmain loader: cli ; mov eax, 0xCAFEBABE - push dword 42 + ; push dword 42 + push ebx call kmain .loop: diff --git a/src/kernel/shell.c b/src/kernel/shell.c index 9b69bfa..e5325ec 100644 --- a/src/kernel/shell.c +++ b/src/kernel/shell.c @@ -64,6 +64,7 @@ void shell_install() register_command("bf", program_bf); register_command("uptime", program_uptime); register_command("echo", program_echo); + register_command("sysinfo", program_sysinfo); for (;;) { diff --git a/src/kernel/sysinfo.c b/src/kernel/sysinfo.c new file mode 100644 index 0000000..b5b7bbe --- /dev/null +++ b/src/kernel/sysinfo.c @@ -0,0 +1,11 @@ +#include "../libc/stdio.h" +#include "../libc/string.h" + +void cpuid(int code, unsigned int* a, unsigned int* d) +{ + asm volatile("cpuid" + : "=a"(*a), "=d"(*d) + : "a"(code) + : "ecx", "ebx"); +} + diff --git a/src/kernel/sysinfo.h b/src/kernel/sysinfo.h new file mode 100644 index 0000000..66188ca --- /dev/null +++ b/src/kernel/sysinfo.h @@ -0,0 +1,6 @@ +#ifndef SYSINFO_H +#define SYSINFO_H + +void cpuid(int code, unsigned int* a, unsigned int* d); + +#endif diff --git a/src/kernel/system.h b/src/kernel/system.h index 0ca520e..a2884c3 100644 --- a/src/kernel/system.h +++ b/src/kernel/system.h @@ -26,5 +26,7 @@ int uptime(); extern volatile unsigned long global_ticks; +extern unsigned int g_multiboot_info_address; + #endif diff --git a/src/programs/misc.c b/src/programs/misc.c index 0fa54ac..7e0f126 100644 --- a/src/programs/misc.c +++ b/src/programs/misc.c @@ -45,7 +45,7 @@ void program_uptime() void program_help() { - printf("help\tpanic\twords\tprimes\trainbow\tclear\nmath\tbf\tuptime\techo\n"); + printf("help\tpanic\twords\tprimes\trainbow\tclear\nmath\tbf\t uptime echo\t sysinfo\n"); } // Panic diff --git a/src/programs/programs.h b/src/programs/programs.h index 66907ae..37ebde2 100644 --- a/src/programs/programs.h +++ b/src/programs/programs.h @@ -5,6 +5,10 @@ void program_words(); void program_primes(); void program_math(); void program_bf(); +void program_sysinfo(); + +void get_cpuid(); +void get_meminfo(unsigned int multiboot_info_address); // Misc void program_rainbow(); diff --git a/src/programs/sysinfo.c b/src/programs/sysinfo.c new file mode 100644 index 0000000..3ef7b45 --- /dev/null +++ b/src/programs/sysinfo.c @@ -0,0 +1,64 @@ + +#include "../kernel/sysinfo.h" +#include "../libc/stdio.h" +#include "../kernel/system.h" + +extern unsigned int multiboot_info_address; + +typedef struct multiboot_memory_map +{ + unsigned int size; + unsigned int base_addr_low; + unsigned int base_addr_high; + unsigned int length_low; + unsigned int length_high; + unsigned int type; +} multiboot_memory_map_t; + +void get_cpuid() +{ + // CPUid + + unsigned int eax, edx; + char vendor[13]; + unsigned int* v = (unsigned int*)vendor; + + asm volatile("cpuid" + : "=b"(v[0]), "=d"(v[1]), "=c"(v[2]) + : "a"(0)); + vendor[12] = '\0'; + + cpuid(1, &eax, &edx); + unsigned int model = (eax >> 4) & 0xF; + unsigned int family = (eax >> 8) & 0xF; + + printf("CPU information\n\tvendor: %s\n\tfamily: %u\n\tmodel: %u\n\tfeatures: 0x%x\n", vendor, family, model, edx); +} + +void get_meminfo(unsigned int multiboot_info_address) +{ + // RAM + + unsigned int mem_lower = *((unsigned int*)(multiboot_info_address + 4)); + unsigned int mem_upper = *((unsigned int*)(multiboot_info_address + 8)); + + printf("RAM information\n\tLower memory: %u KB\n\tUpper memory: %u KB\n", mem_lower, mem_upper); + + multiboot_memory_map_t* mmap = (multiboot_memory_map_t*)*((unsigned int*)(multiboot_info_address + 44)); + printf("\tMemory map:\n"); + + while ((unsigned int)mmap < multiboot_info_address + *((unsigned int*)(multiboot_info_address + 40))) + { + printf("\t\tBase addr: 0x%x%x\n\t\tLength: 0x%x%x\n\t\tType: %u\n", + mmap->base_addr_high, mmap->base_addr_low, + mmap->length_high, mmap->length_low, + mmap->type); + mmap = (multiboot_memory_map_t*)((unsigned int)mmap + mmap->size + sizeof(unsigned int)); + } +} + +void program_sysinfo() +{ + get_cpuid(); + get_meminfo(g_multiboot_info_address); +}