Added shared/kstdlib.c:mlog and adjacent definitions

This commit is contained in:
notsomeidiot123 2025-04-02 12:47:55 -04:00
parent 79496c1299
commit da1c639f9f
8 changed files with 60 additions and 16 deletions

View File

@ -1,6 +1,7 @@
CC := gcc
AS := nasm
CFLAGS:=-g -c -m32 -fno-pie -mno-sse -O3 -D __bits__=32 -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast -Wno-incompatible-pointer-types -Wno-address-of-packed-member -Wno-discarded-qualifiers -fno-stack-protector -mno-red-zone -mno-sse -mno-sse2 -ffreestanding -nostdlib -mno-mmx
CFLAGS_MODULE:=-g -c -m32 -mno-sse -O3 -D __bits__=32 -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast -Wno-incompatible-pointer-types -Wno-address-of-packed-member -Wno-discarded-qualifiers -fno-stack-protector -mno-red-zone -mno-sse -mno-sse2 -ffreestanding -nostdlib -mno-mmx
BL_ASFLAGS := -f bin
SRCS := $(wildcard src/kernel/*/*.c)
OBJS := $(patsubst src/kernel/%.c, bin/kernel/%.o, $(SRCS))
@ -21,7 +22,7 @@ bootloader:
# kernel: $(OBJS)
kernel:
nasm src/kernel/entry.s -o bin/kernel/entry.o -f elf32
gcc src/kmodules/disk_driver.c $(CFLAGS) -o bin/modules/disk_driver.o -m32
gcc src/kmodules/disk_driver.c $(CFLAGS_MODULE) -o bin/modules/disk_driver.o -m32
sh c_build_helper.sh
nasm src/kernel/arch_i386/idt.s -o bin/kernel/idt.o -felf32
# ld -T linker.ld bin/kernel/entry.o bin/kernel/*.o -melf_i386

View File

@ -353,12 +353,13 @@ part_2:
call open_file
cmp eax, -1
je .start32_no_fs
mov [fs_module_struct.size], edx
mov eax, esi
and edx, 0xfffffc00
add edx, 0x1000
add [kload_paddr], edx
mov edi, edx
mov edi, [kload_paddr]
mov [fs_module_struct.ptr], edi
call read_file

View File

@ -36,6 +36,7 @@ int pm_init(kernel_info_t *kernel_info){
for(uint32_t i = 0; i < mmap_count; i++){
pm_map[i] = 0xff;
}
mlog("KERNEL(MEMORY)", " BASE | LENGTH | TYPE\n", MLOG_PRINT);
for(uint32_t i = 0; i < kernel_info->mmap_entry_count; i++){
for(uint32_t j = 0; j < (mmap[i].entry_length >> 12); j++){
if(mmap[i].entry_base + (j << 12) <= mmap[i-1].entry_base + mmap[i-1].entry_length){
@ -54,9 +55,9 @@ int pm_init(kernel_info_t *kernel_info){
// printf("%d, %x, %d\n", j >> 3, pm_map[(mmap[i].entry_base >> 12 ) + (j >> 3)], mmap[i].type);
// }
}
printf("|%x|", mmap[i].entry_base);
printf("%x", mmap[i].entry_length);
printf("|%d |\n", mmap[i].type);
mlog("KERNEL(MEMORY)", " %x|%x|%d\n", MLOG_PRINT, (uint32_t)mmap[i].entry_base, (uint32_t)mmap[i].entry_length, mmap[i].type);
// printf("%x", mmap[i].entry_length);
// printf("|%d |\n", mmap[i].type);
}
for(uint32_t i = 0; i < 512; i++){
pm_reserve(i * 4096);

View File

@ -43,30 +43,40 @@ void debug_puts(char *string){
outb(com_ports[0], *string++);
}
}
void printf(char *string, ...){
void printf(char *str, ...){
va_list vars;
va_start(vars, string);
va_start(vars, str);
vprintf(str, vars);
va_end(vars);
}
void vprintf(char *string, va_list vars){
while(*string){
if(*string == '%'){
string++;
int32_t num = 0;
char *ptr = 0;
char numb[12];
switch(*(string + 1)){
switch(*string){
case 'd':
string += 2;
string++;
num = va_arg(vars, int32_t);
itoa(num, numb, 10);
debug_puts(numb);
continue;
case 'x':
// debug_puts(":3");
string += 2;
string++;
num = va_arg(vars, int32_t);
// char hnumb[12];
itoa(num, numb, 16);
strpad(numb, '0', 8);
debug_puts(numb);
continue;
case 's':
string++;
ptr = va_arg(vars, char *);
printf(ptr);
}
}
outb(com_ports[0], *string);

View File

@ -1,9 +1,11 @@
#pragma once
#include <stdint.h>
#include <stdarg.h>
void init_serial();
void serial_writeb(uint8_t port, uint8_t data);
void serial_writereg(uint8_t port, uint8_t reg, uint8_t data);
uint8_t serial_readreg(uint8_t port, uint8_t reg);
uint8_t serial_readb(uint8_t port);
void debug_puts(char *string);
void printf(char *string, ...);
void printf(char *string, ...);
void vprintf(char *string, va_list vars);

View File

@ -10,6 +10,10 @@
void pid0(){
for(;;);
}
void sysinit(){
for(;;);
}
extern void kmain(kernel_info_t *kernel_info){
init_serial();
pm_init(kernel_info);
@ -19,12 +23,9 @@ extern void kmain(kernel_info_t *kernel_info){
pic_setmask(0xfe, PIC1_DATA);
//TODO: Map and load filesystem and disk modules
//TODO: Start Initial Process
printf("%x\n", *(uint32_t *)kernel_info->loaded_modules->ptr);
printf("%x", kernel_info->loaded_modules->size);
init_scheduler();
thread_start(pid0);
thread_start(sysinit);
enable_interrupts();
for(;;);
return;

View File

@ -0,0 +1,20 @@
#include "kstdlib.h"
#include <stdarg.h>
char* log_info_types[] = {
"",
":DEBUG",
"",
":WARNING",
":ERROR"
};
void mlog(char *module, char *str, uint32_t type, ...){
va_list vars;
va_start(vars, type);
if(!type || type > 4){
return;
}
printf("[ %s %s]", module, log_info_types[type]);
vprintf(str, vars);
}

View File

@ -1,8 +1,14 @@
#pragma once
// #include "memory.h"
#include "stdint.h"
#include "../drivers/serial.h"
#include "interrupts.h"
#define MLOG_DEBUG 1
#define MLOG_PRINT 2
#define MLOG_WARN 3
#define MLOG_ERR 4
typedef struct module_linked_list{
void *ptr;
uint32_t size;
@ -22,6 +28,8 @@ typedef struct kernel_info{
// uint32_t loaded_module_count;
}__attribute__((packed)) kernel_info_t;
void mlog(char *module, char *str, uint32_t type, ...);
#define MODULE_TYPE_DISK 1
#define MODULE_TYPE_FS 2