From d718561a9c47ba6d4f8ecf61bb6a93876c91940f Mon Sep 17 00:00:00 2001 From: Julian Barathieu Date: Mon, 18 Mar 2019 14:21:00 +0100 Subject: [PATCH 01/28] Terminal stuff --- kaleid/include/base/crtlib.h | 24 ++++++++++++++++++++++++ kaleid/include/kernel/term.h | 5 +++++ kaleid/kernel/io/term.c | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+) diff --git a/kaleid/include/base/crtlib.h b/kaleid/include/base/crtlib.h index 04654af..c74dd3a 100644 --- a/kaleid/include/base/crtlib.h +++ b/kaleid/include/base/crtlib.h @@ -239,6 +239,30 @@ DEC_CTYPE_FUNC(isalnum, (_AL|_DG)); //------------------------------------------// +#ifndef __min_defined +#define __min_defined +static inline int min(int __x, int __y) +{ return __x < __y ? __x : __y; } +#endif + +#ifndef __lmin_defined +#define __lmin_defined +static inline int lmin(long __x, long __y) +{ return __x < __y ? __x : __y; } +#endif + +#ifndef __max_defined +#define __max_defined +static inline int max(int __x, int __y) +{ return __x > __y ? __x : __y; } +#endif + +#ifndef __lmax_defined +#define __lmax_defined +static inline int lmax(long __x, long __y) +{ return __x > __y ? __x : __y; } +#endif + #ifndef __abs_defined #define __abs_defined static inline int abs(int __x) diff --git a/kaleid/include/kernel/term.h b/kaleid/include/kernel/term.h index 29477ee..fcc000b 100644 --- a/kaleid/include/kernel/term.h +++ b/kaleid/include/kernel/term.h @@ -37,6 +37,11 @@ // enum { KTABSIZE = 4 }; +// +// Upper bound on what a single KernLog() can write +// +enum { KLOG_MAX_BUFSIZE = 4096 }; + // // The VGA colors // diff --git a/kaleid/kernel/io/term.c b/kaleid/kernel/io/term.c index 5392b23..618919b 100644 --- a/kaleid/kernel/io/term.c +++ b/kaleid/kernel/io/term.c @@ -116,3 +116,39 @@ error_t PrintOnTerm(Terminal_t *term, const char *str) return retcode; } +// +// Print formatted string on standard output +// Prints at most KLOG_MAX_BUFSIZE characters +// +error_t KernLog(const char *fmt, ...) +{ + va_list ap; + + char logbuf[KLOG_MAX_BUFSIZE]; + + va_start(ap, fmt); + vsnprintf(logbuf, KLOG_MAX_BUFSIZE, fmt, ap); + va_end(ap); + + return PrintOnTerm(stdOut, logbuf); +} + +#ifndef _NO_DEBUG +// +// Print formatted string on debug output +// Prints at most KLOG_MAX_BUFSIZE characters +// +error_t DebugLog(const char *fmt, ...) +{ + va_list ap; + + char logbuf[KLOG_MAX_BUFSIZE]; + + va_start(ap, fmt); + vsnprintf(logbuf, KLOG_MAX_BUFSIZE, fmt, ap); + va_end(ap); + + return PrintOnTerm(stdDbg, logbuf); +} +#endif + From 8c4a96a9f61eb762526a1fb902000cf4a62000b1 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Mon, 18 Mar 2019 14:27:34 +0100 Subject: [PATCH 02/28] ooops --- boot/loader/io/terminal.inc | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/boot/loader/io/terminal.inc b/boot/loader/io/terminal.inc index 50b4175..0a6e89a 100644 --- a/boot/loader/io/terminal.inc +++ b/boot/loader/io/terminal.inc @@ -28,7 +28,6 @@ ;;VIDEO %define TRAM 0xB8000 ; [T]ext[RAM] -%define VRAM 0xA0000 ; [V]ideo[RAM] %define VGA_HEIGHT 80 ;; GLOBAL DATA @@ -38,19 +37,6 @@ VGA_X32 dq 0 VGA_HEIGHT64 dq VGA_HEIGHT VGA_X dq 0 - -testf: - push rsi - push rbx - mov esi, teststr - mov bl, 0xF - call write - pop rsi - pop rbx - ret -teststr: db "Salut",0 - - ;-----------------------------------------------------------------------; ; x64/LM Clear Text Screen Function ; ;-----------------------------------------------------------------------; From 5b585e5b70a9489cc5af4e14fc05ff8f51d9f9a0 Mon Sep 17 00:00:00 2001 From: Julian Barathieu Date: Mon, 18 Mar 2019 17:25:44 +0100 Subject: [PATCH 03/28] Heap & memory allocation stuff --- Makefile | 19 +++-- ProjectTree | 13 ++- kaleid/crtlib/{memory.c => mem.c} | 22 +++++ kaleid/extras/prog.c | 10 +-- kaleid/include/base/bdefs.h | 13 +++ kaleid/include/base/crtlib.h | 7 +- kaleid/include/base/errno.h | 39 ++++----- kaleid/include/extras/malloc.h | 36 ++++++--- kaleid/include/extras/prog.h | 4 +- kaleid/include/kernel/base.h | 1 - kaleid/include/kernel/cpu.h | 13 +++ kaleid/include/kernel/heap.h | 58 ++++++++++++++ kaleid/include/kernel/iomisc.h | 1 - kaleid/include/kernel/mm.h | 1 + kaleid/kernel/init/init.c | 10 +-- kaleid/kernel/io/term.c | 18 ++--- kaleid/kernel/io/vga.c | 6 +- kaleid/kernel/ke/panic.c | 8 +- kaleid/kernel/mm/.placeholder | 0 kaleid/kernel/mm/heap.c | 129 ++++++++++++++++++++++++++++++ kaleid/kernel/mm/malloc.c | 70 ++++++++++++++++ 21 files changed, 411 insertions(+), 67 deletions(-) rename kaleid/crtlib/{memory.c => mem.c} (94%) create mode 100644 kaleid/include/kernel/heap.h delete mode 100644 kaleid/kernel/mm/.placeholder create mode 100644 kaleid/kernel/mm/heap.c create mode 100644 kaleid/kernel/mm/malloc.c diff --git a/Makefile b/Makefile index eddffe6..c224923 100644 --- a/Makefile +++ b/Makefile @@ -32,11 +32,11 @@ CCNAME=x86_64-elf-gcc ASMFLAGS=-f elf64 LDFLAGS=-melf_x86_64 COPTIM=-O2 -CWARNS=-Wall -Wextra # -Werror=implicit-function-declaration +CWARNS=-Wall -Wextra -Werror=implicit-function-declaration CINCLUDES=-Ikaleid/include -CFLAGS1=-nostdlib -ffreestanding -mcmodel=large # -std=gnu11 +CFLAGS1=-nostdlib -ffreestanding -mcmodel=large -std=gnu11 CFLAGS2= -c -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -fno-strict-aliasing -CFLAGS=$(CFLAGS1) $(CFLAGS2) -DNDEBUG +CFLAGS=$(CFLAGS1) $(CFLAGS2) KCC=$(CCNAME) $(COPTIM) $(CWARNS) $(CFLAGS) $(CINCLUDES) -D_OSK_SOURCE -D_KALEID_KERNEL #Folders @@ -62,7 +62,7 @@ all : OS/K # Common objects kal_com_obj= $(KOBJDIR)/atoi.o $(KOBJDIR)/ctype.o \ - $(KOBJDIR)/itoa.o $(KOBJDIR)/memory.o \ + $(KOBJDIR)/itoa.o $(KOBJDIR)/mem.o \ $(KOBJDIR)/rand.o $(KOBJDIR)/sprintf.o \ $(KOBJDIR)/status.o $(KOBJDIR)/string.o \ $(KOBJDIR)/strtol.o $(KOBJDIR)/argv.o \ @@ -98,7 +98,7 @@ $(KOBJDIR)/utoa.o: $(KERNELDIR)/crtlib/itoa.c $(KOBJDIR)/ultoa.o: $(KERNELDIR)/crtlib/itoa.c @$(KCC) -D_NEED_ULTOA $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/memory.o: $(KERNELDIR)/crtlib/memory.c +$(KOBJDIR)/mem.o: $(KERNELDIR)/crtlib/mem.c @$(KCC) -fno-strict-aliasing $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} $(KOBJDIR)/rand.o: $(KERNELDIR)/crtlib/rand.c @@ -127,7 +127,8 @@ $(KOBJDIR)/prog.o: $(KERNELDIR)/extras/prog.c kal_kern_obj= $(KOBJDIR)/kernel/cpuid.o $(KOBJDIR)/kernel/init.o \ $(KOBJDIR)/kernel/table.o $(KOBJDIR)/kernel/cursor.o \ $(KOBJDIR)/kernel/term.o $(KOBJDIR)/kernel/vga.o \ - $(KOBJDIR)/kernel/panic.o + $(KOBJDIR)/kernel/panic.o $(KOBJDIR)/kernel/heap.o \ + $(KOBJDIR)/kernel/malloc.o $(KOBJDIR)/kernel/cpuid.o: $(KERNELDIR)/kernel/cpu/cpuid.c @$(KCC) $< -o $@ @@ -150,6 +151,12 @@ $(KOBJDIR)/kernel/vga.o: $(KERNELDIR)/kernel/io/vga.c $(KOBJDIR)/kernel/panic.o: $(KERNELDIR)/kernel/ke/panic.c @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} +$(KOBJDIR)/kernel/heap.o: $(KERNELDIR)/kernel/mm/heap.c + @$(KCC) $< -o $@ + @echo ${CL2}[$@] ${CL}Compiled.${CL3} +$(KOBJDIR)/kernel/malloc.o: $(KERNELDIR)/kernel/mm/malloc.c + @$(KCC) $< -o $@ + @echo ${CL2}[$@] ${CL}Compiled.${CL3} ## MISC MAKEFILE ------------------------------------------------------------- # ./ProjectTree: ./.stylehlp_sh diff --git a/ProjectTree b/ProjectTree index 134aab8..954b888 100644 --- a/ProjectTree +++ b/ProjectTree @@ -62,11 +62,14 @@ │   ├── atol.o │   ├── atoul.o │   ├── atou.o +│   ├── crtlib │   ├── ctype.o +│   ├── extras │   ├── itoa.o │   ├── kernel │   │   ├── cpuid.o │   │   ├── cursor.o +│   │   ├── heap.o │   │   ├── init │   │   │   ├── init.o │   │   │   └── table.o @@ -77,12 +80,13 @@ │   │   │   └── vga.o │   │   ├── ke │   │   │   └── panic.o +│   │   ├── malloc.o │   │   ├── panic.o │   │   ├── table.o │   │   ├── term.o │   │   └── vga.o │   ├── ltoa.o -│   ├── memory.o +│   ├── mem.o │   ├── prog.o │   ├── rand.o │   ├── sprintf.o @@ -99,7 +103,7 @@ │   │   ├── atoi.c │   │   ├── ctype.c │   │   ├── itoa.c -│   │   ├── memory.c +│   │   ├── mem.c │   │   ├── rand.c │   │   ├── sprintf.c │   │   ├── status.c @@ -129,6 +133,7 @@ │   │   ├── kernel │   │   │   ├── base.h │   │   │   ├── cpu.h +│   │   │   ├── heap.h │   │   │   ├── iomisc.h │   │   │   ├── mm.h │   │   │   ├── panic.h @@ -151,6 +156,8 @@ │   ├── ke │   │   └── panic.c │   ├── mm +│   │   ├── heap.c +│   │   └── malloc.c │   └── proc │   ├── Makefile │   └── sched.c @@ -161,4 +168,4 @@ ├── qemu.log └── Readme.md -31 directories, 105 files +33 directories, 110 files diff --git a/kaleid/crtlib/memory.c b/kaleid/crtlib/mem.c similarity index 94% rename from kaleid/crtlib/memory.c rename to kaleid/crtlib/mem.c index 16230a2..7d03682 100644 --- a/kaleid/crtlib/memory.c +++ b/kaleid/crtlib/mem.c @@ -23,9 +23,31 @@ //----------------------------------------------------------------------------// #include +#include /* DO NOT compile with strict aliasing on */ +//------------------------------------------// +// Memory allocation // +//------------------------------------------// + +void *malloc(size_t n) +{ + void *ptr; + error_t rc; + + rc = KalAllocMemory(&ptr, n, 0, 0); + __set_errno(rc); + + return ptr; +} + +void free(void *ptr) +{ + error_t rc = KalFreeMemory(ptr); + (void)rc; +} + //------------------------------------------// // memset() family // //------------------------------------------// diff --git a/kaleid/extras/prog.c b/kaleid/extras/prog.c index 77dfbbc..fb467f8 100644 --- a/kaleid/extras/prog.c +++ b/kaleid/extras/prog.c @@ -47,17 +47,15 @@ const char *KalGetProgVersion(void) return __progvers; } -bool KalSetProgVers(const char *vers) +error_t KalSetProgVers(const char *vers) { (void)vers; - __set_errno(ENOSYS); - return false; + return ENOSYS; } -bool KalSetProgName(const char *name) +error_t KalSetProgName(const char *name) { (void)name; - __set_errno(ENOSYS); - return false; + return ENOSYS; } diff --git a/kaleid/include/base/bdefs.h b/kaleid/include/base/bdefs.h index 0229f41..8a33b9e 100644 --- a/kaleid/include/base/bdefs.h +++ b/kaleid/include/base/bdefs.h @@ -45,6 +45,19 @@ //------------------------------------------// +#ifndef _NO_UNITS +#define KB (1UL << 10) +#define MB (1UL << 20) +#define GB (1UL << 30) +#define TB (1UL << 40) +#endif + +#ifndef _ALIGN_UP +#define _ALIGN_UP(x, s) (((x) + (s) - 1) & (~((s) - 1))) +#endif + +//------------------------------------------// + #ifndef __BEGIN_DECLS #ifdef __cpluplus # define __EXTERN_C extern "C" diff --git a/kaleid/include/base/crtlib.h b/kaleid/include/base/crtlib.h index c74dd3a..9aa697d 100644 --- a/kaleid/include/base/crtlib.h +++ b/kaleid/include/base/crtlib.h @@ -66,7 +66,7 @@ extern error_t __errno; #define errno __errno #endif -#define __get_errno(x) error_t x = errno; +#define __get_errno(x) error_t x = errno #define __set_errno(x) (errno = (x)) #else @@ -183,6 +183,11 @@ unsigned long strtoul(const char *restrict, char **restrict, int); //------------------------------------------// +void *malloc(size_t) __attribute__((__malloc__)); +void free(void *); + +//------------------------------------------// + int rand(void); void srand(unsigned int); diff --git a/kaleid/include/base/errno.h b/kaleid/include/base/errno.h index 8b43d46..d063504 100644 --- a/kaleid/include/base/errno.h +++ b/kaleid/include/base/errno.h @@ -28,52 +28,55 @@ //------------------------------------------// // Everything went fine -#define EOK 0 +#define EOK 0 // Operation not permitted -#define EPERM 1 +#define EPERM 1 // No such file or directory -#define ENOENT 2 +#define ENOENT 2 // No such process -#define ESRCH 3 +#define ESRCH 3 // Syscall interrupted (e.g. by signal) -#define EINTR 4 +#define EINTR 4 // I/0 error -#define EIO 5 +#define EIO 5 // No such device or address -#define ENXIO 6 +#define ENXIO 6 // Argument list too long -#define E2BIG 7 +#define E2BIG 7 // Not an executable format -#define ENOEXEC 8 +#define ENOEXEC 8 // Bad file number -#define EBADF 9 +#define EBADF 9 // Try again -#define EAGAIN 11 +#define EAGAIN 11 // Out of memory -#define ENOMEM 12 +#define ENOMEM 12 // Invalid argument -#define EINVAL 22 +#define EINVAL 22 // Functionality not implemented -#define ENOSYS 38 +#define ENOSYS 38 -// Component crashed -#define ECRASH 500 +// Address already in use +#define EADDRINUSE 98 -// System is panicking -#define EPANIC 600 +// Failure (unspecified reason) +#define EFAILED 256 + +// Alignment error +#define EALIGN 257 //------------------------------------------// diff --git a/kaleid/include/extras/malloc.h b/kaleid/include/extras/malloc.h index 4e2d30a..6c478c9 100644 --- a/kaleid/include/extras/malloc.h +++ b/kaleid/include/extras/malloc.h @@ -35,16 +35,34 @@ extern "C" { //------------------------------------------// -// -// ¯\_(ツ)_/¯ -// -#ifndef _STDLIB_H -void *malloc(unsigned long); -void free(void *); -#endif +// Flags for KalAllocMemory +enum +{ + // Return zeroed-out memory + M_ZEROED = 1, -#define KalAllocMemory malloc -#define KalFreeMemory free + // Crash if allocation fails (ENABLED by default in the kernel) + M_FAILCRASH = 2, + + // Do NOT crash if allocation failed (meaningless outside of the kernel) + M_CANFAIL = 4, +}; + +enum +{ + // Default memory allocation alignment (in bytes) + // Asking KalAllocMemory for an alignment of 0 + // will cause it to use this value + M_DEFAULT_ALIGNMENT = alignof(QWORD), + + // Minimal memory allocation alignment (in bytes) + // Asking KalAllocMemory for an nonzero alignment + // lower than this value will cause a EALIGN error + M_MINIMAL_ALIGNMENT = M_DEFAULT_ALIGNMENT +}; + +error_t KalAllocMemory(void **ptr, size_t req, int flags, size_t align); +error_t KalFreeMemory(void *ptr); //------------------------------------------// diff --git a/kaleid/include/extras/prog.h b/kaleid/include/extras/prog.h index 9d7cfa0..3af6461 100644 --- a/kaleid/include/extras/prog.h +++ b/kaleid/include/extras/prog.h @@ -43,8 +43,8 @@ extern const char *__progvers; const char *KalGetProgName(void); const char *KalGetProgVersion(void); -bool KalSetProgVers(const char *); -bool KalSetProgName(const char *); +error_t KalSetProgVers(const char *); +error_t KalSetProgName(const char *); //------------------------------------------// diff --git a/kaleid/include/kernel/base.h b/kaleid/include/kernel/base.h index cb5a160..f951a42 100644 --- a/kaleid/include/kernel/base.h +++ b/kaleid/include/kernel/base.h @@ -45,7 +45,6 @@ typedef struct Processor_t Processor_t; typedef enum ProcState_t ProcState_t; typedef enum TermColor_t TermColor_t; -typedef enum KernelState_t KernelState_t; //------------------------------------------// // Multiprocessor misc. // diff --git a/kaleid/include/kernel/cpu.h b/kaleid/include/kernel/cpu.h index f347d99..ebb5268 100644 --- a/kaleid/include/kernel/cpu.h +++ b/kaleid/include/kernel/cpu.h @@ -22,8 +22,21 @@ // along with OS/K. If not, see . // //----------------------------------------------------------------------------// +#ifndef _KALKERN_BASE_H +#include +#endif + +#ifndef _KALKERN_CPU_H +#define _KALKERN_CPU_H + +//------------------------------------------// + #define cpuid(in, a, b, c, d) asm("cpuid" \ : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \ : "a" (in) \ ); +//------------------------------------------// + +#endif + diff --git a/kaleid/include/kernel/heap.h b/kaleid/include/kernel/heap.h new file mode 100644 index 0000000..9f9729b --- /dev/null +++ b/kaleid/include/kernel/heap.h @@ -0,0 +1,58 @@ +//----------------------------------------------------------------------------// +// GNU GPL OS/K // +// // +// Desc: Memory related functions // +// // +// // +// Copyright © 2018-2019 The OS/K Team // +// // +// This file is part of OS/K. // +// // +// OS/K is free software: you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation, either version 3 of the License, or // +// any later version. // +// // +// OS/K is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY//without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with OS/K. If not, see . // +//----------------------------------------------------------------------------// + +#ifndef _KALKERN_BASE_H +#include +#endif + +#ifndef _KALKERN_MM_H +#define _KALKERN_MM_H + +//------------------------------------------// + +void *GetMemoryMap(void); + +size_t GetMemorySize(void); +size_t GetAvailZoneSize(void *); + +//------------------------------------------// + +#define _HEAP_START (4 * MB) + +void InitHeap(void); + +void LockHeap(void); +void UnlockHeap(void); + +size_t GetHeapSize(void); +size_t GetMaxHeapSize(void); +error_t SetMaxHeapSize(size_t); + +error_t GrowHeap(size_t); +error_t ShrinkHeap(size_t); + +//------------------------------------------// + +#endif + diff --git a/kaleid/include/kernel/iomisc.h b/kaleid/include/kernel/iomisc.h index a07723d..615875d 100644 --- a/kaleid/include/kernel/iomisc.h +++ b/kaleid/include/kernel/iomisc.h @@ -22,7 +22,6 @@ // along with OS/K. If not, see . // //----------------------------------------------------------------------------// - #ifndef _KALKERN_BASE_H #include #endif diff --git a/kaleid/include/kernel/mm.h b/kaleid/include/kernel/mm.h index 95971fe..b015971 100644 --- a/kaleid/include/kernel/mm.h +++ b/kaleid/include/kernel/mm.h @@ -21,3 +21,4 @@ // You should have received a copy of the GNU General Public License // // along with OS/K. If not, see . // //----------------------------------------------------------------------------// + diff --git a/kaleid/kernel/init/init.c b/kaleid/kernel/init/init.c index ef857cf..8fef98b 100644 --- a/kaleid/kernel/init/init.c +++ b/kaleid/kernel/init/init.c @@ -21,13 +21,11 @@ // You should have received a copy of the GNU General Public License // // along with OS/K. If not, see . // //----------------------------------------------------------------------------// + #include #include #include - -extern void testf(void); - // // Entry point of the Kaleid kernel // @@ -39,8 +37,7 @@ noreturn void StartKern(multiboot_info_t *mbInfo, int mbMagic) // Kernel terminals InitTerms(); - // We're out - StartPanic( "We were loaded by : %s\n\n\n" + KernLog( "We were loaded by : %s\n\n" "We get\n" " *mbInfo : %p\n" " mbMagic : %x\n" @@ -56,4 +53,7 @@ noreturn void StartKern(multiboot_info_t *mbInfo, int mbMagic) mbInfo->mmap_addr, mbInfo->mmap_length ); + + // Get out + CrashSystem(); } diff --git a/kaleid/kernel/io/term.c b/kaleid/kernel/io/term.c index 618919b..ce34545 100644 --- a/kaleid/kernel/io/term.c +++ b/kaleid/kernel/io/term.c @@ -28,7 +28,7 @@ extern void VGA_Init(void); extern Terminal_t VGA_Terminal; // -// Initialize standard output +// Initializes standard output // void InitTerms(void) { @@ -43,7 +43,7 @@ void InitTerms(void) } // -// Fill terminal with spaces +// Fills terminal with spaces // error_t ClearTerm(Terminal_t *term) { @@ -60,7 +60,7 @@ error_t ClearTerm(Terminal_t *term) } // -// Change the color code +// Changes the color code // error_t ChTermColor(Terminal_t *term, TermColor_t fgColor, TermColor_t bgColor) { @@ -81,7 +81,7 @@ error_t ChTermColor(Terminal_t *term, TermColor_t fgColor, TermColor_t bgColor) } // -// Write a single character on the terminal +// Writes a single character on the terminal // error_t PutOnTerm(Terminal_t *term, char ch) { @@ -98,7 +98,7 @@ error_t PutOnTerm(Terminal_t *term, char ch) } // -// Print string on terminal +// Prints string on terminal // error_t PrintOnTerm(Terminal_t *term, const char *str) { @@ -117,7 +117,7 @@ error_t PrintOnTerm(Terminal_t *term, const char *str) } // -// Print formatted string on standard output +// Prints formatted string on standard output // Prints at most KLOG_MAX_BUFSIZE characters // error_t KernLog(const char *fmt, ...) @@ -130,12 +130,12 @@ error_t KernLog(const char *fmt, ...) vsnprintf(logbuf, KLOG_MAX_BUFSIZE, fmt, ap); va_end(ap); - return PrintOnTerm(stdOut, logbuf); + return PrintOnTerm(GetStdOut(), logbuf); } #ifndef _NO_DEBUG // -// Print formatted string on debug output +// Prints formatted string on debug output // Prints at most KLOG_MAX_BUFSIZE characters // error_t DebugLog(const char *fmt, ...) @@ -148,7 +148,7 @@ error_t DebugLog(const char *fmt, ...) vsnprintf(logbuf, KLOG_MAX_BUFSIZE, fmt, ap); va_end(ap); - return PrintOnTerm(stdDbg, logbuf); + return PrintOnTerm(GetStdDbg(), logbuf); } #endif diff --git a/kaleid/kernel/io/vga.c b/kaleid/kernel/io/vga.c index 9a75cdb..de00c35 100644 --- a/kaleid/kernel/io/vga.c +++ b/kaleid/kernel/io/vga.c @@ -37,7 +37,7 @@ #define VGA_ComputeEntry(ch, cl) (((ushort)(ch)) | (ushort)(cl) << 8) // -// Clear terminal +// Clears terminal // error_t VGA_ClearTermUnlocked(Terminal_t *term) { @@ -55,7 +55,7 @@ error_t VGA_ClearTermUnlocked(Terminal_t *term) } // -// Write a single character on the terminal +// Writes a single character on the terminal // error_t VGA_PutOnTermUnlocked(Terminal_t *term, char ch) { @@ -106,7 +106,7 @@ error_t VGA_PutOnTermUnlocked(Terminal_t *term, char ch) } // -// Print string on terminal +// Prints string on terminal // error_t VGA_PrintOnTermUnlocked(Terminal_t *term, const char *str) { diff --git a/kaleid/kernel/ke/panic.c b/kaleid/kernel/ke/panic.c index c799d19..def362c 100644 --- a/kaleid/kernel/ke/panic.c +++ b/kaleid/kernel/ke/panic.c @@ -37,7 +37,7 @@ noreturn void __assert_handler(const char *msg, (void)file; (void)line; (void)func; - StartPanic("cpu%d: In function '%s', from %s line %s - assert() failed: '%s'", + StartPanic("cpu%d: In function '%s', from %s line %d - assert() failed: '%s'", _GetCurCPU(), func, file, line, msg); } @@ -80,7 +80,9 @@ noreturn void StartPanic(const char *fmt, ...) // noreturn void CrashSystem(void) { - DisableIRQs(); - HaltCPU(); + while (1) { + DisableIRQs(); + HaltCPU(); + } } diff --git a/kaleid/kernel/mm/.placeholder b/kaleid/kernel/mm/.placeholder deleted file mode 100644 index e69de29..0000000 diff --git a/kaleid/kernel/mm/heap.c b/kaleid/kernel/mm/heap.c new file mode 100644 index 0000000..dd3d18c --- /dev/null +++ b/kaleid/kernel/mm/heap.c @@ -0,0 +1,129 @@ +//----------------------------------------------------------------------------// +// GNU GPL OS/K // +// // +// Desc: Early and very dumb heap managment // +// // +// // +// Copyright © 2018-2019 The OS/K Team // +// // +// This file is part of OS/K. // +// // +// OS/K is free software: you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation, either version 3 of the License, or // +// any later version. // +// // +// OS/K is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY//without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with OS/K. If not, see . // +//----------------------------------------------------------------------------// + +#include + +// Least address out of the heap +static void *_heap_end; + +// Maximal value of the heap +static size_t _heap_max; + +// Lock NOT used internally, but used by KalAllocMemory() & co. +static Lock_t _heap_lock = INITLOCK(KLOCK_SPINLOCK); + +// Debugging stub +size_t GetAvailZoneSize(void *x) { (void)x; return 8 * MB; } + +// +// Initializes heap managment +// +void InitHeap(void) +{ + assert(_heap_end == NULL); + _heap_end = (void *)_HEAP_START; + _heap_max = lmin(8 * MB, GetAvailZoneSize((void *)_HEAP_START)); +} + +// +// Aquires control of the heap's lock +// +void LockHeap(void) +{ + AquireLock(&_heap_lock); +} + +// +// Releases control of the heap's lock +// +void UnlockHeap(void) +{ + ReleaseLock(&_heap_lock); +} + +// +// Returns the heap's current size +// +size_t GetHeapSize(void) +{ + return (size_t)_heap_end - _HEAP_START; +} + +// +// Returns the heap's maximum size +// +size_t GetMaxHeapSize(void) +{ + return _heap_max; +} + +// +// Changes the heap's maximal size +// +error_t SetMaxHeapSize(size_t new) +{ + if (new > GetAvailZoneSize((void *)_HEAP_START)) { + return ENOMEM; + } + + if (new < (size_t)_heap_end - _HEAP_START) { + return EADDRINUSE; + } + + _heap_max = new; + + return EOK; +} + +// +// Extends the heap's size +// +error_t GrowHeap(size_t req) +{ + assert(req % alignof(QWORD)); + + if ((size_t)_heap_end + req > _HEAP_START + _heap_max) { + return ENOMEM; + } + + _heap_end += req; + + return EOK; +} + +// +// Reduces the heap's size +// +error_t ShrinkHeap(size_t req) +{ + assert(req % alignof(QWORD)); + + if (req > (size_t)_heap_end - _HEAP_START) { + return EADDRINUSE; + } + + _heap_end -= req; + + return EOK; +} diff --git a/kaleid/kernel/mm/malloc.c b/kaleid/kernel/mm/malloc.c new file mode 100644 index 0000000..e46e94c --- /dev/null +++ b/kaleid/kernel/mm/malloc.c @@ -0,0 +1,70 @@ +//----------------------------------------------------------------------------// +// GNU GPL OS/K // +// // +// Desc: Early and very dumb memory managment // +// // +// // +// Copyright © 2018-2019 The OS/K Team // +// // +// This file is part of OS/K. // +// // +// OS/K is free software: you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation, either version 3 of the License, or // +// any later version. // +// // +// OS/K is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY//without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with OS/K. If not, see . // +//----------------------------------------------------------------------------// + +#include +#include + +error_t KalAllocMemory(void **ptr, size_t req, int flags, size_t align) +{ + error_t rc; + size_t brk; + + if (align == 0) align = M_DEFAULT_ALIGNMENT; + + if (align < M_MINIMAL_ALIGNMENT) { + return EALIGN; + } + + LockHeap(); + + brk = _HEAP_START + GetHeapSize(); + req = _ALIGN_UP(req + brk, align) - brk; + + rc = GrowHeap(req); + + UnlockHeap(); + + if (rc) { + if ((flags & M_CANFAIL) == 0) + return rc; + StartPanic("Out of memory"); + } + + if (flags & M_ZEROED) { + memzero(*ptr, req); + } + + *ptr = (void *)brk; + + return rc; +} + +// +// Frees allocated memory +// +error_t KalFreeMemory(void *ptr) +{ + (void)ptr; +} + From 918c4f1b2e3fea6dc419ef6edf9772d8711d95ae Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Mon, 18 Mar 2019 17:43:41 +0100 Subject: [PATCH 04/28] Memory struct --- Makefile | 11 +++++++---- kaleid/include/kernel/base.h | 9 ++++++++- kaleid/include/kernel/mm.h | 17 +++++++++++++++++ kaleid/kernel/init/init.c | 29 +++++++++-------------------- kaleid/kernel/init/table.c | 2 ++ kaleid/kernel/mm/.placeholder | 0 6 files changed, 43 insertions(+), 25 deletions(-) delete mode 100644 kaleid/kernel/mm/.placeholder diff --git a/Makefile b/Makefile index eddffe6..7b7667c 100644 --- a/Makefile +++ b/Makefile @@ -124,10 +124,10 @@ $(KOBJDIR)/prog.o: $(KERNELDIR)/extras/prog.c @echo ${CL2}[$@] ${CL}Compiled.${CL3} # Kernel objects -kal_kern_obj= $(KOBJDIR)/kernel/cpuid.o $(KOBJDIR)/kernel/init.o \ - $(KOBJDIR)/kernel/table.o $(KOBJDIR)/kernel/cursor.o \ - $(KOBJDIR)/kernel/term.o $(KOBJDIR)/kernel/vga.o \ - $(KOBJDIR)/kernel/panic.o +kal_kern_obj= $(KOBJDIR)/kernel/cpuid.o $(KOBJDIR)/kernel/init.o \ + $(KOBJDIR)/kernel/table.o $(KOBJDIR)/kernel/cursor.o \ + $(KOBJDIR)/kernel/term.o $(KOBJDIR)/kernel/vga.o \ + $(KOBJDIR)/kernel/panic.o $(KOBJDIR)/kernel/map.o \ $(KOBJDIR)/kernel/cpuid.o: $(KERNELDIR)/kernel/cpu/cpuid.c @$(KCC) $< -o $@ @@ -150,6 +150,9 @@ $(KOBJDIR)/kernel/vga.o: $(KERNELDIR)/kernel/io/vga.c $(KOBJDIR)/kernel/panic.o: $(KERNELDIR)/kernel/ke/panic.c @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} +$(KOBJDIR)/kernel/map.o: $(KERNELDIR)/kernel/mm/map.c + @$(KCC) $< -o $@ + @echo ${CL2}[$@] ${CL}Compiled.${CL3} ## MISC MAKEFILE ------------------------------------------------------------- # ./ProjectTree: ./.stylehlp_sh diff --git a/kaleid/include/kernel/base.h b/kaleid/include/kernel/base.h index cb5a160..81b9947 100644 --- a/kaleid/include/kernel/base.h +++ b/kaleid/include/kernel/base.h @@ -42,6 +42,7 @@ typedef struct Terminal_t Terminal_t; typedef struct ListHead_t ListHead_t; typedef struct ListNode_t ListNode_t; typedef struct Processor_t Processor_t; +typedef struct MemoryMap_t MemoryMap_t; typedef enum ProcState_t ProcState_t; typedef enum TermColor_t TermColor_t; @@ -96,11 +97,17 @@ struct Processor_t ListHead_t *timeCritProcs; }; +struct MemoryMap_t +{ + void *addr; + int length; +}; + //------------------------------------------// extern int cpuCount; extern Processor_t cpuTable[NCPUS]; - +extern MemoryMap_t memTab; //------------------------------------------// #define DEC_PER_CPU(name, field, type) \ diff --git a/kaleid/include/kernel/mm.h b/kaleid/include/kernel/mm.h index 95971fe..e7fe5ff 100644 --- a/kaleid/include/kernel/mm.h +++ b/kaleid/include/kernel/mm.h @@ -21,3 +21,20 @@ // You should have received a copy of the GNU General Public License // // along with OS/K. If not, see . // //----------------------------------------------------------------------------// + +#include +#include + +#define GetCurMemMap() (memTab) + +// +// Returns a pointer to the first entry of the memory map +// +multiboot_memory_map_t *GetMemoryMap(void); + +// +// Initializes the memory map structure +// +void InitMemoryMap(multiboot_info_t *mbInfo); + +// -------------------------------------------------------------------------- // diff --git a/kaleid/kernel/init/init.c b/kaleid/kernel/init/init.c index ef857cf..9cdddf1 100644 --- a/kaleid/kernel/init/init.c +++ b/kaleid/kernel/init/init.c @@ -24,9 +24,7 @@ #include #include #include - - -extern void testf(void); +#include // // Entry point of the Kaleid kernel @@ -39,21 +37,12 @@ noreturn void StartKern(multiboot_info_t *mbInfo, int mbMagic) // Kernel terminals InitTerms(); - // We're out - StartPanic( "We were loaded by : %s\n\n\n" - "We get\n" - " *mbInfo : %p\n" - " mbMagic : %x\n" - " mbBootdrv : %x\n" - " *mbMmap : %p\n" - " `-length : %d\n" - "\nGoodbye World :(", + //Memory mapping + InitMemoryMap(mbInfo); - mbInfo->boot_loader_name, - mbInfo, - mbMagic, - mbInfo->boot_device, - mbInfo->mmap_addr, - mbInfo->mmap_length - ); -} + KernLog("InitMemoryMap : %p, %x\n", GetCurMemMap().addr, GetCurMemMap().length ); + + // We're out + KernLog("Yup, we have magic : %x", mbMagic); + CrashSystem(); //yay +} diff --git a/kaleid/kernel/init/table.c b/kaleid/kernel/init/table.c index 7a51088..5bf80d8 100644 --- a/kaleid/kernel/init/table.c +++ b/kaleid/kernel/init/table.c @@ -27,5 +27,7 @@ int cpuCount = 1; Processor_t cpuTable[NCPUS] = {0}; +MemoryMap_t memTab = {0}; + Terminal_t *stdOut = 0, *stdDbg = 0; diff --git a/kaleid/kernel/mm/.placeholder b/kaleid/kernel/mm/.placeholder deleted file mode 100644 index e69de29..0000000 From e7909bcdf785b96054967a9e26c55a9a0baac9de Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Mon, 18 Mar 2019 17:43:54 +0100 Subject: [PATCH 05/28] Memory struct --- kaleid/kernel/mm/map.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 kaleid/kernel/mm/map.c diff --git a/kaleid/kernel/mm/map.c b/kaleid/kernel/mm/map.c new file mode 100644 index 0000000..c9d05b8 --- /dev/null +++ b/kaleid/kernel/mm/map.c @@ -0,0 +1,37 @@ +//----------------------------------------------------------------------------// +// GNU GPL OS/K // +// // +// Desc: // +// // +// // +// Copyright © 2018-2019 The OS/K Team // +// // +// This file is part of OS/K. // +// // +// OS/K is free software: you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation, either version 3 of the License, or // +// any later version. // +// // +// OS/K is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY//without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with OS/K. If not, see . // +//----------------------------------------------------------------------------// + +#include +#include + +void InitMemoryMap(multiboot_info_t *mbInfo) +{ + memTab.addr = (void*)mbInfo->mmap_addr; + memTab.length = (int)mbInfo->mmap_length; +} + +multiboot_memory_map_t *GetMemoryMap(void) +{ + return (void*)GetCurMemMap().addr; +} From 78e72e6c8aa848d0609c410dc0773a80b6f59106 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Mon, 18 Mar 2019 17:49:34 +0100 Subject: [PATCH 06/28] Stuff --- kaleid/include/kernel/mm.h | 2 +- kaleid/kernel/init/init.c | 2 -- kaleid/kernel/mm/map.c | 5 ++++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/kaleid/include/kernel/mm.h b/kaleid/include/kernel/mm.h index e7fe5ff..afacf69 100644 --- a/kaleid/include/kernel/mm.h +++ b/kaleid/include/kernel/mm.h @@ -30,7 +30,7 @@ // // Returns a pointer to the first entry of the memory map // -multiboot_memory_map_t *GetMemoryMap(void); +void *GetMemoryMap(void); // // Initializes the memory map structure diff --git a/kaleid/kernel/init/init.c b/kaleid/kernel/init/init.c index 9cdddf1..a7e9541 100644 --- a/kaleid/kernel/init/init.c +++ b/kaleid/kernel/init/init.c @@ -40,8 +40,6 @@ noreturn void StartKern(multiboot_info_t *mbInfo, int mbMagic) //Memory mapping InitMemoryMap(mbInfo); - KernLog("InitMemoryMap : %p, %x\n", GetCurMemMap().addr, GetCurMemMap().length ); - // We're out KernLog("Yup, we have magic : %x", mbMagic); CrashSystem(); //yay diff --git a/kaleid/kernel/mm/map.c b/kaleid/kernel/mm/map.c index c9d05b8..56cbed3 100644 --- a/kaleid/kernel/mm/map.c +++ b/kaleid/kernel/mm/map.c @@ -24,14 +24,17 @@ #include #include +#include void InitMemoryMap(multiboot_info_t *mbInfo) { memTab.addr = (void*)mbInfo->mmap_addr; memTab.length = (int)mbInfo->mmap_length; + + KernLog("[InitMemoryMap] Address: %p, Length: %d\n", GetCurMemMap().addr, GetCurMemMap().length ); } -multiboot_memory_map_t *GetMemoryMap(void) +void *GetMemoryMap(void) { return (void*)GetCurMemMap().addr; } From 87ecde5c2f05b509cbee577475870e1c74011642 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Mon, 18 Mar 2019 20:53:09 +0100 Subject: [PATCH 07/28] oops --- Makefile | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index 7f81e2c..ce5cace 100644 --- a/Makefile +++ b/Makefile @@ -124,18 +124,11 @@ $(KOBJDIR)/prog.o: $(KERNELDIR)/extras/prog.c @echo ${CL2}[$@] ${CL}Compiled.${CL3} # Kernel objects -<<<<<<< HEAD kal_kern_obj= $(KOBJDIR)/kernel/cpuid.o $(KOBJDIR)/kernel/init.o \ $(KOBJDIR)/kernel/table.o $(KOBJDIR)/kernel/cursor.o \ $(KOBJDIR)/kernel/term.o $(KOBJDIR)/kernel/vga.o \ $(KOBJDIR)/kernel/panic.o $(KOBJDIR)/kernel/map.o \ -======= -kal_kern_obj= $(KOBJDIR)/kernel/cpuid.o $(KOBJDIR)/kernel/init.o \ - $(KOBJDIR)/kernel/table.o $(KOBJDIR)/kernel/cursor.o \ - $(KOBJDIR)/kernel/term.o $(KOBJDIR)/kernel/vga.o \ - $(KOBJDIR)/kernel/panic.o $(KOBJDIR)/kernel/heap.o \ - $(KOBJDIR)/kernel/malloc.o ->>>>>>> BetterTerm + $(KOBJDIR)/kernel/heap.o $(KOBJDIR)/kernel/malloc.o $(KOBJDIR)/kernel/cpuid.o: $(KERNELDIR)/kernel/cpu/cpuid.c @$(KCC) $< -o $@ @@ -158,14 +151,13 @@ $(KOBJDIR)/kernel/vga.o: $(KERNELDIR)/kernel/io/vga.c $(KOBJDIR)/kernel/panic.o: $(KERNELDIR)/kernel/ke/panic.c @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -<<<<<<< HEAD $(KOBJDIR)/kernel/map.o: $(KERNELDIR)/kernel/mm/map.c -======= + @$(KCC) $< -o $@ + @echo ${CL2}[$@] ${CL}Compiled.${CL3} $(KOBJDIR)/kernel/heap.o: $(KERNELDIR)/kernel/mm/heap.c @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} $(KOBJDIR)/kernel/malloc.o: $(KERNELDIR)/kernel/mm/malloc.c ->>>>>>> BetterTerm @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} From f9878932a687d92dba163e309b57a1f2f664ad95 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Mon, 18 Mar 2019 20:56:43 +0100 Subject: [PATCH 08/28] debug --- ProjectTree | 8 ++++---- kaleid/kernel/mm/malloc.c | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/ProjectTree b/ProjectTree index 954b888..290b5cf 100644 --- a/ProjectTree +++ b/ProjectTree @@ -62,9 +62,7 @@ │   ├── atol.o │   ├── atoul.o │   ├── atou.o -│   ├── crtlib │   ├── ctype.o -│   ├── extras │   ├── itoa.o │   ├── kernel │   │   ├── cpuid.o @@ -81,6 +79,7 @@ │   │   ├── ke │   │   │   └── panic.o │   │   ├── malloc.o +│   │   ├── map.o │   │   ├── panic.o │   │   ├── table.o │   │   ├── term.o @@ -157,7 +156,8 @@ │   │   └── panic.c │   ├── mm │   │   ├── heap.c -│   │   └── malloc.c +│   │   ├── malloc.c +│   │   └── map.c │   └── proc │   ├── Makefile │   └── sched.c @@ -168,4 +168,4 @@ ├── qemu.log └── Readme.md -33 directories, 110 files +31 directories, 112 files diff --git a/kaleid/kernel/mm/malloc.c b/kaleid/kernel/mm/malloc.c index e46e94c..63629d3 100644 --- a/kaleid/kernel/mm/malloc.c +++ b/kaleid/kernel/mm/malloc.c @@ -66,5 +66,6 @@ error_t KalAllocMemory(void **ptr, size_t req, int flags, size_t align) error_t KalFreeMemory(void *ptr) { (void)ptr; + return 0; } From 672427f310c5132681d87627200f6ba6f287ea99 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Mon, 18 Mar 2019 21:14:09 +0100 Subject: [PATCH 09/28] Legacy --- kaleid/kernel/init/init.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kaleid/kernel/init/init.c b/kaleid/kernel/init/init.c index 0d2d920..5a5ebdb 100644 --- a/kaleid/kernel/init/init.c +++ b/kaleid/kernel/init/init.c @@ -38,11 +38,15 @@ noreturn void StartKern(multiboot_info_t *mbInfo, int mbMagic) // Kernel terminals InitTerms(); + //Hello world because why not + KernLog("%c%c%c OS/K\n\n", 219, 219, 219); + KernLog("[Init] We have magic : %x\n", mbMagic); + //Memory mapping InitMemoryMap(mbInfo); // We're out - KernLog("Yup, we have magic : %x", mbMagic); + KernLog("\n[Init] Evil never dies"); CrashSystem(); //yay } From 8e742181d8b3266b02376efea0ef5740d6fb8d85 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Mon, 18 Mar 2019 22:46:58 +0100 Subject: [PATCH 10/28] Correcting Makefile --- Makefile | 14 ++++++-------- ProjectTree | 11 +---------- 2 files changed, 7 insertions(+), 18 deletions(-) diff --git a/Makefile b/Makefile index ce5cace..d6588b7 100644 --- a/Makefile +++ b/Makefile @@ -190,19 +190,17 @@ debug: all install_mbr: $(BINDIR)/disk.img $(MBRDIR)/grub.cfg @mkdir -p $(BINDIR)/disk @echo ${CL2}[$@] ${NC}Installing MBR on image...${CL3} - -@$(MBRDIR)/umount.sh $(BINDIR)/disk + -@$(MBRDIR)/umount.sh $(BINDIR)/disk || /bin/true @$(MBRDIR)/grub-install.sh $(BINDIR)/disk.img $(BINDIR)/disk $(MBRDIR)/grub.cfg @rmdir $(BINDIR)/disk @echo ${CL2}[$@] ${CL}Success.${CL3} .PHONY: clean clean: - -@$(MBRDIR)/umount.sh $(BINDIR)/disk + -@$(MBRDIR)/umount.sh $(BINDIR)/disk || /bin/true @rm -Rvf ./ProjectTree - @rm -Rvf $(BINDIR)/*.* - @rm -Rvf $(OBJDIR)/*.o - @rm -Rvf $(OBJDIR)/*/*.o - @rm -Rvf $(OBJDIR)/*/*/*.o + @rm -Rvf $(BINDIR)/* $(OBJDIR)/*.o \ + $(OBJDIR)/*/*.o $(OBJDIR)/*/*.x86_64 $(OBJDIR)/*/*/*.o @echo ${CL2}[[$@]] ${CL}Cleaned.${CL3} $(BINDIR)/kaleid: $(LOBJDIR)/kaleid.x86_64 @@ -226,7 +224,7 @@ $(LOBJDIR)/loader.o: $(LOADERDIR)/loader.asm $(BINDIR)/disk.img: $(MBRDIR)/create_disk.sh @echo ${CL2}[$@]${NC} Constructing disk image...${CL3} - -@$(MBRDIR)/umount.sh $(BINDIR)/disk + -@$(MBRDIR)/umount.sh $(BINDIR)/disk || /bin/true @$(MBRDIR)/create_disk.sh $(BINDIR)/disk.img @make install_mbr @echo ${CL2}[$@]${NC} Constructing disk image...${CL3} @@ -235,7 +233,7 @@ $(BINDIR)/disk.img: $(MBRDIR)/create_disk.sh OS/K: $(BINDIR)/kaleid $(BINDIR)/disk.img ./ProjectTree @mkdir -p $(BINDIR)/disk @echo ${CL2}[[$@]] ${NC}Integrating kernel...${CL3} - -@$(MBRDIR)/umount.sh $(BINDIR)/disk + -@$(MBRDIR)/umount.sh $(BINDIR)/disk || /bin/true @$(MBRDIR)/mount.sh $(BINDIR)/disk.img $(BINDIR)/disk @cp $(BINDIR)/kaleid $(BINDIR)/disk/boot/kaleid @$(MBRDIR)/umount.sh $(BINDIR)/disk diff --git a/ProjectTree b/ProjectTree index 290b5cf..8203b54 100644 --- a/ProjectTree +++ b/ProjectTree @@ -68,16 +68,7 @@ │   │   ├── cpuid.o │   │   ├── cursor.o │   │   ├── heap.o -│   │   ├── init -│   │   │   ├── init.o -│   │   │   └── table.o │   │   ├── init.o -│   │   ├── io -│   │   │   ├── cursor.o -│   │   │   ├── term.o -│   │   │   └── vga.o -│   │   ├── ke -│   │   │   └── panic.o │   │   ├── malloc.o │   │   ├── map.o │   │   ├── panic.o @@ -168,4 +159,4 @@ ├── qemu.log └── Readme.md -31 directories, 112 files +28 directories, 106 files From e5917a40e4ee4689b4a0a88ad9978df57ff6d329 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Tue, 19 Mar 2019 00:25:22 +0100 Subject: [PATCH 11/28] multiboot work --- kaleid/include/kernel/base.h | 61 ++++++++++- kaleid/include/kernel/mm.h | 4 +- kaleid/include/multiboot/multiboot.h | 156 +++++++++++++-------------- kaleid/kernel/init/init.c | 28 ++++- kaleid/kernel/init/table.c | 2 +- kaleid/kernel/mm/map.c | 11 +- 6 files changed, 167 insertions(+), 95 deletions(-) diff --git a/kaleid/include/kernel/base.h b/kaleid/include/kernel/base.h index cb1d2db..199385e 100644 --- a/kaleid/include/kernel/base.h +++ b/kaleid/include/kernel/base.h @@ -42,7 +42,7 @@ typedef struct Terminal_t Terminal_t; typedef struct ListHead_t ListHead_t; typedef struct ListNode_t ListNode_t; typedef struct Processor_t Processor_t; -typedef struct MemoryMap_t MemoryMap_t; +typedef struct BootInfo_t BootInfo_t; typedef enum ProcState_t ProcState_t; typedef enum TermColor_t TermColor_t; @@ -63,6 +63,8 @@ typedef enum TermColor_t TermColor_t; #define GetCurCPU() (cpuTable[_GetCurCPU()]) #define PANICSTR_SIZE 1024 +//Get the BootInfo_t structure +#define GetBootInfo() (bootTab) //------------------------------------------// // @@ -96,17 +98,66 @@ struct Processor_t ListHead_t *timeCritProcs; }; -struct MemoryMap_t +#define FB_EGA_TEXT 2 +#define FB_INDEXED 0 +#define FB_RGB 1 + +struct BootInfo_t { - void *addr; - int length; + // The Bootloader infos (GRUB in our case) + struct { + uint grubFlags; //flags + uint modulesCount; //mods_count + uint modulesAddr; //mods_addr + uint grubName; //boot_loader_name + } btldr; + + // Informations about drives + struct { + uint bootDrv; //boot_device + uint bufferLength; //drives_length + uint bufferAddr; //drives_addr + } drives; + + // Informations about memory + struct { + //BIOS provided low and up memory + uint lowMemory; //mem_lower + uint upMemory; //mem_upper + + //GRUB provided memory map + uint mapLength; //mmap_length + uint mapAddr; //mmap_addr + } memory; + + // Informations about the video drive + struct { + uint vbeControl; //vbe_control_info + uint vbeModeInfo; //vbe_mode_info + ushort vbeMode; //vbe_mode + ushort vbeInterfaceSeg; //vbe_interface_seg + ushort vbeInterfaceOff; //vbe_interface_off + ushort vbeInterfaceLen; //vbe_interface_len + ullong framebufferAddr; //framebuffer_addr + uint framebufferPitch; //framebuffer_pitch + uint framebufferWidth; //framebuffer_width + uint framebufferHeight; //framebuffer_height + uchar framebufferBpp; //framebuffer_bpp + uchar framebufferType; //framebuffer_type + } video; + + // Informations about the microcode firmware (BIOS/EFI) + struct { + uint apmTable; //apm_table + uint romTable; //config_table + } firmware; }; //------------------------------------------// extern int cpuCount; extern Processor_t cpuTable[NCPUS]; -extern MemoryMap_t memTab; +extern BootInfo_t bootTab; //------------------------------------------// #define DEC_PER_CPU(name, field, type) \ diff --git a/kaleid/include/kernel/mm.h b/kaleid/include/kernel/mm.h index afacf69..cece795 100644 --- a/kaleid/include/kernel/mm.h +++ b/kaleid/include/kernel/mm.h @@ -25,8 +25,6 @@ #include #include -#define GetCurMemMap() (memTab) - // // Returns a pointer to the first entry of the memory map // @@ -35,6 +33,6 @@ void *GetMemoryMap(void); // // Initializes the memory map structure // -void InitMemoryMap(multiboot_info_t *mbInfo); +void InitMemoryMap(void); // -------------------------------------------------------------------------- // diff --git a/kaleid/include/multiboot/multiboot.h b/kaleid/include/multiboot/multiboot.h index 04f6322..d1f8516 100644 --- a/kaleid/include/multiboot/multiboot.h +++ b/kaleid/include/multiboot/multiboot.h @@ -93,74 +93,74 @@ #ifndef ASM_FILE -typedef unsigned char multiboot_uint8_t; -typedef unsigned short multiboot_uint16_t; -typedef unsigned int multiboot_uint32_t; -typedef unsigned long long multiboot_uint64_t; +typedef unsigned char uchar; +typedef unsigned short ushort; +typedef unsigned int uint; +typedef unsigned long long ullong; struct multiboot_header { /* Must be MULTIBOOT_MAGIC - see above. */ - multiboot_uint32_t magic; + uint magic; /* Feature flags. */ - multiboot_uint32_t flags; + uint flags; /* The above fields plus this one must equal 0 mod 2^32. */ - multiboot_uint32_t checksum; + uint checksum; /* These are only valid if MULTIBOOT_AOUT_KLUDGE is set. */ - multiboot_uint32_t header_addr; - multiboot_uint32_t load_addr; - multiboot_uint32_t load_end_addr; - multiboot_uint32_t bss_end_addr; - multiboot_uint32_t entry_addr; + uint header_addr; + uint load_addr; + uint load_end_addr; + uint bss_end_addr; + uint entry_addr; /* These are only valid if MULTIBOOT_VIDEO_MODE is set. */ - multiboot_uint32_t mode_type; - multiboot_uint32_t width; - multiboot_uint32_t height; - multiboot_uint32_t depth; + uint mode_type; + uint width; + uint height; + uint depth; }; /* The symbol table for a.out. */ struct multiboot_aout_symbol_table { - multiboot_uint32_t tabsize; - multiboot_uint32_t strsize; - multiboot_uint32_t addr; - multiboot_uint32_t reserved; + uint tabsize; + uint strsize; + uint addr; + uint reserved; }; typedef struct multiboot_aout_symbol_table multiboot_aout_symbol_table_t; /* The section header table for ELF. */ struct multiboot_elf_section_header_table { - multiboot_uint32_t num; - multiboot_uint32_t size; - multiboot_uint32_t addr; - multiboot_uint32_t shndx; + uint num; + uint size; + uint addr; + uint shndx; }; typedef struct multiboot_elf_section_header_table multiboot_elf_section_header_table_t; struct multiboot_info { /* Multiboot info version number */ - multiboot_uint32_t flags; + uint flags; /* Available memory from BIOS */ - multiboot_uint32_t mem_lower; - multiboot_uint32_t mem_upper; + uint mem_lower; + uint mem_upper; /* "root" partition */ - multiboot_uint32_t boot_device; + uint boot_device; /* Kernel command line */ - multiboot_uint32_t cmdline; + uint cmdline; /* Boot-Module list */ - multiboot_uint32_t mods_count; - multiboot_uint32_t mods_addr; + uint mods_count; + uint mods_addr; union { @@ -169,54 +169,54 @@ struct multiboot_info } u; /* Memory Mapping buffer */ - multiboot_uint32_t mmap_length; - multiboot_uint32_t mmap_addr; + uint mmap_length; + uint mmap_addr; /* Drive Info buffer */ - multiboot_uint32_t drives_length; - multiboot_uint32_t drives_addr; + uint drives_length; + uint drives_addr; /* ROM configuration table */ - multiboot_uint32_t config_table; + uint config_table; /* Boot Loader Name */ - multiboot_uint32_t boot_loader_name; + uint boot_loader_name; /* APM table */ - multiboot_uint32_t apm_table; + uint apm_table; /* Video */ - multiboot_uint32_t vbe_control_info; - multiboot_uint32_t vbe_mode_info; - multiboot_uint16_t vbe_mode; - multiboot_uint16_t vbe_interface_seg; - multiboot_uint16_t vbe_interface_off; - multiboot_uint16_t vbe_interface_len; + uint vbe_control_info; + uint vbe_mode_info; + ushort vbe_mode; + ushort vbe_interface_seg; + ushort vbe_interface_off; + ushort vbe_interface_len; - multiboot_uint64_t framebuffer_addr; - multiboot_uint32_t framebuffer_pitch; - multiboot_uint32_t framebuffer_width; - multiboot_uint32_t framebuffer_height; - multiboot_uint8_t framebuffer_bpp; + ullong framebuffer_addr; + uint framebuffer_pitch; + uint framebuffer_width; + uint framebuffer_height; + uchar framebuffer_bpp; #define MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED 0 #define MULTIBOOT_FRAMEBUFFER_TYPE_RGB 1 #define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT 2 - multiboot_uint8_t framebuffer_type; + uchar framebuffer_type; union { struct { - multiboot_uint32_t framebuffer_palette_addr; - multiboot_uint16_t framebuffer_palette_num_colors; + uint framebuffer_palette_addr; + ushort framebuffer_palette_num_colors; }; struct { - multiboot_uint8_t framebuffer_red_field_position; - multiboot_uint8_t framebuffer_red_mask_size; - multiboot_uint8_t framebuffer_green_field_position; - multiboot_uint8_t framebuffer_green_mask_size; - multiboot_uint8_t framebuffer_blue_field_position; - multiboot_uint8_t framebuffer_blue_mask_size; + uchar framebuffer_red_field_position; + uchar framebuffer_red_mask_size; + uchar framebuffer_green_field_position; + uchar framebuffer_green_mask_size; + uchar framebuffer_blue_field_position; + uchar framebuffer_blue_mask_size; }; }; }; @@ -224,51 +224,51 @@ typedef struct multiboot_info multiboot_info_t; struct multiboot_color { - multiboot_uint8_t red; - multiboot_uint8_t green; - multiboot_uint8_t blue; + uchar red; + uchar green; + uchar blue; }; struct multiboot_mmap_entry { - multiboot_uint32_t size; - multiboot_uint64_t addr; - multiboot_uint64_t len; + uint size; + ullong addr; + ullong len; #define MULTIBOOT_MEMORY_AVAILABLE 1 #define MULTIBOOT_MEMORY_RESERVED 2 #define MULTIBOOT_MEMORY_ACPI_RECLAIMABLE 3 #define MULTIBOOT_MEMORY_NVS 4 #define MULTIBOOT_MEMORY_BADRAM 5 - multiboot_uint32_t type; + uint type; } __attribute__((packed)); typedef struct multiboot_mmap_entry multiboot_memory_map_t; struct multiboot_mod_list { /* the memory used goes from bytes 'mod_start' to 'mod_end-1' inclusive */ - multiboot_uint32_t mod_start; - multiboot_uint32_t mod_end; + uint mod_start; + uint mod_end; /* Module command line */ - multiboot_uint32_t cmdline; + uint cmdline; /* padding to take it to 16 bytes (must be zero) */ - multiboot_uint32_t pad; + uint pad; }; typedef struct multiboot_mod_list multiboot_module_t; /* APM BIOS info. */ struct multiboot_apm_info { - multiboot_uint16_t version; - multiboot_uint16_t cseg; - multiboot_uint32_t offset; - multiboot_uint16_t cseg_16; - multiboot_uint16_t dseg; - multiboot_uint16_t flags; - multiboot_uint16_t cseg_len; - multiboot_uint16_t cseg_16_len; - multiboot_uint16_t dseg_len; + ushort version; + ushort cseg; + uint offset; + ushort cseg_16; + ushort dseg; + ushort flags; + ushort cseg_len; + ushort cseg_16_len; + ushort dseg_len; }; #endif /* ! ASM_FILE */ diff --git a/kaleid/kernel/init/init.c b/kaleid/kernel/init/init.c index 5a5ebdb..2f634dc 100644 --- a/kaleid/kernel/init/init.c +++ b/kaleid/kernel/init/init.c @@ -27,6 +27,28 @@ #include #include +// +// BootInfo_t initialization. It is necessary because grub will potentially be +// wiped since it is below 1MB.... +// +void InitBootInfo(multiboot_info_t *mbi) +{ + //Retrieves the bootloader informations + GetBootInfo().btldr.grubFlags = mbi->flags; + GetBootInfo().btldr.grubName = mbi->boot_loader_name; + GetBootInfo().btldr.modulesCount = mbi->mods_count; + GetBootInfo().btldr.modulesAddr = mbi->mods_addr; + DebugLog("[InitBootInfo] %s\n", GetBootInfo().btldr.grubName); + + //Retrieves the drives informations + GetBootInfo().drives.bootDrv = mbi->boot_device; + GetBootInfo().drives.bufferLength = mbi->drives_length; + GetBootInfo().drives.bufferAddr = mbi->drives_addr; + DebugLog("[InitBootInfo] Root drive : %x\n", + GetBootInfo().drives.bootDrv); +} + + // // Entry point of the Kaleid kernel // @@ -42,11 +64,13 @@ noreturn void StartKern(multiboot_info_t *mbInfo, int mbMagic) KernLog("%c%c%c OS/K\n\n", 219, 219, 219); KernLog("[Init] We have magic : %x\n", mbMagic); + //Initialize the BootInfo_t structure + InitBootInfo(mbInfo); + //Memory mapping - InitMemoryMap(mbInfo); + InitMemoryMap(); // We're out KernLog("\n[Init] Evil never dies"); CrashSystem(); //yay } - diff --git a/kaleid/kernel/init/table.c b/kaleid/kernel/init/table.c index 2d1292c..0294ddd 100644 --- a/kaleid/kernel/init/table.c +++ b/kaleid/kernel/init/table.c @@ -27,6 +27,6 @@ int cpuCount = 1; Processor_t cpuTable[NCPUS] = {0}; -MemoryMap_t memTab = {0}; +BootInfo_t bootTab = {0}; Terminal_t *stdOut = 0, *stdDbg = 0; diff --git a/kaleid/kernel/mm/map.c b/kaleid/kernel/mm/map.c index 56cbed3..056e71e 100644 --- a/kaleid/kernel/mm/map.c +++ b/kaleid/kernel/mm/map.c @@ -26,15 +26,14 @@ #include #include -void InitMemoryMap(multiboot_info_t *mbInfo) +void InitMemoryMap(void) { - memTab.addr = (void*)mbInfo->mmap_addr; - memTab.length = (int)mbInfo->mmap_length; - - KernLog("[InitMemoryMap] Address: %p, Length: %d\n", GetCurMemMap().addr, GetCurMemMap().length ); + return; } void *GetMemoryMap(void) { - return (void*)GetCurMemMap().addr; + return (void*)0; } + + From 5da56073adcf5793fbe7674d1354220db9394dca Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Tue, 19 Mar 2019 12:24:27 +0100 Subject: [PATCH 12/28] Stuff --- Makefile | 2 +- ProjectTree | 11 ++++++++- boot/grub/multiboot.pdf | Bin 191292 -> 249769 bytes boot/loader/loader.asm | 1 + kaleid/include/kernel/base.h | 15 ++++++------ kaleid/kernel/init/init.c | 46 +++++++++++++++++++++++++++-------- 6 files changed, 56 insertions(+), 19 deletions(-) diff --git a/Makefile b/Makefile index d6588b7..0c75b9e 100644 --- a/Makefile +++ b/Makefile @@ -217,7 +217,7 @@ $(LOBJDIR)/kaleid.x86_64: $(kal_kern_obj) $(kal_com_obj) $(LOBJDIR)/loader.o -o $(LOBJDIR)/kaleid.x86_64 @echo ${CL2}[$@] ${CL}Success.${CL3} -$(LOBJDIR)/loader.o: $(LOADERDIR)/loader.asm +$(LOBJDIR)/loader.o: $(LOADERDIR)/loader.asm $(LOADERDIR)/*/*.inc @echo ${CL2}[$@] ${NC}Making loader...${CL3} @$(ASM) $(ASMFLAGS) $(LOADERDIR)/loader.asm -o $(LOBJDIR)/loader.o > /dev/null @echo ${CL2}[$@] ${CL}Success.${CL3} diff --git a/ProjectTree b/ProjectTree index 8203b54..290b5cf 100644 --- a/ProjectTree +++ b/ProjectTree @@ -68,7 +68,16 @@ │   │   ├── cpuid.o │   │   ├── cursor.o │   │   ├── heap.o +│   │   ├── init +│   │   │   ├── init.o +│   │   │   └── table.o │   │   ├── init.o +│   │   ├── io +│   │   │   ├── cursor.o +│   │   │   ├── term.o +│   │   │   └── vga.o +│   │   ├── ke +│   │   │   └── panic.o │   │   ├── malloc.o │   │   ├── map.o │   │   ├── panic.o @@ -159,4 +168,4 @@ ├── qemu.log └── Readme.md -28 directories, 106 files +31 directories, 112 files diff --git a/boot/grub/multiboot.pdf b/boot/grub/multiboot.pdf index e32056f5c312b1b17dbefddfd597d3dd88341157..978ff78422d4e16e8bf19fee61e8c2934d8d03f4 100644 GIT binary patch literal 249769 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

= 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 z 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 z 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 C-sryo literal 191292 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 z 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

@GF+kP{57?Ahzu7 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 diff --git a/boot/loader/loader.asm b/boot/loader/loader.asm index 785e4c2..8e39fa7 100644 --- a/boot/loader/loader.asm +++ b/boot/loader/loader.asm @@ -32,6 +32,7 @@ %include "boot/loader/mem/structures.inc" global MB_start +global MB_header extern StartKern [BITS 32] diff --git a/kaleid/include/kernel/base.h b/kaleid/include/kernel/base.h index 199385e..055a2c9 100644 --- a/kaleid/include/kernel/base.h +++ b/kaleid/include/kernel/base.h @@ -64,7 +64,7 @@ typedef enum TermColor_t TermColor_t; #define PANICSTR_SIZE 1024 //Get the BootInfo_t structure -#define GetBootInfo() (bootTab) +#define GetBootInfo(x) bootTab.x //------------------------------------------// // @@ -101,22 +101,23 @@ struct Processor_t #define FB_EGA_TEXT 2 #define FB_INDEXED 0 #define FB_RGB 1 - +#define BINFO_SIZE 4096 struct BootInfo_t { // The Bootloader infos (GRUB in our case) struct { uint grubFlags; //flags uint modulesCount; //mods_count - uint modulesAddr; //mods_addr + void *modulesAddr; //mods_addr uint grubName; //boot_loader_name + void *mbHeaderAddr; } btldr; // Informations about drives struct { uint bootDrv; //boot_device uint bufferLength; //drives_length - uint bufferAddr; //drives_addr + void *bufferAddr; //drives_addr } drives; // Informations about memory @@ -127,18 +128,18 @@ struct BootInfo_t //GRUB provided memory map uint mapLength; //mmap_length - uint mapAddr; //mmap_addr + void *mapAddr; //mmap_addr } memory; // Informations about the video drive struct { uint vbeControl; //vbe_control_info - uint vbeModeInfo; //vbe_mode_info + uint vbeModeInfo; //vbe_mode_info ushort vbeMode; //vbe_mode ushort vbeInterfaceSeg; //vbe_interface_seg ushort vbeInterfaceOff; //vbe_interface_off ushort vbeInterfaceLen; //vbe_interface_len - ullong framebufferAddr; //framebuffer_addr + void* framebufferAddr; //framebuffer_addr uint framebufferPitch; //framebuffer_pitch uint framebufferWidth; //framebuffer_width uint framebufferHeight; //framebuffer_height diff --git a/kaleid/kernel/init/init.c b/kaleid/kernel/init/init.c index 2f634dc..163b457 100644 --- a/kaleid/kernel/init/init.c +++ b/kaleid/kernel/init/init.c @@ -33,19 +33,45 @@ // void InitBootInfo(multiboot_info_t *mbi) { + KalAssert(mbi); + + extern uint MB_header; + //Retrieves the bootloader informations - GetBootInfo().btldr.grubFlags = mbi->flags; - GetBootInfo().btldr.grubName = mbi->boot_loader_name; - GetBootInfo().btldr.modulesCount = mbi->mods_count; - GetBootInfo().btldr.modulesAddr = mbi->mods_addr; - DebugLog("[InitBootInfo] %s\n", GetBootInfo().btldr.grubName); + GetBootInfo(btldr).grubFlags = mbi->flags; + GetBootInfo(btldr).grubName = (mbi->boot_loader_name); + GetBootInfo(btldr).modulesCount = mbi->mods_count; + GetBootInfo(btldr).modulesAddr = (void*)(ullong)mbi->mods_addr; + GetBootInfo(btldr).mbHeaderAddr = (void*)(ullong)&MB_header; + DebugLog("\n[InitBootInfo] %s\n", GetBootInfo(btldr).grubName); + DebugLog("[InitBootInfo] Header address : %p, modules address : %p\n", + GetBootInfo(btldr).mbHeaderAddr, GetBootInfo(btldr).modulesAddr); + DebugLog("[InitBootInfo] GRUB flags : %x\n", GetBootInfo(btldr).grubFlags); //Retrieves the drives informations - GetBootInfo().drives.bootDrv = mbi->boot_device; - GetBootInfo().drives.bufferLength = mbi->drives_length; - GetBootInfo().drives.bufferAddr = mbi->drives_addr; + GetBootInfo(drives).bootDrv = mbi->boot_device; + GetBootInfo(drives).bufferLength = mbi->drives_length; + GetBootInfo(drives).bufferAddr = (void*)(ullong)mbi->drives_addr; DebugLog("[InitBootInfo] Root drive : %x\n", - GetBootInfo().drives.bootDrv); + GetBootInfo(drives).bootDrv); + + //Retrieves the memory informations + GetBootInfo(memory).lowMemory = mbi->mem_lower; + GetBootInfo(memory).upMemory = mbi->mem_upper; + GetBootInfo(memory).mapAddr = (void*)(ullong)mbi->mmap_addr; + GetBootInfo(memory).mapLength = mbi->mmap_length; + DebugLog("[InitBootInfo] Low memory : %d Kio, Up memory : %d Mio\n", + GetBootInfo(memory).lowMemory, GetBootInfo(memory).upMemory / (MB/KB)); + DebugLog("[InitBootInfo] Memory map address : %p, length : %d\n", + GetBootInfo(memory).mapAddr, GetBootInfo(memory).mapLength); + + // XXX assign video infos, but unused at this time + + // Retrieves the firmware infos + GetBootInfo(firmware).apmTable = mbi->apm_table; + GetBootInfo(firmware).romTable = mbi->config_table; + DebugLog("[InitBootInfo] APM Table : %p, ROM Table : %p\n", + GetBootInfo(firmware).apmTable, GetBootInfo(firmware).romTable); } @@ -71,6 +97,6 @@ noreturn void StartKern(multiboot_info_t *mbInfo, int mbMagic) InitMemoryMap(); // We're out - KernLog("\n[Init] Evil never dies"); + KernLog("\n[Init] Evil never dies !"); CrashSystem(); //yay } From 08b4fa927d5be22100a873c72e86216ba9467ba9 Mon Sep 17 00:00:00 2001 From: Julian Barathieu Date: Tue, 19 Mar 2019 13:37:23 +0100 Subject: [PATCH 13/28] Slighly better terminal stuff --- kaleid/include/base/assert.h | 2 +- kaleid/include/extras/locks.h | 16 +++--- kaleid/include/kernel/panic.h | 4 +- kaleid/include/kernel/term.h | 31 ++++------- kaleid/kernel/init/table.c | 3 +- kaleid/kernel/io/term.c | 102 +++++++++++++++++++++++++++------- kaleid/kernel/io/vga.c | 65 ++-------------------- kaleid/kernel/ke/panic.c | 16 +++--- kaleid/kernel/mm/heap.c | 4 +- kaleid/kernel/mm/malloc.c | 2 +- 10 files changed, 118 insertions(+), 127 deletions(-) diff --git a/kaleid/include/base/assert.h b/kaleid/include/base/assert.h index a6986d2..97fadac 100644 --- a/kaleid/include/base/assert.h +++ b/kaleid/include/base/assert.h @@ -77,7 +77,7 @@ noreturn void __assert_handler(const char *, const char *, int, const char *); // When debugging // //------------------------------------------// -#if !defined(_NO_DEBUG) && !defined(NDEBUG) && !defined(KalAssert) +#if /*!defined(_NO_DEBUG) && !defined(NDEBUG) &&*/ !defined(KalAssert) // // Check whether (x) holds, if not call __assert_handler diff --git a/kaleid/include/extras/locks.h b/kaleid/include/extras/locks.h index d97b0a5..9248094 100644 --- a/kaleid/include/extras/locks.h +++ b/kaleid/include/extras/locks.h @@ -51,7 +51,7 @@ enum LockType_t // Mutex-type lock // // WARNING - // AquireLock() panics when used on a mutex while not running a process + // AcquireLock() panics when used on a mutex while not running a process KLOCK_MUTEX, // Spinlock-type lock @@ -121,18 +121,18 @@ void DestroyLock(Lock_t *lock) } // -// Aquire the lock -// Panic on double aquisition since that should never happen +// Acquire the lock +// Panic on double acquisition since that should never happen // until we have at least a basic scheduler // static inline -void AquireLock(Lock_t *lock) +void AcquireLock(Lock_t *lock) { KalAssert(lock->initDone == INITOK); while (!__sync_bool_compare_and_swap(&lock->locked, 0, 1)) { #ifdef _KALEID_KERNEL - StartPanic("AquireLock on an already locked object"); + StartPanic("AcquireLock on an already locked object"); #else if likely (lock->type == KLOCK_SPINLOCK) continue; #ifdef _OSK_SOURCE @@ -146,8 +146,8 @@ void AquireLock(Lock_t *lock) } // -// Release an already aquired lock -// Panic if the lock was never aquired +// Release an already acquired lock +// Panic if the lock was never acquired // static inline void ReleaseLock(Lock_t *lock) @@ -161,7 +161,7 @@ void ReleaseLock(Lock_t *lock) } // -// Tries to aquire lock +// Tries to acquire lock // static inline bool AttemptLock(Lock_t *lock) diff --git a/kaleid/include/kernel/panic.h b/kaleid/include/kernel/panic.h index 4c7607b..ac80e6e 100644 --- a/kaleid/include/kernel/panic.h +++ b/kaleid/include/kernel/panic.h @@ -31,9 +31,7 @@ //------------------------------------------// -// Can't use the macro because panicStr is an array -static inline char *GetPanicStr(void) -{ return GetCurCPU().panicStr; } +extern volatile char *PanicStr; //------------------------------------------// diff --git a/kaleid/include/kernel/term.h b/kaleid/include/kernel/term.h index fcc000b..e35b129 100644 --- a/kaleid/include/kernel/term.h +++ b/kaleid/include/kernel/term.h @@ -80,46 +80,35 @@ struct Terminal_t TermColor_t bgColor; // Defined in driver - error_t (*ClearTermUnlocked)(Terminal_t *); - error_t (*PutOnTermUnlocked)(Terminal_t *, char); - error_t (*PrintOnTermUnlocked)(Terminal_t *, const char *); + error_t (*clear)(Terminal_t *); + error_t (*putchar)(Terminal_t *, char); }; //------------------------------------------// void InitTerms(void); error_t ClearTerm(Terminal_t *); -error_t PutOnTerm(Terminal_t *, char); -error_t PrintOnTerm(Terminal_t *, const char *); error_t ChTermColor(Terminal_t *, TermColor_t, TermColor_t); +error_t PutOnTerm(Terminal_t *, char); +error_t PutOnTermUnlocked(Terminal_t *, char); + +error_t PrintOnTerm(Terminal_t *, const char *); +error_t PrintOnTermUnlocked(Terminal_t *, const char *); + error_t KernLog(const char *, ...); //------------------------------------------// -extern Terminal_t *stdOut; -#define GetStdOut() (stdOut) -#define SetStdOut(x) (stdOut = (x)) - -// Debug purposes -volatile ushort *vga; +extern Terminal_t *StdOut; +extern Terminal_t *StdDbg; //------------------------------------------// #ifndef _NO_DEBUG - -extern Terminal_t *stdDbg; -#define GetStdDbg() (stdDbg) -#define SetStdDbg(x) (stdDbg = (x)) - error_t DebugLog(const char *, ...); - #else // _NO_DEBUG - -#define GetStdDbg() NULL -#define SetStdDbg(x) ((void)0) #define DebugLog(fmt, ...) EOK - #endif //------------------------------------------// diff --git a/kaleid/kernel/init/table.c b/kaleid/kernel/init/table.c index 7a51088..22317ad 100644 --- a/kaleid/kernel/init/table.c +++ b/kaleid/kernel/init/table.c @@ -27,5 +27,6 @@ int cpuCount = 1; Processor_t cpuTable[NCPUS] = {0}; -Terminal_t *stdOut = 0, *stdDbg = 0; +Terminal_t *StdOut = 0, *StdDbg = 0; +volatile char *PanicStr = 0; diff --git a/kaleid/kernel/io/term.c b/kaleid/kernel/io/term.c index ce34545..e7cd176 100644 --- a/kaleid/kernel/io/term.c +++ b/kaleid/kernel/io/term.c @@ -32,14 +32,14 @@ extern Terminal_t VGA_Terminal; // void InitTerms(void) { - KalAssert(!GetStdOut() && !GetStdDbg()); + KalAssert(!StdOut && !StdDbg); VGA_Init(); - SetStdDbg(&VGA_Terminal); - SetStdOut(&VGA_Terminal); + StdDbg = &VGA_Terminal; + StdOut = &VGA_Terminal; - ClearTerm(GetStdOut()); + ClearTerm(StdOut); } // @@ -52,8 +52,8 @@ error_t ClearTerm(Terminal_t *term) if (term == NULL) return EINVAL; KalAssert(term->initDone == INITOK); - AquireLock(&term->lock); - retcode = term->ClearTermUnlocked(term); + AcquireLock(&term->lock); + retcode = term->clear(term); ReleaseLock(&term->lock); return retcode; @@ -70,7 +70,7 @@ error_t ChTermColor(Terminal_t *term, TermColor_t fgColor, TermColor_t bgColor) if (term == NULL) return EINVAL; - AquireLock(&term->lock); + AcquireLock(&term->lock); term->fgColor = fgColor; term->bgColor = bgColor; @@ -81,39 +81,99 @@ error_t ChTermColor(Terminal_t *term, TermColor_t fgColor, TermColor_t bgColor) } // -// Writes a single character on the terminal +// Writes a single character on the terminal (UNLOCKED version) +// +error_t PutOnTermUnlocked(Terminal_t *term, char ch) +{ + uint i; + size_t prevY; + error_t rc = EOK; + + if (ch == '\r') { + term->currentX = 0; + return EOK; + } + + // Line feed first takes us to the very end of the line + // Later in this function we actually do the line feed + else if (ch == '\n') { + term->currentX = term->width - 1; + } + + // Tabulations account for "term->tabSize" spaces + else if (ch == '\t') { + prevY = term->currentX; + for (i = 0; i < term->tabSize; i++) { + // Make sure tabulations can't spread over two lines + if (term->currentX == prevY) { + rc = term->putchar(term, ' '); + if (rc) return rc; + } + } + } + + else rc = term->putchar(term, ch); + + // Did we reach the end of line? + if (!rc && ++term->currentX == term->width) { + term->currentX = 0; + + // Did we reach the buffer's end? + if (++term->currentY == term->height) { + term->currentY = 0; + } + } + + return rc; +} + + +// +// Writes a single character on the terminal (LOCKED version) // error_t PutOnTerm(Terminal_t *term, char ch) { - error_t retcode; + error_t rc; if (term == NULL) return EINVAL; KalAssert(term->initDone == INITOK); - AquireLock(&term->lock); - retcode = term->PutOnTermUnlocked(term, ch); + AcquireLock(&term->lock); + rc = PutOnTermUnlocked(term, ch); ReleaseLock(&term->lock); - return retcode; + return rc; } // -// Prints string on terminal +// Prints string on terminal (UNLOCKED version) +// +error_t PrintOnTermUnlocked(Terminal_t *term, const char *str) +{ + error_t rc = EOK; + + while (*str && rc == EOK) { + rc = PutOnTermUnlocked(term, *str++); + } + + return rc; +} + +// +// Prints string on terminal (LOCKED version) // error_t PrintOnTerm(Terminal_t *term, const char *str) { - error_t retcode = EOK; + error_t rc = EOK; if (term == NULL) return EINVAL; KalAssert(term->initDone == INITOK); - AquireLock(&term->lock); - while (*str && retcode == EOK) { - retcode = term->PutOnTermUnlocked(term, *str++); - } + AcquireLock(&term->lock); + rc = PrintOnTermUnlocked(term, str); ReleaseLock(&term->lock); - return retcode; + return rc; } // @@ -130,7 +190,7 @@ error_t KernLog(const char *fmt, ...) vsnprintf(logbuf, KLOG_MAX_BUFSIZE, fmt, ap); va_end(ap); - return PrintOnTerm(GetStdOut(), logbuf); + return PrintOnTerm(StdOut, logbuf); } #ifndef _NO_DEBUG @@ -148,7 +208,7 @@ error_t DebugLog(const char *fmt, ...) vsnprintf(logbuf, KLOG_MAX_BUFSIZE, fmt, ap); va_end(ap); - return PrintOnTerm(GetStdDbg(), logbuf); + return PrintOnTerm(StdDbg, logbuf); } #endif diff --git a/kaleid/kernel/io/vga.c b/kaleid/kernel/io/vga.c index de00c35..600eae0 100644 --- a/kaleid/kernel/io/vga.c +++ b/kaleid/kernel/io/vga.c @@ -59,69 +59,15 @@ error_t VGA_ClearTermUnlocked(Terminal_t *term) // error_t VGA_PutOnTermUnlocked(Terminal_t *term, char ch) { - uint i; - size_t prevY; + ushort *buffer = (ushort *)term->data; + const size_t offset = VGA_ComputeOffset(term, term->currentX, term->currentY); + buffer[offset] = VGA_ComputeEntry(ch, VGA_ComputeColorCode(term->fgColor, term->bgColor)); - if (ch == '\r') { - term->currentX = 0; - return EOK; - } - - // Line feed first takes us to the very end of the line - // Later in this function we actually do the line feed - else if (ch == '\n') { - term->currentX = term->width - 1; - } - - // Tabulations account for "term->tabSize" spaces - else if (ch == '\t') { - prevY = term->currentX; - for (i = 0; i < term->tabSize; i++) { - // Make sure tabulations can't spread over two lines - if (term->currentX == prevY) { - VGA_PutOnTermUnlocked(term, ' '); - } - } - } - - else { - ushort *buffer = (ushort *)term->data; - const size_t offset = VGA_ComputeOffset(term, term->currentX, term->currentY); - buffer[offset] = VGA_ComputeEntry(ch, VGA_ComputeColorCode(term->fgColor, term->bgColor)); - } - - // Did we reach the end of line? - if (++term->currentX == term->width) { - term->currentX = 0; - - // Did we reach the buffer's end? - if (++term->currentY == term->height) { - // XXX scroll up - term->currentY = 0; - } - } - - // Nothing can go wrong return EOK; } -// -// Prints string on terminal -// -error_t VGA_PrintOnTermUnlocked(Terminal_t *term, const char *str) -{ - error_t retcode = EOK; - - while (*str && retcode == EOK) { - retcode = term->PutOnTermUnlocked(term, *str++); - } - - return retcode; -} - // // VGA output -// XXX custom sizes // Terminal_t VGA_Terminal = { .initDone = FALSE, @@ -140,9 +86,8 @@ Terminal_t VGA_Terminal = { .fgColor = KTERM_COLOR_LGREY, .bgColor = KTERM_COLOR_BLACK, - .ClearTermUnlocked = VGA_ClearTermUnlocked, - .PutOnTermUnlocked = VGA_PutOnTermUnlocked, - .PrintOnTermUnlocked = VGA_PrintOnTermUnlocked, + .clear = VGA_ClearTermUnlocked, + .putchar = VGA_PutOnTermUnlocked, }; diff --git a/kaleid/kernel/ke/panic.c b/kaleid/kernel/ke/panic.c index def362c..4de0bfe 100644 --- a/kaleid/kernel/ke/panic.c +++ b/kaleid/kernel/ke/panic.c @@ -37,7 +37,7 @@ noreturn void __assert_handler(const char *msg, (void)file; (void)line; (void)func; - StartPanic("cpu%d: In function '%s', from %s line %d - assert() failed: '%s'", + StartPanic("cpu%d: In function '%s', from %s line %d - assertion failed: '%s'", _GetCurCPU(), func, file, line, msg); } @@ -52,25 +52,23 @@ noreturn void StartPanic(const char *fmt, ...) DisableIRQs(); if (GetCurProc()) _SetCurProc(NULL); - if (GetStdOut() == NULL) CrashSystem(); - - GetStdOut()->ClearTermUnlocked(GetStdOut()); + if (StdOut == NULL) CrashSystem(); if (fmt == NULL) { fmt = "(no message given)"; } - if (*GetPanicStr()) { - GetStdOut()->PrintOnTermUnlocked(GetStdOut(), "\nDouble panic!"); + if (PanicStr[0] != 0) { + PrintOnTermUnlocked(StdOut, "\nDouble panic!"); HaltCPU(); } va_start(ap, fmt); - vsnprintf(GetPanicStr(), PANICSTR_SIZE, fmt, ap); + vsnprintf(PanicStr, PANICSTR_SIZE, fmt, ap); va_end(ap); - GetStdOut()->PrintOnTermUnlocked(GetStdOut(), "\nPanic!\n\n"); - GetStdOut()->PrintOnTermUnlocked(GetStdOut(), GetPanicStr()); + PrintOnTermUnlocked(StdOut, "\nPanic!\n\n"); + PrintOnTermUnlocked(StdOut, PanicStr); HaltCPU(); } diff --git a/kaleid/kernel/mm/heap.c b/kaleid/kernel/mm/heap.c index dd3d18c..06dbf9c 100644 --- a/kaleid/kernel/mm/heap.c +++ b/kaleid/kernel/mm/heap.c @@ -47,11 +47,11 @@ void InitHeap(void) } // -// Aquires control of the heap's lock +// Acquires control of the heap's lock // void LockHeap(void) { - AquireLock(&_heap_lock); + AcquireLock(&_heap_lock); } // diff --git a/kaleid/kernel/mm/malloc.c b/kaleid/kernel/mm/malloc.c index e46e94c..cc7389c 100644 --- a/kaleid/kernel/mm/malloc.c +++ b/kaleid/kernel/mm/malloc.c @@ -46,7 +46,7 @@ error_t KalAllocMemory(void **ptr, size_t req, int flags, size_t align) UnlockHeap(); if (rc) { - if ((flags & M_CANFAIL) == 0) + if ((flags & M_CANFAIL) != 0) return rc; StartPanic("Out of memory"); } From 4cdde390aed1bf220e0e1cabf14ab1ef263c9935 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Tue, 19 Mar 2019 13:38:09 +0100 Subject: [PATCH 14/28] stuff --- ProjectTree | 25 ++- kaleid/include/kernel/mm.h | 4 +- kaleid/include/multiboot/multiboot.h | 276 --------------------------- kaleid/kernel/init/init.c | 4 +- kaleid/kernel/mm/map.c | 9 +- 5 files changed, 21 insertions(+), 297 deletions(-) delete mode 100644 kaleid/include/multiboot/multiboot.h diff --git a/ProjectTree b/ProjectTree index 290b5cf..72efbbb 100644 --- a/ProjectTree +++ b/ProjectTree @@ -129,18 +129,17 @@ │   │   ├── kalbase.h │   │   ├── kaleid.h │   │   ├── kalext.h -│   │   ├── kernel -│   │   │   ├── base.h -│   │   │   ├── cpu.h -│   │   │   ├── heap.h -│   │   │   ├── iomisc.h -│   │   │   ├── mm.h -│   │   │   ├── panic.h -│   │   │   ├── proc.h -│   │   │   ├── sched.h -│   │   │   └── term.h -│   │   └── multiboot -│   │   └── multiboot.h +│   │   └── kernel +│   │   ├── base.h +│   │   ├── cpu.h +│   │   ├── heap.h +│   │   ├── iomisc.h +│   │   ├── mm.h +│   │   ├── multiboot.h +│   │   ├── panic.h +│   │   ├── proc.h +│   │   ├── sched.h +│   │   └── term.h │   └── kernel │   ├── cpu │   │   └── cpuid.c @@ -168,4 +167,4 @@ ├── qemu.log └── Readme.md -31 directories, 112 files +30 directories, 112 files diff --git a/kaleid/include/kernel/mm.h b/kaleid/include/kernel/mm.h index cece795..3ef8494 100644 --- a/kaleid/include/kernel/mm.h +++ b/kaleid/include/kernel/mm.h @@ -22,7 +22,7 @@ // along with OS/K. If not, see . // //----------------------------------------------------------------------------// -#include +#include #include // @@ -33,6 +33,6 @@ void *GetMemoryMap(void); // // Initializes the memory map structure // -void InitMemoryMap(void); +error_t InitMemoryMap(void); // -------------------------------------------------------------------------- // diff --git a/kaleid/include/multiboot/multiboot.h b/kaleid/include/multiboot/multiboot.h deleted file mode 100644 index d1f8516..0000000 --- a/kaleid/include/multiboot/multiboot.h +++ /dev/null @@ -1,276 +0,0 @@ -//----------------------------------------------------------------------------// -// GNU GPL OS/K // -// // -// Desc: multiboot.h - Multiboot header file. // -// // -// // -// Copyright © 1999,2003,2007-2010 Free Software Foundation, Inc. // -// Copyright © 2018-2019 The OS/K Team // -// // -// This file is part of OS/K. // -// // -// OS/K is free software: you can redistribute it and/or modify // -// it under the terms of the GNU General Public License as published by // -// the Free Software Foundation, either version 3 of the License, or // -// any later version. // -// // -// OS/K is distributed in the hope that it will be useful, // -// but WITHOUT ANY WARRANTY//without even the implied warranty of // -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // -// GNU General Public License for more details. // -// // -// You should have received a copy of the GNU General Public License // -// along with OS/K. If not, see . // -//----------------------------------------------------------------------------// - -#ifndef MULTIBOOT_HEADER -#define MULTIBOOT_HEADER 1 - -/* How many bytes from the start of the file we search for the header. */ -#define MULTIBOOT_SEARCH 8192 -#define MULTIBOOT_HEADER_ALIGN 4 - -/* The magic field should contain this. */ -#define MULTIBOOT_HEADER_MAGIC 0x1BADB002 - -/* This should be in %eax. */ -#define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002 - -/* Alignment of multiboot modules. */ -#define MULTIBOOT_MOD_ALIGN 0x00001000 - -/* Alignment of the multiboot info structure. */ -#define MULTIBOOT_INFO_ALIGN 0x00000004 - -/* Flags set in the 'flags' member of the multiboot header. */ - -/* Align all boot modules on i386 page (4KB) boundaries. */ -#define MULTIBOOT_PAGE_ALIGN 0x00000001 - -/* Must pass memory information to OS. */ -#define MULTIBOOT_MEMORY_INFO 0x00000002 - -/* Must pass video information to OS. */ -#define MULTIBOOT_VIDEO_MODE 0x00000004 - -/* This flag indicates the use of the address fields in the header. */ -#define MULTIBOOT_AOUT_KLUDGE 0x00010000 - - -#define MULTIBOOT_INFO_MEMORY 0x00000001 -/* is there a boot device set? */ -#define MULTIBOOT_INFO_BOOTDEV 0x00000002 -/* is the command-line defined? */ -#define MULTIBOOT_INFO_CMDLINE 0x00000004 -/* are there modules to do something with? */ -#define MULTIBOOT_INFO_MODS 0x00000008 - -/* These next two are mutually exclusive */ - -/* is there a symbol table loaded? */ -#define MULTIBOOT_INFO_AOUT_SYMS 0x00000010 -/* is there an ELF section header table? */ -#define MULTIBOOT_INFO_ELF_SHDR 0x00000020 - -/* is there a full memory map? */ -#define MULTIBOOT_INFO_MEM_MAP 0x00000040 - -/* Is there drive info? */ -#define MULTIBOOT_INFO_DRIVE_INFO 0x00000080 - -/* Is there a config table? */ -#define MULTIBOOT_INFO_CONFIG_TABLE 0x00000100 - -/* Is there a boot loader name? */ -#define MULTIBOOT_INFO_BOOT_LOADER_NAME 0x00000200 - -/* Is there a APM table? */ -#define MULTIBOOT_INFO_APM_TABLE 0x00000400 - -/* Is there video information? */ -#define MULTIBOOT_INFO_VBE_INFO 0x00000800 -#define MULTIBOOT_INFO_FRAMEBUFFER_INFO 0x00001000 - -#ifndef ASM_FILE - -typedef unsigned char uchar; -typedef unsigned short ushort; -typedef unsigned int uint; -typedef unsigned long long ullong; - -struct multiboot_header -{ - /* Must be MULTIBOOT_MAGIC - see above. */ - uint magic; - - /* Feature flags. */ - uint flags; - - /* The above fields plus this one must equal 0 mod 2^32. */ - uint checksum; - - /* These are only valid if MULTIBOOT_AOUT_KLUDGE is set. */ - uint header_addr; - uint load_addr; - uint load_end_addr; - uint bss_end_addr; - uint entry_addr; - - /* These are only valid if MULTIBOOT_VIDEO_MODE is set. */ - uint mode_type; - uint width; - uint height; - uint depth; -}; - -/* The symbol table for a.out. */ -struct multiboot_aout_symbol_table -{ - uint tabsize; - uint strsize; - uint addr; - uint reserved; -}; -typedef struct multiboot_aout_symbol_table multiboot_aout_symbol_table_t; - -/* The section header table for ELF. */ -struct multiboot_elf_section_header_table -{ - uint num; - uint size; - uint addr; - uint shndx; -}; -typedef struct multiboot_elf_section_header_table multiboot_elf_section_header_table_t; - -struct multiboot_info -{ - /* Multiboot info version number */ - uint flags; - - /* Available memory from BIOS */ - uint mem_lower; - uint mem_upper; - - /* "root" partition */ - uint boot_device; - - /* Kernel command line */ - uint cmdline; - - /* Boot-Module list */ - uint mods_count; - uint mods_addr; - - union - { - multiboot_aout_symbol_table_t aout_sym; - multiboot_elf_section_header_table_t elf_sec; - } u; - - /* Memory Mapping buffer */ - uint mmap_length; - uint mmap_addr; - - /* Drive Info buffer */ - uint drives_length; - uint drives_addr; - - /* ROM configuration table */ - uint config_table; - - /* Boot Loader Name */ - uint boot_loader_name; - - /* APM table */ - uint apm_table; - - /* Video */ - uint vbe_control_info; - uint vbe_mode_info; - ushort vbe_mode; - ushort vbe_interface_seg; - ushort vbe_interface_off; - ushort vbe_interface_len; - - ullong framebuffer_addr; - uint framebuffer_pitch; - uint framebuffer_width; - uint framebuffer_height; - uchar framebuffer_bpp; -#define MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED 0 -#define MULTIBOOT_FRAMEBUFFER_TYPE_RGB 1 -#define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT 2 - uchar framebuffer_type; - union - { - struct - { - uint framebuffer_palette_addr; - ushort framebuffer_palette_num_colors; - }; - struct - { - uchar framebuffer_red_field_position; - uchar framebuffer_red_mask_size; - uchar framebuffer_green_field_position; - uchar framebuffer_green_mask_size; - uchar framebuffer_blue_field_position; - uchar framebuffer_blue_mask_size; - }; - }; -}; -typedef struct multiboot_info multiboot_info_t; - -struct multiboot_color -{ - uchar red; - uchar green; - uchar blue; -}; - -struct multiboot_mmap_entry -{ - uint size; - ullong addr; - ullong len; -#define MULTIBOOT_MEMORY_AVAILABLE 1 -#define MULTIBOOT_MEMORY_RESERVED 2 -#define MULTIBOOT_MEMORY_ACPI_RECLAIMABLE 3 -#define MULTIBOOT_MEMORY_NVS 4 -#define MULTIBOOT_MEMORY_BADRAM 5 - uint type; -} __attribute__((packed)); -typedef struct multiboot_mmap_entry multiboot_memory_map_t; - -struct multiboot_mod_list -{ - /* the memory used goes from bytes 'mod_start' to 'mod_end-1' inclusive */ - uint mod_start; - uint mod_end; - - /* Module command line */ - uint cmdline; - - /* padding to take it to 16 bytes (must be zero) */ - uint pad; -}; -typedef struct multiboot_mod_list multiboot_module_t; - -/* APM BIOS info. */ -struct multiboot_apm_info -{ - ushort version; - ushort cseg; - uint offset; - ushort cseg_16; - ushort dseg; - ushort flags; - ushort cseg_len; - ushort cseg_16_len; - ushort dseg_len; -}; - -#endif /* ! ASM_FILE */ - -#endif /* ! MULTIBOOT_HEADER */ diff --git a/kaleid/kernel/init/init.c b/kaleid/kernel/init/init.c index 163b457..466c6fb 100644 --- a/kaleid/kernel/init/init.c +++ b/kaleid/kernel/init/init.c @@ -22,7 +22,7 @@ // along with OS/K. If not, see . // //----------------------------------------------------------------------------// -#include +#include #include #include #include @@ -88,6 +88,8 @@ noreturn void StartKern(multiboot_info_t *mbInfo, int mbMagic) //Hello world because why not KernLog("%c%c%c OS/K\n\n", 219, 219, 219); + + KalAlwaysAssert(mbMagic == MULTIBOOT_BOOTLOADER_MAGIC); KernLog("[Init] We have magic : %x\n", mbMagic); //Initialize the BootInfo_t structure diff --git a/kaleid/kernel/mm/map.c b/kaleid/kernel/mm/map.c index 056e71e..6d29346 100644 --- a/kaleid/kernel/mm/map.c +++ b/kaleid/kernel/mm/map.c @@ -23,17 +23,16 @@ //----------------------------------------------------------------------------// #include -#include #include -void InitMemoryMap(void) +error_t InitMemoryMap(void) { - return; + ///uint MapIsValid = (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_MEM_MAP = MULTIBOOT_INFO_MEM_MAP ? 1 : 0); + KalAlwaysAssert(MapIsValid); + return EOK; } void *GetMemoryMap(void) { return (void*)0; } - - From a76f5245a1e61fd484cc3fe484cbc3a5a4612b28 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Tue, 19 Mar 2019 13:38:20 +0100 Subject: [PATCH 15/28] stuff --- kaleid/include/kernel/multiboot.h | 276 ++++++++++++++++++++++++++++++ 1 file changed, 276 insertions(+) create mode 100644 kaleid/include/kernel/multiboot.h diff --git a/kaleid/include/kernel/multiboot.h b/kaleid/include/kernel/multiboot.h new file mode 100644 index 0000000..d1f8516 --- /dev/null +++ b/kaleid/include/kernel/multiboot.h @@ -0,0 +1,276 @@ +//----------------------------------------------------------------------------// +// GNU GPL OS/K // +// // +// Desc: multiboot.h - Multiboot header file. // +// // +// // +// Copyright © 1999,2003,2007-2010 Free Software Foundation, Inc. // +// Copyright © 2018-2019 The OS/K Team // +// // +// This file is part of OS/K. // +// // +// OS/K is free software: you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation, either version 3 of the License, or // +// any later version. // +// // +// OS/K is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY//without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with OS/K. If not, see . // +//----------------------------------------------------------------------------// + +#ifndef MULTIBOOT_HEADER +#define MULTIBOOT_HEADER 1 + +/* How many bytes from the start of the file we search for the header. */ +#define MULTIBOOT_SEARCH 8192 +#define MULTIBOOT_HEADER_ALIGN 4 + +/* The magic field should contain this. */ +#define MULTIBOOT_HEADER_MAGIC 0x1BADB002 + +/* This should be in %eax. */ +#define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002 + +/* Alignment of multiboot modules. */ +#define MULTIBOOT_MOD_ALIGN 0x00001000 + +/* Alignment of the multiboot info structure. */ +#define MULTIBOOT_INFO_ALIGN 0x00000004 + +/* Flags set in the 'flags' member of the multiboot header. */ + +/* Align all boot modules on i386 page (4KB) boundaries. */ +#define MULTIBOOT_PAGE_ALIGN 0x00000001 + +/* Must pass memory information to OS. */ +#define MULTIBOOT_MEMORY_INFO 0x00000002 + +/* Must pass video information to OS. */ +#define MULTIBOOT_VIDEO_MODE 0x00000004 + +/* This flag indicates the use of the address fields in the header. */ +#define MULTIBOOT_AOUT_KLUDGE 0x00010000 + + +#define MULTIBOOT_INFO_MEMORY 0x00000001 +/* is there a boot device set? */ +#define MULTIBOOT_INFO_BOOTDEV 0x00000002 +/* is the command-line defined? */ +#define MULTIBOOT_INFO_CMDLINE 0x00000004 +/* are there modules to do something with? */ +#define MULTIBOOT_INFO_MODS 0x00000008 + +/* These next two are mutually exclusive */ + +/* is there a symbol table loaded? */ +#define MULTIBOOT_INFO_AOUT_SYMS 0x00000010 +/* is there an ELF section header table? */ +#define MULTIBOOT_INFO_ELF_SHDR 0x00000020 + +/* is there a full memory map? */ +#define MULTIBOOT_INFO_MEM_MAP 0x00000040 + +/* Is there drive info? */ +#define MULTIBOOT_INFO_DRIVE_INFO 0x00000080 + +/* Is there a config table? */ +#define MULTIBOOT_INFO_CONFIG_TABLE 0x00000100 + +/* Is there a boot loader name? */ +#define MULTIBOOT_INFO_BOOT_LOADER_NAME 0x00000200 + +/* Is there a APM table? */ +#define MULTIBOOT_INFO_APM_TABLE 0x00000400 + +/* Is there video information? */ +#define MULTIBOOT_INFO_VBE_INFO 0x00000800 +#define MULTIBOOT_INFO_FRAMEBUFFER_INFO 0x00001000 + +#ifndef ASM_FILE + +typedef unsigned char uchar; +typedef unsigned short ushort; +typedef unsigned int uint; +typedef unsigned long long ullong; + +struct multiboot_header +{ + /* Must be MULTIBOOT_MAGIC - see above. */ + uint magic; + + /* Feature flags. */ + uint flags; + + /* The above fields plus this one must equal 0 mod 2^32. */ + uint checksum; + + /* These are only valid if MULTIBOOT_AOUT_KLUDGE is set. */ + uint header_addr; + uint load_addr; + uint load_end_addr; + uint bss_end_addr; + uint entry_addr; + + /* These are only valid if MULTIBOOT_VIDEO_MODE is set. */ + uint mode_type; + uint width; + uint height; + uint depth; +}; + +/* The symbol table for a.out. */ +struct multiboot_aout_symbol_table +{ + uint tabsize; + uint strsize; + uint addr; + uint reserved; +}; +typedef struct multiboot_aout_symbol_table multiboot_aout_symbol_table_t; + +/* The section header table for ELF. */ +struct multiboot_elf_section_header_table +{ + uint num; + uint size; + uint addr; + uint shndx; +}; +typedef struct multiboot_elf_section_header_table multiboot_elf_section_header_table_t; + +struct multiboot_info +{ + /* Multiboot info version number */ + uint flags; + + /* Available memory from BIOS */ + uint mem_lower; + uint mem_upper; + + /* "root" partition */ + uint boot_device; + + /* Kernel command line */ + uint cmdline; + + /* Boot-Module list */ + uint mods_count; + uint mods_addr; + + union + { + multiboot_aout_symbol_table_t aout_sym; + multiboot_elf_section_header_table_t elf_sec; + } u; + + /* Memory Mapping buffer */ + uint mmap_length; + uint mmap_addr; + + /* Drive Info buffer */ + uint drives_length; + uint drives_addr; + + /* ROM configuration table */ + uint config_table; + + /* Boot Loader Name */ + uint boot_loader_name; + + /* APM table */ + uint apm_table; + + /* Video */ + uint vbe_control_info; + uint vbe_mode_info; + ushort vbe_mode; + ushort vbe_interface_seg; + ushort vbe_interface_off; + ushort vbe_interface_len; + + ullong framebuffer_addr; + uint framebuffer_pitch; + uint framebuffer_width; + uint framebuffer_height; + uchar framebuffer_bpp; +#define MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED 0 +#define MULTIBOOT_FRAMEBUFFER_TYPE_RGB 1 +#define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT 2 + uchar framebuffer_type; + union + { + struct + { + uint framebuffer_palette_addr; + ushort framebuffer_palette_num_colors; + }; + struct + { + uchar framebuffer_red_field_position; + uchar framebuffer_red_mask_size; + uchar framebuffer_green_field_position; + uchar framebuffer_green_mask_size; + uchar framebuffer_blue_field_position; + uchar framebuffer_blue_mask_size; + }; + }; +}; +typedef struct multiboot_info multiboot_info_t; + +struct multiboot_color +{ + uchar red; + uchar green; + uchar blue; +}; + +struct multiboot_mmap_entry +{ + uint size; + ullong addr; + ullong len; +#define MULTIBOOT_MEMORY_AVAILABLE 1 +#define MULTIBOOT_MEMORY_RESERVED 2 +#define MULTIBOOT_MEMORY_ACPI_RECLAIMABLE 3 +#define MULTIBOOT_MEMORY_NVS 4 +#define MULTIBOOT_MEMORY_BADRAM 5 + uint type; +} __attribute__((packed)); +typedef struct multiboot_mmap_entry multiboot_memory_map_t; + +struct multiboot_mod_list +{ + /* the memory used goes from bytes 'mod_start' to 'mod_end-1' inclusive */ + uint mod_start; + uint mod_end; + + /* Module command line */ + uint cmdline; + + /* padding to take it to 16 bytes (must be zero) */ + uint pad; +}; +typedef struct multiboot_mod_list multiboot_module_t; + +/* APM BIOS info. */ +struct multiboot_apm_info +{ + ushort version; + ushort cseg; + uint offset; + ushort cseg_16; + ushort dseg; + ushort flags; + ushort cseg_len; + ushort cseg_16_len; + ushort dseg_len; +}; + +#endif /* ! ASM_FILE */ + +#endif /* ! MULTIBOOT_HEADER */ From ff14fa7599eab0cc96e9ca43e1691d388bf33fc2 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Tue, 19 Mar 2019 13:40:32 +0100 Subject: [PATCH 16/28] stuff --- kaleid/kernel/mm/map.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 kaleid/kernel/mm/map.c diff --git a/kaleid/kernel/mm/map.c b/kaleid/kernel/mm/map.c new file mode 100644 index 0000000..6d29346 --- /dev/null +++ b/kaleid/kernel/mm/map.c @@ -0,0 +1,38 @@ +//----------------------------------------------------------------------------// +// GNU GPL OS/K // +// // +// Desc: // +// // +// // +// Copyright © 2018-2019 The OS/K Team // +// // +// This file is part of OS/K. // +// // +// OS/K is free software: you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation, either version 3 of the License, or // +// any later version. // +// // +// OS/K is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY//without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with OS/K. If not, see . // +//----------------------------------------------------------------------------// + +#include +#include + +error_t InitMemoryMap(void) +{ + ///uint MapIsValid = (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_MEM_MAP = MULTIBOOT_INFO_MEM_MAP ? 1 : 0); + KalAlwaysAssert(MapIsValid); + return EOK; +} + +void *GetMemoryMap(void) +{ + return (void*)0; +} From 99732384edb6beb48ad396eb1f881b6e39f61fe8 Mon Sep 17 00:00:00 2001 From: Julian Barathieu Date: Tue, 19 Mar 2019 13:59:06 +0100 Subject: [PATCH 17/28] Panic fix --- kaleid/include/base/assert.h | 10 ---------- kaleid/include/kernel/base.h | 4 ---- kaleid/include/kernel/panic.h | 3 ++- 3 files changed, 2 insertions(+), 15 deletions(-) diff --git a/kaleid/include/base/assert.h b/kaleid/include/base/assert.h index 97fadac..3f962bd 100644 --- a/kaleid/include/base/assert.h +++ b/kaleid/include/base/assert.h @@ -84,16 +84,6 @@ noreturn void __assert_handler(const char *, const char *, int, const char *); // #define KalAssert KalAlwaysAssert -#ifndef _OSK_SOURCE - -// When not building for OS/K, use the system's assert -#include - -#undef KalAlwaysAssert -#define KalAlwaysAssert assert - -#endif - //------------------------------------------// // When not debugging // //------------------------------------------// diff --git a/kaleid/include/kernel/base.h b/kaleid/include/kernel/base.h index f951a42..f8bdf6e 100644 --- a/kaleid/include/kernel/base.h +++ b/kaleid/include/kernel/base.h @@ -60,7 +60,6 @@ typedef enum TermColor_t TermColor_t; // Get Process_t structure of current CPU #define GetCurCPU() (cpuTable[_GetCurCPU()]) -#define PANICSTR_SIZE 1024 //------------------------------------------// @@ -72,9 +71,6 @@ struct Processor_t // CPU number, index in CPU list int index; - // Panic string - char panicStr[PANICSTR_SIZE]; - // Number of ticks since boot time ulong ticks; diff --git a/kaleid/include/kernel/panic.h b/kaleid/include/kernel/panic.h index ac80e6e..cdb53be 100644 --- a/kaleid/include/kernel/panic.h +++ b/kaleid/include/kernel/panic.h @@ -31,7 +31,8 @@ //------------------------------------------// -extern volatile char *PanicStr; +#define PANICSTR_SIZE 1024 +extern volatile char PanicStr[PANICSTR_SIZE]; //------------------------------------------// From 9f4c8196cee99c13e970902fb1ac474cfc3413d9 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Tue, 19 Mar 2019 13:59:54 +0100 Subject: [PATCH 18/28] stuff --- kaleid/kernel/init/init.c | 4 ++-- kaleid/kernel/init/table.c | 2 +- kaleid/kernel/mm/map.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/kaleid/kernel/init/init.c b/kaleid/kernel/init/init.c index 466c6fb..4c0b168 100644 --- a/kaleid/kernel/init/init.c +++ b/kaleid/kernel/init/init.c @@ -33,8 +33,8 @@ // void InitBootInfo(multiboot_info_t *mbi) { - KalAssert(mbi); - + // We need the multiboot structure + KalAlwaysAssert(mbi); extern uint MB_header; //Retrieves the bootloader informations diff --git a/kaleid/kernel/init/table.c b/kaleid/kernel/init/table.c index 10c52de..ebca750 100644 --- a/kaleid/kernel/init/table.c +++ b/kaleid/kernel/init/table.c @@ -27,7 +27,7 @@ int cpuCount = 1; Processor_t cpuTable[NCPUS] = {0}; -BootInfo_t bootTab = {0} +BootInfo_t bootTab = {0}; Terminal_t *StdOut = 0, *StdDbg = 0; volatile char *PanicStr = 0; diff --git a/kaleid/kernel/mm/map.c b/kaleid/kernel/mm/map.c index 6d29346..ef9f2d7 100644 --- a/kaleid/kernel/mm/map.c +++ b/kaleid/kernel/mm/map.c @@ -27,8 +27,8 @@ error_t InitMemoryMap(void) { - ///uint MapIsValid = (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_MEM_MAP = MULTIBOOT_INFO_MEM_MAP ? 1 : 0); - KalAlwaysAssert(MapIsValid); + uint mapIsValid = (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_MEM_MAP) == MULTIBOOT_INFO_MEM_MAP; + KalAlwaysAssert(0); return EOK; } From ef1467ea469b006ad7108c50586b59b7502fe63e Mon Sep 17 00:00:00 2001 From: Julian Barathieu Date: Tue, 19 Mar 2019 14:03:13 +0100 Subject: [PATCH 19/28] Panic fix --- kaleid/kernel/init/table.c | 6 +++--- kaleid/kernel/ke/panic.c | 8 ++++---- kaleid/kernel/mm/map.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/kaleid/kernel/init/table.c b/kaleid/kernel/init/table.c index 10c52de..bc32fdb 100644 --- a/kaleid/kernel/init/table.c +++ b/kaleid/kernel/init/table.c @@ -27,8 +27,8 @@ int cpuCount = 1; Processor_t cpuTable[NCPUS] = {0}; -BootInfo_t bootTab = {0} +BootInfo_t bootTab = {0}; Terminal_t *StdOut = 0, *StdDbg = 0; -volatile char *PanicStr = 0; -Terminal_t *stdOut = 0, *stdDbg = 0; +volatile char PanicStr[PANICSTR_SIZE] = {0}; + diff --git a/kaleid/kernel/ke/panic.c b/kaleid/kernel/ke/panic.c index 4de0bfe..134ab33 100644 --- a/kaleid/kernel/ke/panic.c +++ b/kaleid/kernel/ke/panic.c @@ -37,8 +37,8 @@ noreturn void __assert_handler(const char *msg, (void)file; (void)line; (void)func; - StartPanic("cpu%d: In function '%s', from %s line %d - assertion failed: '%s'", - _GetCurCPU(), func, file, line, msg); + StartPanic("In function '%s', from %s line %d - assertion failed: '%s'", + func, file, line, msg); } // @@ -64,11 +64,11 @@ noreturn void StartPanic(const char *fmt, ...) } va_start(ap, fmt); - vsnprintf(PanicStr, PANICSTR_SIZE, fmt, ap); + vsnprintf((char *)PanicStr, PANICSTR_SIZE, fmt, ap); va_end(ap); PrintOnTermUnlocked(StdOut, "\nPanic!\n\n"); - PrintOnTermUnlocked(StdOut, PanicStr); + PrintOnTermUnlocked(StdOut, (char *)PanicStr); HaltCPU(); } diff --git a/kaleid/kernel/mm/map.c b/kaleid/kernel/mm/map.c index 6d29346..27b1748 100644 --- a/kaleid/kernel/mm/map.c +++ b/kaleid/kernel/mm/map.c @@ -28,7 +28,7 @@ error_t InitMemoryMap(void) { ///uint MapIsValid = (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_MEM_MAP = MULTIBOOT_INFO_MEM_MAP ? 1 : 0); - KalAlwaysAssert(MapIsValid); + KalAlwaysAssert(0); return EOK; } From 965d12d2cd69419690f5a5c6890b4bf055668f39 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Tue, 19 Mar 2019 14:24:33 +0100 Subject: [PATCH 20/28] stuff --- ProjectTree | 170 ----------------------------------------- kaleid/kernel/mm/map.c | 2 +- 2 files changed, 1 insertion(+), 171 deletions(-) delete mode 100644 ProjectTree diff --git a/ProjectTree b/ProjectTree deleted file mode 100644 index 72efbbb..0000000 --- a/ProjectTree +++ /dev/null @@ -1,170 +0,0 @@ -#=----------------------------------------------------------------------------=# -# GNU GPL OS/K # -# # -# Desc: # -# # -# # -# Copyright © 2018-2019 The OS/K Team # -# # -# This file is part of OS/K. # -# # -# OS/K is free software: you can redistribute it and/or modify # -# it under the terms of the GNU General Public License as published by # -# the Free Software Foundation, either version 3 of the License, or # -# any later version. # -# # -# OS/K is distributed in the hope that it will be useful, # -# but WITHOUT ANY WARRANTY# without even the implied warranty of # -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # -# GNU General Public License for more details. # -# # -# You should have received a copy of the GNU General Public License # -# along with OS/K. If not, see . # -#=----------------------------------------------------------------------------=# - - -. -├── AUTHORS -├── boot -│   ├── folder.desc -│   ├── grub -│   │   ├── create_disk.sh -│   │   ├── grub.cfg -│   │   ├── grub-install.sh -│   │   ├── mount.sh -│   │   ├── multiboot.pdf -│   │   └── umount.sh -│   └── loader -│   ├── cpu -│   │   ├── cpu32.inc -│   │   └── cpu.inc -│   ├── io -│   │   └── terminal.inc -│   ├── loader.asm -│   ├── mem -│   │   ├── management.inc -│   │   └── structures.inc -│   └── multiboot -│   ├── check.inc -│   └── header.inc -├── build -│   ├── bin -│   │   ├── disk.img -│   │   └── kaleid -│   ├── kernel.ld -│   └── obj -│   ├── boot -│   │   ├── kaleid.x86_64 -│   │   └── loader.o -│   └── kaleid -│   ├── argv.o -│   ├── atoi.o -│   ├── atol.o -│   ├── atoul.o -│   ├── atou.o -│   ├── ctype.o -│   ├── itoa.o -│   ├── kernel -│   │   ├── cpuid.o -│   │   ├── cursor.o -│   │   ├── heap.o -│   │   ├── init -│   │   │   ├── init.o -│   │   │   └── table.o -│   │   ├── init.o -│   │   ├── io -│   │   │   ├── cursor.o -│   │   │   ├── term.o -│   │   │   └── vga.o -│   │   ├── ke -│   │   │   └── panic.o -│   │   ├── malloc.o -│   │   ├── map.o -│   │   ├── panic.o -│   │   ├── table.o -│   │   ├── term.o -│   │   └── vga.o -│   ├── ltoa.o -│   ├── mem.o -│   ├── prog.o -│   ├── rand.o -│   ├── sprintf.o -│   ├── status.o -│   ├── string.o -│   ├── strtol.o -│   ├── ultoa.o -│   └── utoa.o -├── ChangeLog -├── COPYING -├── grub.log -├── kaleid -│   ├── crtlib -│   │   ├── atoi.c -│   │   ├── ctype.c -│   │   ├── itoa.c -│   │   ├── mem.c -│   │   ├── rand.c -│   │   ├── sprintf.c -│   │   ├── status.c -│   │   ├── string.c -│   │   └── strtol.c -│   ├── extras -│   │   ├── argv.c -│   │   └── prog.c -│   ├── include -│   │   ├── base -│   │   │   ├── assert.h -│   │   │   ├── bdefs.h -│   │   │   ├── crtlib.h -│   │   │   ├── errno.h -│   │   │   ├── limits.h -│   │   │   ├── masks.h -│   │   │   └── types.h -│   │   ├── extras -│   │   │   ├── argv.h -│   │   │   ├── list.h -│   │   │   ├── locks.h -│   │   │   ├── malloc.h -│   │   │   └── prog.h -│   │   ├── kalbase.h -│   │   ├── kaleid.h -│   │   ├── kalext.h -│   │   └── kernel -│   │   ├── base.h -│   │   ├── cpu.h -│   │   ├── heap.h -│   │   ├── iomisc.h -│   │   ├── mm.h -│   │   ├── multiboot.h -│   │   ├── panic.h -│   │   ├── proc.h -│   │   ├── sched.h -│   │   └── term.h -│   └── kernel -│   ├── cpu -│   │   └── cpuid.c -│   ├── init -│   │   ├── init.c -│   │   └── table.c -│   ├── io -│   │   ├── ata.inc -│   │   ├── cursor.c -│   │   ├── term.c -│   │   └── vga.c -│   ├── ke -│   │   └── panic.c -│   ├── mm -│   │   ├── heap.c -│   │   ├── malloc.c -│   │   └── map.c -│   └── proc -│   ├── Makefile -│   └── sched.c -├── loader_disasm32.asm -├── loader_disasm64.asm -├── Makefile -├── ProjectTree -├── qemu.log -└── Readme.md - -30 directories, 112 files diff --git a/kaleid/kernel/mm/map.c b/kaleid/kernel/mm/map.c index ef9f2d7..ed39670 100644 --- a/kaleid/kernel/mm/map.c +++ b/kaleid/kernel/mm/map.c @@ -28,7 +28,7 @@ error_t InitMemoryMap(void) { uint mapIsValid = (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_MEM_MAP) == MULTIBOOT_INFO_MEM_MAP; - KalAlwaysAssert(0); + KalAlwaysAssert(mapIsValid); return EOK; } From 1aef44b1af70db0c429dc0779b5df9fbbea5eb5e Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Thu, 21 Mar 2019 13:30:17 +0100 Subject: [PATCH 21/28] Boot organization --- Makefile | 6 +-- boot/loader/loader.asm | 1 + kaleid/include/kernel/base.h | 17 +++++-- kaleid/include/kernel/mm.h | 2 + kaleid/kernel/init/init.c | 88 ++++++++++++++++++++++++------------ kaleid/kernel/mm/map.c | 12 ++++- 6 files changed, 89 insertions(+), 37 deletions(-) diff --git a/Makefile b/Makefile index 0c75b9e..4d47d3b 100644 --- a/Makefile +++ b/Makefile @@ -165,13 +165,13 @@ $(KOBJDIR)/kernel/malloc.o: $(KERNELDIR)/kernel/mm/malloc.c ./ProjectTree: ./.stylehlp_sh @cat ./.stylehlp_sh > ./ProjectTree @echo "\n" >> ./ProjectTree - @tree >> ./ProjectTree + @tree --dirsfirst >> ./ProjectTree @echo ${CL2}[$@] ${CL}Generated.${CL3} ## MAIN MAKEFILE ------------------------------------------------------------- # .PHONY: test test: all - @qemu-system-x86_64 -hda build/bin/disk.img -d cpu_reset,guest_errors,pcall,int -enable-kvm 2> qemu.log & + @qemu-system-x86_64 -m 5G -hda build/bin/disk.img -d cpu_reset,guest_errors,pcall,int -enable-kvm 2> qemu.log & @ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 64 > loader_disasm64.asm @ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 32 > loader_disasm32.asm .PHONY: test32 @@ -182,7 +182,7 @@ test32: all .PHONY: debug debug: all - @qemu-system-x86_64 -hda build/bin/disk.img -d cpu_reset,guest_errors,pcall,int -s -S -enable-kvm 2> qemu.log & + @qemu-system-x86_64 -m 5G -hda build/bin/disk.img -d cpu_reset,guest_errors,pcall,int -s -S -enable-kvm 2> qemu.log & @ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 64 > loader_disasm64.asm @ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 32 > loader_disasm32.asm diff --git a/boot/loader/loader.asm b/boot/loader/loader.asm index 8e39fa7..8441366 100644 --- a/boot/loader/loader.asm +++ b/boot/loader/loader.asm @@ -154,6 +154,7 @@ _loader64: call write ;; Launch the kernel ! + ;; XXX CHECK THE RAM BEFORE CALLING KERNEL ! call tritemporize ; Let time to see mov rdi, [mbInfo] diff --git a/kaleid/include/kernel/base.h b/kaleid/include/kernel/base.h index 476c647..9b9ed11 100644 --- a/kaleid/include/kernel/base.h +++ b/kaleid/include/kernel/base.h @@ -102,33 +102,42 @@ struct BootInfo_t { // The Bootloader infos (GRUB in our case) struct { + ushort valid; uint grubFlags; //flags uint modulesCount; //mods_count void *modulesAddr; //mods_addr - uint grubName; //boot_loader_name + char *grubName; //boot_loader_name void *mbHeaderAddr; } btldr; // Informations about drives struct { + ushort drvValid; + ushort bufferValid; uint bootDrv; //boot_device uint bufferLength; //drives_length - void *bufferAddr; //drives_addr + void *bufferAddr; //drives_addr } drives; // Informations about memory struct { + ushort memValid; + ushort mapValid; + //BIOS provided low and up memory uint lowMemory; //mem_lower uint upMemory; //mem_upper //GRUB provided memory map uint mapLength; //mmap_length - void *mapAddr; //mmap_addr + void *mapAddr; //mmap_addr + + uint ramSize; //The ram (init by map.c) } memory; // Informations about the video drive struct { + ushort valid; uint vbeControl; //vbe_control_info uint vbeModeInfo; //vbe_mode_info ushort vbeMode; //vbe_mode @@ -145,6 +154,8 @@ struct BootInfo_t // Informations about the microcode firmware (BIOS/EFI) struct { + ushort apmValid; + ushort romValid; uint apmTable; //apm_table uint romTable; //config_table } firmware; diff --git a/kaleid/include/kernel/mm.h b/kaleid/include/kernel/mm.h index 3ef8494..49072e0 100644 --- a/kaleid/include/kernel/mm.h +++ b/kaleid/include/kernel/mm.h @@ -25,6 +25,8 @@ #include #include +#define MINIMUM_RAM_SIZE 16 //Mio, the minimum RAM size. + // // Returns a pointer to the first entry of the memory map // diff --git a/kaleid/kernel/init/init.c b/kaleid/kernel/init/init.c index 4c0b168..998ae3b 100644 --- a/kaleid/kernel/init/init.c +++ b/kaleid/kernel/init/init.c @@ -29,7 +29,7 @@ // // BootInfo_t initialization. It is necessary because grub will potentially be -// wiped since it is below 1MB.... +// wiped since it is below 1MB.... And we must reorganize all that stuff. // void InitBootInfo(multiboot_info_t *mbi) { @@ -37,41 +37,69 @@ void InitBootInfo(multiboot_info_t *mbi) KalAlwaysAssert(mbi); extern uint MB_header; - //Retrieves the bootloader informations - GetBootInfo(btldr).grubFlags = mbi->flags; - GetBootInfo(btldr).grubName = (mbi->boot_loader_name); - GetBootInfo(btldr).modulesCount = mbi->mods_count; - GetBootInfo(btldr).modulesAddr = (void*)(ullong)mbi->mods_addr; - GetBootInfo(btldr).mbHeaderAddr = (void*)(ullong)&MB_header; - DebugLog("\n[InitBootInfo] %s\n", GetBootInfo(btldr).grubName); - DebugLog("[InitBootInfo] Header address : %p, modules address : %p\n", - GetBootInfo(btldr).mbHeaderAddr, GetBootInfo(btldr).modulesAddr); - DebugLog("[InitBootInfo] GRUB flags : %x\n", GetBootInfo(btldr).grubFlags); + //Retrieves the bootloader flags to ensure infos are valid + GetBootInfo(btldr).grubFlags = mbi->flags; + if ( + (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_BOOT_LOADER_NAME) == MULTIBOOT_INFO_BOOT_LOADER_NAME && + (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_MODS) == MULTIBOOT_INFO_MODS + ) { + GetBootInfo(btldr).grubName = (char*)(ullong)(mbi->boot_loader_name); + GetBootInfo(btldr).modulesCount = mbi->mods_count; + GetBootInfo(btldr).modulesAddr = (void*)(ullong)mbi->mods_addr; + GetBootInfo(btldr).mbHeaderAddr = (void*)(ullong)&MB_header; + GetBootInfo(btldr).valid = 1; + } //Retrieves the drives informations - GetBootInfo(drives).bootDrv = mbi->boot_device; - GetBootInfo(drives).bufferLength = mbi->drives_length; - GetBootInfo(drives).bufferAddr = (void*)(ullong)mbi->drives_addr; - DebugLog("[InitBootInfo] Root drive : %x\n", - GetBootInfo(drives).bootDrv); + if ((GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_DRIVE_INFO) == MULTIBOOT_INFO_DRIVE_INFO) { + GetBootInfo(drives).bufferLength = mbi->drives_length; + GetBootInfo(drives).bufferAddr = (void*)(ullong)mbi->drives_addr; + GetBootInfo(drives).bufferValid = 1; + } + if ((GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_BOOTDEV) == MULTIBOOT_INFO_BOOTDEV) { + GetBootInfo(drives).bootDrv = mbi->boot_device; + GetBootInfo(drives).drvValid = 1; + } //Retrieves the memory informations - GetBootInfo(memory).lowMemory = mbi->mem_lower; - GetBootInfo(memory).upMemory = mbi->mem_upper; - GetBootInfo(memory).mapAddr = (void*)(ullong)mbi->mmap_addr; - GetBootInfo(memory).mapLength = mbi->mmap_length; - DebugLog("[InitBootInfo] Low memory : %d Kio, Up memory : %d Mio\n", - GetBootInfo(memory).lowMemory, GetBootInfo(memory).upMemory / (MB/KB)); - DebugLog("[InitBootInfo] Memory map address : %p, length : %d\n", - GetBootInfo(memory).mapAddr, GetBootInfo(memory).mapLength); + if ((GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_MEMORY) == MULTIBOOT_INFO_MEMORY) { + GetBootInfo(memory).lowMemory = mbi->mem_lower; + GetBootInfo(memory).upMemory = mbi->mem_upper; + GetBootInfo(memory).memValid = 1; + } + if ((GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_MEM_MAP) == MULTIBOOT_INFO_MEM_MAP) { + GetBootInfo(memory).mapAddr = (void*)(ullong)mbi->mmap_addr; + GetBootInfo(memory).mapLength = mbi->mmap_length; + GetBootInfo(memory).mapValid = 1; + } // XXX assign video infos, but unused at this time // Retrieves the firmware infos - GetBootInfo(firmware).apmTable = mbi->apm_table; - GetBootInfo(firmware).romTable = mbi->config_table; - DebugLog("[InitBootInfo] APM Table : %p, ROM Table : %p\n", - GetBootInfo(firmware).apmTable, GetBootInfo(firmware).romTable); + if ((GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_CONFIG_TABLE) == MULTIBOOT_INFO_CONFIG_TABLE) { + GetBootInfo(firmware).romTable = mbi->config_table; + GetBootInfo(firmware).romValid = 1; + } + if ((GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_APM_TABLE ) == MULTIBOOT_INFO_APM_TABLE ) { + GetBootInfo(firmware).apmTable = mbi->apm_table; + GetBootInfo(firmware).apmValid = 1; + } + + //Now we check (debug) + DebugLog("\n[InitBootInfo] Boot loader %s", + GetBootInfo(btldr).valid ? "OK" : ""); + DebugLog("\n[InitBootInfo] Boot drive %s", + GetBootInfo(drives).drvValid ? "OK" : ""); + DebugLog("\n[InitBootInfo] Disk buffer %s", + GetBootInfo(drives).bufferValid ? "OK" : ""); + DebugLog("\n[InitBootInfo] Basic mem %s", + GetBootInfo(memory).memValid ? "OK" : ""); + DebugLog("\n[InitBootInfo] Memory map %s", + GetBootInfo(memory).mapValid ? "OK" : ""); + DebugLog("\n[InitBootInfo] ROM table %s", + GetBootInfo(firmware).romValid ? "OK" : ""); + DebugLog("\n[InitBootInfo] APM table %s", + GetBootInfo(firmware).apmValid ? "OK\n" : "\n"); } @@ -96,7 +124,9 @@ noreturn void StartKern(multiboot_info_t *mbInfo, int mbMagic) InitBootInfo(mbInfo); //Memory mapping - InitMemoryMap(); + error_t mapBad = InitMemoryMap(); + if (mapBad) + StartPanic("[Init] The memory map failed to initialize. Error : %d", mapBad); // We're out KernLog("\n[Init] Evil never dies !"); diff --git a/kaleid/kernel/mm/map.c b/kaleid/kernel/mm/map.c index ed39670..5ea56c6 100644 --- a/kaleid/kernel/mm/map.c +++ b/kaleid/kernel/mm/map.c @@ -27,8 +27,16 @@ error_t InitMemoryMap(void) { - uint mapIsValid = (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_MEM_MAP) == MULTIBOOT_INFO_MEM_MAP; - KalAlwaysAssert(mapIsValid); + if (!GetBootInfo(memory).memValid && GetBootInfo(memory).mapValid) + return ENXIO; + DebugLog("[InitMemoryMap] Memory map address : %p, length : %d\n", + GetBootInfo(memory).mapAddr, GetBootInfo(memory).mapLength); + + if ((GetBootInfo(memory).upMemory / (MB/KB)) <= MINIMUM_RAM_SIZE) //XXX before loading kernel... + return ENOMEM; + DebugLog("[InitMemoryMap] Low memory : %d Kio, Up memory : %d Mio\n", + GetBootInfo(memory).lowMemory, GetBootInfo(memory).upMemory / (MB/KB)); + return EOK; } From 5a1de9020823d2e345c8e5bf99c9a6bc56a6cf50 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Thu, 21 Mar 2019 13:30:27 +0100 Subject: [PATCH 22/28] Boot organization --- ProjectTree | 170 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 ProjectTree diff --git a/ProjectTree b/ProjectTree new file mode 100644 index 0000000..74b8d52 --- /dev/null +++ b/ProjectTree @@ -0,0 +1,170 @@ +#=----------------------------------------------------------------------------=# +# GNU GPL OS/K # +# # +# Desc: # +# # +# # +# Copyright © 2018-2019 The OS/K Team # +# # +# This file is part of OS/K. # +# # +# OS/K is free software: you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation, either version 3 of the License, or # +# any later version. # +# # +# OS/K is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY# without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with OS/K. If not, see . # +#=----------------------------------------------------------------------------=# + + +. +├── boot +│   ├── grub +│   │   ├── create_disk.sh +│   │   ├── grub.cfg +│   │   ├── grub-install.sh +│   │   ├── mount.sh +│   │   ├── multiboot.pdf +│   │   └── umount.sh +│   ├── loader +│   │   ├── cpu +│   │   │   ├── cpu32.inc +│   │   │   └── cpu.inc +│   │   ├── io +│   │   │   └── terminal.inc +│   │   ├── mem +│   │   │   ├── management.inc +│   │   │   └── structures.inc +│   │   ├── multiboot +│   │   │   ├── check.inc +│   │   │   └── header.inc +│   │   └── loader.asm +│   └── folder.desc +├── build +│   ├── bin +│   │   ├── disk.img +│   │   └── kaleid +│   ├── obj +│   │   ├── boot +│   │   │   ├── kaleid.x86_64 +│   │   │   └── loader.o +│   │   └── kaleid +│   │   ├── kernel +│   │   │   ├── init +│   │   │   │   ├── init.o +│   │   │   │   └── table.o +│   │   │   ├── io +│   │   │   │   ├── cursor.o +│   │   │   │   ├── term.o +│   │   │   │   └── vga.o +│   │   │   ├── ke +│   │   │   │   └── panic.o +│   │   │   ├── cpuid.o +│   │   │   ├── cursor.o +│   │   │   ├── heap.o +│   │   │   ├── init.o +│   │   │   ├── malloc.o +│   │   │   ├── map.o +│   │   │   ├── panic.o +│   │   │   ├── table.o +│   │   │   ├── term.o +│   │   │   └── vga.o +│   │   ├── argv.o +│   │   ├── atoi.o +│   │   ├── atol.o +│   │   ├── atoul.o +│   │   ├── atou.o +│   │   ├── ctype.o +│   │   ├── itoa.o +│   │   ├── ltoa.o +│   │   ├── mem.o +│   │   ├── prog.o +│   │   ├── rand.o +│   │   ├── sprintf.o +│   │   ├── status.o +│   │   ├── string.o +│   │   ├── strtol.o +│   │   ├── ultoa.o +│   │   └── utoa.o +│   └── kernel.ld +├── kaleid +│   ├── crtlib +│   │   ├── atoi.c +│   │   ├── ctype.c +│   │   ├── itoa.c +│   │   ├── mem.c +│   │   ├── rand.c +│   │   ├── sprintf.c +│   │   ├── status.c +│   │   ├── string.c +│   │   └── strtol.c +│   ├── extras +│   │   ├── argv.c +│   │   └── prog.c +│   ├── include +│   │   ├── base +│   │   │   ├── assert.h +│   │   │   ├── bdefs.h +│   │   │   ├── crtlib.h +│   │   │   ├── errno.h +│   │   │   ├── limits.h +│   │   │   ├── masks.h +│   │   │   └── types.h +│   │   ├── extras +│   │   │   ├── argv.h +│   │   │   ├── list.h +│   │   │   ├── locks.h +│   │   │   ├── malloc.h +│   │   │   └── prog.h +│   │   ├── kernel +│   │   │   ├── base.h +│   │   │   ├── cpu.h +│   │   │   ├── heap.h +│   │   │   ├── iomisc.h +│   │   │   ├── mm.h +│   │   │   ├── multiboot.h +│   │   │   ├── panic.h +│   │   │   ├── proc.h +│   │   │   ├── sched.h +│   │   │   └── term.h +│   │   ├── kalbase.h +│   │   ├── kaleid.h +│   │   └── kalext.h +│   └── kernel +│   ├── cpu +│   │   └── cpuid.c +│   ├── init +│   │   ├── init.c +│   │   └── table.c +│   ├── io +│   │   ├── ata.inc +│   │   ├── cursor.c +│   │   ├── term.c +│   │   └── vga.c +│   ├── ke +│   │   └── panic.c +│   ├── mm +│   │   ├── heap.c +│   │   ├── malloc.c +│   │   └── map.c +│   └── proc +│   ├── Makefile +│   └── sched.c +├── AUTHORS +├── ChangeLog +├── COPYING +├── grub.log +├── loader_disasm32.asm +├── loader_disasm64.asm +├── Makefile +├── ProjectTree +├── qemu.log +└── Readme.md + +30 directories, 112 files From 53be658a4a09a56d8678c63a9128e2d94798b4af Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Fri, 22 Mar 2019 13:18:20 +0100 Subject: [PATCH 23/28] stuff --- kaleid/kernel/mm/malloc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kaleid/kernel/mm/malloc.c b/kaleid/kernel/mm/malloc.c index e63fa77..58f8bf3 100644 --- a/kaleid/kernel/mm/malloc.c +++ b/kaleid/kernel/mm/malloc.c @@ -66,6 +66,6 @@ error_t KalAllocMemory(void **ptr, size_t req, int flags, size_t align) error_t KalFreeMemory(void *ptr) { (void)ptr; - return 0; + return EOK; } From 5fc538c9d2ae15068abd8cb594c88278836bbba6 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Fri, 22 Mar 2019 15:03:41 +0100 Subject: [PATCH 24/28] stuff ! --- boot/loader/loader.asm | 19 ++++++++++------ boot/loader/multiboot/header.inc | 7 +++++- kaleid/kernel/init/init.c | 37 ++++++++++++++++---------------- 3 files changed, 36 insertions(+), 27 deletions(-) diff --git a/boot/loader/loader.asm b/boot/loader/loader.asm index 8441366..a15920c 100644 --- a/boot/loader/loader.asm +++ b/boot/loader/loader.asm @@ -44,6 +44,11 @@ MB_header: dd MB_HEADER_MAGIC dd MB_HEADER_FLAGS dd CHECKSUM + times 5 dd 0x0 + dd MB_VIDEO_MODE + dd MB_VIDEO_WIDTH + dd MB_VIDEO_HEIGHT + dd MB_VIDEO_DEPTH [section .text] @@ -71,7 +76,7 @@ Error: call write32 pop esi jmp Die -.ergo : db 219, 219, 219, " Error " +.ergo : db 219, 219, 219, " OS/K Loader Error " .code : db "00" db 0x0 ; ---------------------------------------------------------------------------- ; @@ -104,6 +109,12 @@ mbMagic dq 0 lbegin: call clear ; Clear the screen + push esi ; Print the logo + mov bl, 0x0E + mov esi, LOGO + call write32 + pop esi + ;; BEGIN OF CHECKLIST call MB_check ; Check Multiboot State, ERR 01 @@ -115,12 +126,6 @@ lbegin: call Setup_paging ; Enable paging call Go64 ; Prepare switch into long mode - push esi ; Print the logo - mov bl, 0x0E - mov esi, LOGO - call write32 - pop esi - ;call disable_cursor lgdt [GDT64.pointer] diff --git a/boot/loader/multiboot/header.inc b/boot/loader/multiboot/header.inc index 06f89a4..0cfea0c 100644 --- a/boot/loader/multiboot/header.inc +++ b/boot/loader/multiboot/header.inc @@ -27,8 +27,13 @@ MB_AOUT_KLUDGE equ 0 << 16 ; if we are not an ELF executable MB_ALIGN equ 1 << 0 ; Ask to align loaded modules on page boundaries MB_MEMINFO equ 1 << 1 ; Ask to provide memory map +MB_VIDEOINFO equ 1 << 2 ; Ask to provide video infos +MB_VIDEO_MODE equ 0x1 ; Text mode +MB_VIDEO_WIDTH equ 80 +MB_VIDEO_HEIGHT equ 24 +MB_VIDEO_DEPTH equ 0x0 MB_HEADER_MAGIC equ 0x1badb002 MB_GRUB_MAGIC equ 0x2badb002 -MB_HEADER_FLAGS equ MB_AOUT_KLUDGE|MB_ALIGN|MB_MEMINFO +MB_HEADER_FLAGS equ MB_AOUT_KLUDGE|MB_ALIGN|MB_MEMINFO|MB_VIDEOINFO CHECKSUM equ -(MB_HEADER_MAGIC + MB_HEADER_FLAGS) KERNEL_STACK equ 0x00200000 ; Stack starts at the 2mb address & grows down diff --git a/kaleid/kernel/init/init.c b/kaleid/kernel/init/init.c index 998ae3b..a74e80e 100644 --- a/kaleid/kernel/init/init.c +++ b/kaleid/kernel/init/init.c @@ -40,34 +40,33 @@ void InitBootInfo(multiboot_info_t *mbi) //Retrieves the bootloader flags to ensure infos are valid GetBootInfo(btldr).grubFlags = mbi->flags; - if ( - (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_BOOT_LOADER_NAME) == MULTIBOOT_INFO_BOOT_LOADER_NAME && - (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_MODS) == MULTIBOOT_INFO_MODS - ) { + if (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_BOOT_LOADER_NAME) { GetBootInfo(btldr).grubName = (char*)(ullong)(mbi->boot_loader_name); - GetBootInfo(btldr).modulesCount = mbi->mods_count; - GetBootInfo(btldr).modulesAddr = (void*)(ullong)mbi->mods_addr; GetBootInfo(btldr).mbHeaderAddr = (void*)(ullong)&MB_header; GetBootInfo(btldr).valid = 1; } + if (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_MODS) { + GetBootInfo(btldr).modulesCount = mbi->mods_count; + GetBootInfo(btldr).modulesAddr = (void*)(ullong)mbi->mods_addr; + } //Retrieves the drives informations - if ((GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_DRIVE_INFO) == MULTIBOOT_INFO_DRIVE_INFO) { + if (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_DRIVE_INFO) { GetBootInfo(drives).bufferLength = mbi->drives_length; GetBootInfo(drives).bufferAddr = (void*)(ullong)mbi->drives_addr; GetBootInfo(drives).bufferValid = 1; } - if ((GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_BOOTDEV) == MULTIBOOT_INFO_BOOTDEV) { + if (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_BOOTDEV) { GetBootInfo(drives).bootDrv = mbi->boot_device; GetBootInfo(drives).drvValid = 1; } //Retrieves the memory informations - if ((GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_MEMORY) == MULTIBOOT_INFO_MEMORY) { + if (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_MEMORY) { GetBootInfo(memory).lowMemory = mbi->mem_lower; GetBootInfo(memory).upMemory = mbi->mem_upper; GetBootInfo(memory).memValid = 1; } - if ((GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_MEM_MAP) == MULTIBOOT_INFO_MEM_MAP) { + if (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_MEM_MAP) { GetBootInfo(memory).mapAddr = (void*)(ullong)mbi->mmap_addr; GetBootInfo(memory).mapLength = mbi->mmap_length; GetBootInfo(memory).mapValid = 1; @@ -76,30 +75,30 @@ void InitBootInfo(multiboot_info_t *mbi) // XXX assign video infos, but unused at this time // Retrieves the firmware infos - if ((GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_CONFIG_TABLE) == MULTIBOOT_INFO_CONFIG_TABLE) { + if (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_CONFIG_TABLE) { GetBootInfo(firmware).romTable = mbi->config_table; GetBootInfo(firmware).romValid = 1; } - if ((GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_APM_TABLE ) == MULTIBOOT_INFO_APM_TABLE ) { + if (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_APM_TABLE) { GetBootInfo(firmware).apmTable = mbi->apm_table; GetBootInfo(firmware).apmValid = 1; } //Now we check (debug) DebugLog("\n[InitBootInfo] Boot loader %s", - GetBootInfo(btldr).valid ? "OK" : ""); + GetBootInfo(btldr).valid ? "present" : ""); DebugLog("\n[InitBootInfo] Boot drive %s", - GetBootInfo(drives).drvValid ? "OK" : ""); + GetBootInfo(drives).drvValid ? "present" : ""); DebugLog("\n[InitBootInfo] Disk buffer %s", - GetBootInfo(drives).bufferValid ? "OK" : ""); + GetBootInfo(drives).bufferValid ? "present" : ""); DebugLog("\n[InitBootInfo] Basic mem %s", - GetBootInfo(memory).memValid ? "OK" : ""); + GetBootInfo(memory).memValid ? "present" : ""); DebugLog("\n[InitBootInfo] Memory map %s", - GetBootInfo(memory).mapValid ? "OK" : ""); + GetBootInfo(memory).mapValid ? "present" : ""); DebugLog("\n[InitBootInfo] ROM table %s", - GetBootInfo(firmware).romValid ? "OK" : ""); + GetBootInfo(firmware).romValid ? "present" : ""); DebugLog("\n[InitBootInfo] APM table %s", - GetBootInfo(firmware).apmValid ? "OK\n" : "\n"); + GetBootInfo(firmware).apmValid ? "present\n" : "\n"); } From bc82695e267bc668d5b34d9f11fbf0d015f78911 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Fri, 22 Mar 2019 15:16:37 +0100 Subject: [PATCH 25/28] stuff ! --- kaleid/kernel/init/init.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/kaleid/kernel/init/init.c b/kaleid/kernel/init/init.c index a74e80e..67055aa 100644 --- a/kaleid/kernel/init/init.c +++ b/kaleid/kernel/init/init.c @@ -33,9 +33,12 @@ // void InitBootInfo(multiboot_info_t *mbi) { + extern uint MB_header; + char okStr[] = "available"; + char noStr[] = "unavailable"; + // We need the multiboot structure KalAlwaysAssert(mbi); - extern uint MB_header; //Retrieves the bootloader flags to ensure infos are valid GetBootInfo(btldr).grubFlags = mbi->flags; @@ -85,20 +88,23 @@ void InitBootInfo(multiboot_info_t *mbi) } //Now we check (debug) + DebugLog("\n[InitBootInfo] Flags : %b", + GetBootInfo(btldr).grubFlags); DebugLog("\n[InitBootInfo] Boot loader %s", - GetBootInfo(btldr).valid ? "present" : ""); + GetBootInfo(btldr).valid ? &okStr : &noStr); DebugLog("\n[InitBootInfo] Boot drive %s", - GetBootInfo(drives).drvValid ? "present" : ""); + GetBootInfo(drives).drvValid ? &okStr : &noStr); DebugLog("\n[InitBootInfo] Disk buffer %s", - GetBootInfo(drives).bufferValid ? "present" : ""); + GetBootInfo(drives).bufferValid ? &okStr : &noStr); DebugLog("\n[InitBootInfo] Basic mem %s", - GetBootInfo(memory).memValid ? "present" : ""); + GetBootInfo(memory).memValid ? &okStr : &noStr); DebugLog("\n[InitBootInfo] Memory map %s", - GetBootInfo(memory).mapValid ? "present" : ""); + GetBootInfo(memory).mapValid ? &okStr : &noStr); DebugLog("\n[InitBootInfo] ROM table %s", - GetBootInfo(firmware).romValid ? "present" : ""); + GetBootInfo(firmware).romValid ? &okStr : &noStr); DebugLog("\n[InitBootInfo] APM table %s", - GetBootInfo(firmware).apmValid ? "present\n" : "\n"); + GetBootInfo(firmware).apmValid ? &okStr : &noStr); + DebugLog("\n"); } From 858ed26e78b50e30a5d0130f3ee1b131c6645405 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Fri, 22 Mar 2019 15:42:02 +0100 Subject: [PATCH 26/28] clean-up --- kaleid/kernel/init/init.c | 40 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/kaleid/kernel/init/init.c b/kaleid/kernel/init/init.c index 67055aa..7941eb6 100644 --- a/kaleid/kernel/init/init.c +++ b/kaleid/kernel/init/init.c @@ -22,7 +22,6 @@ // along with OS/K. If not, see . // //----------------------------------------------------------------------------// -#include #include #include #include @@ -34,8 +33,8 @@ void InitBootInfo(multiboot_info_t *mbi) { extern uint MB_header; - char okStr[] = "available"; - char noStr[] = "unavailable"; + char *okStr = "available"; + char *noStr = "unavailable"; // We need the multiboot structure KalAlwaysAssert(mbi); @@ -88,23 +87,22 @@ void InitBootInfo(multiboot_info_t *mbi) } //Now we check (debug) - DebugLog("\n[InitBootInfo] Flags : %b", - GetBootInfo(btldr).grubFlags); - DebugLog("\n[InitBootInfo] Boot loader %s", - GetBootInfo(btldr).valid ? &okStr : &noStr); - DebugLog("\n[InitBootInfo] Boot drive %s", - GetBootInfo(drives).drvValid ? &okStr : &noStr); - DebugLog("\n[InitBootInfo] Disk buffer %s", - GetBootInfo(drives).bufferValid ? &okStr : &noStr); - DebugLog("\n[InitBootInfo] Basic mem %s", - GetBootInfo(memory).memValid ? &okStr : &noStr); - DebugLog("\n[InitBootInfo] Memory map %s", - GetBootInfo(memory).mapValid ? &okStr : &noStr); - DebugLog("\n[InitBootInfo] ROM table %s", - GetBootInfo(firmware).romValid ? &okStr : &noStr); - DebugLog("\n[InitBootInfo] APM table %s", - GetBootInfo(firmware).apmValid ? &okStr : &noStr); - DebugLog("\n"); + /*DebugLog("[InitBootInfo] Flags : %b\n\n", + GetBootInfo(btldr).grubFlags);*/ + DebugLog("[InitBootInfo] Boot loader %s\n", + GetBootInfo(btldr).valid ? okStr : noStr); + DebugLog("[InitBootInfo] Boot drive %s\n", + GetBootInfo(drives).drvValid ? okStr : noStr); + DebugLog("[InitBootInfo] Disk buffer %s\n", + GetBootInfo(drives).bufferValid ? okStr : noStr); + DebugLog("[InitBootInfo] Basic mem %s\n", + GetBootInfo(memory).memValid ? okStr : noStr); + DebugLog("[InitBootInfo] Memory map %s\n", + GetBootInfo(memory).mapValid ? okStr : noStr); + DebugLog("[InitBootInfo] ROM table %s\n", + GetBootInfo(firmware).romValid ? okStr : noStr); + DebugLog("[InitBootInfo] APM table %s\n\n", + GetBootInfo(firmware).apmValid ? okStr : noStr); } @@ -123,7 +121,7 @@ noreturn void StartKern(multiboot_info_t *mbInfo, int mbMagic) KernLog("%c%c%c OS/K\n\n", 219, 219, 219); KalAlwaysAssert(mbMagic == MULTIBOOT_BOOTLOADER_MAGIC); - KernLog("[Init] We have magic : %x\n", mbMagic); + KernLog("[Init] We have magic : %x\n\n", mbMagic); //Initialize the BootInfo_t structure InitBootInfo(mbInfo); From d39c8297557f6d0de1f9c218997700f222334bb1 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Fri, 22 Mar 2019 23:51:48 +0100 Subject: [PATCH 27/28] Makefile stuff --- Makefile | 54 +++++++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/Makefile b/Makefile index 4d47d3b..b188beb 100644 --- a/Makefile +++ b/Makefile @@ -71,55 +71,55 @@ kal_com_obj= $(KOBJDIR)/atoi.o $(KOBJDIR)/ctype.o \ $(KOBJDIR)/utoa.o $(KOBJDIR)/ltoa.o \ $(KOBJDIR)/ultoa.o -$(KOBJDIR)/atoi.o: $(KERNELDIR)/crtlib/atoi.c +$(KOBJDIR)/atoi.o: $(KERNELDIR)/crtlib/atoi.c $(KERNELDIR)/include/*/*.h @$(KCC) -D_NEED_ATOI $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/atol.o: $(KERNELDIR)/crtlib/atoi.c +$(KOBJDIR)/atol.o: $(KERNELDIR)/crtlib/atoi.c $(KERNELDIR)/include/*/*.h @$(KCC) -D_NEED_ATOL $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/atou.o: $(KERNELDIR)/crtlib/atoi.c +$(KOBJDIR)/atou.o: $(KERNELDIR)/crtlib/atoi.c $(KERNELDIR)/include/*/*.h @$(KCC) -D_NEED_ATOU $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/atoul.o: $(KERNELDIR)/crtlib/atoi.c +$(KOBJDIR)/atoul.o: $(KERNELDIR)/crtlib/atoi.c $(KERNELDIR)/include/*/*.h @$(KCC) -D_NEED_ATOUL $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/ctype.o: $(KERNELDIR)/crtlib/ctype.c +$(KOBJDIR)/ctype.o: $(KERNELDIR)/crtlib/ctype.c $(KERNELDIR)/include/*/*.h @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/itoa.o: $(KERNELDIR)/crtlib/itoa.c +$(KOBJDIR)/itoa.o: $(KERNELDIR)/crtlib/itoa.c $(KERNELDIR)/include/*/*.h @$(KCC) -D_NEED_ITOA $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/ltoa.o: $(KERNELDIR)/crtlib/itoa.c +$(KOBJDIR)/ltoa.o: $(KERNELDIR)/crtlib/itoa.c $(KERNELDIR)/include/*/*.h @$(KCC) -D_NEED_LTOA $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/utoa.o: $(KERNELDIR)/crtlib/itoa.c +$(KOBJDIR)/utoa.o: $(KERNELDIR)/crtlib/itoa.c $(KERNELDIR)/include/*/*.h @$(KCC) -D_NEED_UTOA $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/ultoa.o: $(KERNELDIR)/crtlib/itoa.c +$(KOBJDIR)/ultoa.o: $(KERNELDIR)/crtlib/itoa.c $(KERNELDIR)/include/*/*.h @$(KCC) -D_NEED_ULTOA $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/mem.o: $(KERNELDIR)/crtlib/mem.c +$(KOBJDIR)/mem.o: $(KERNELDIR)/crtlib/mem.c $(KERNELDIR)/include/*/*.h @$(KCC) -fno-strict-aliasing $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/rand.o: $(KERNELDIR)/crtlib/rand.c +$(KOBJDIR)/rand.o: $(KERNELDIR)/crtlib/rand.c $(KERNELDIR)/include/*/*.h @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/sprintf.o: $(KERNELDIR)/crtlib/sprintf.c +$(KOBJDIR)/sprintf.o: $(KERNELDIR)/crtlib/sprintf.c $(KERNELDIR)/include/*/*.h @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/status.o: $(KERNELDIR)/crtlib/status.c +$(KOBJDIR)/status.o: $(KERNELDIR)/crtlib/status.c $(KERNELDIR)/include/*/*.h @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/string.o: $(KERNELDIR)/crtlib/string.c +$(KOBJDIR)/string.o: $(KERNELDIR)/crtlib/string.c $(KERNELDIR)/include/*/*.h @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/strtol.o: $(KERNELDIR)/crtlib/strtol.c +$(KOBJDIR)/strtol.o: $(KERNELDIR)/crtlib/strtol.c $(KERNELDIR)/include/*/*.h @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/argv.o: $(KERNELDIR)/extras/argv.c +$(KOBJDIR)/argv.o: $(KERNELDIR)/extras/argv.c $(KERNELDIR)/include/*/*.h @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/prog.o: $(KERNELDIR)/extras/prog.c +$(KOBJDIR)/prog.o: $(KERNELDIR)/extras/prog.c $(KERNELDIR)/include/*/*.h @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} @@ -130,34 +130,34 @@ kal_kern_obj= $(KOBJDIR)/kernel/cpuid.o $(KOBJDIR)/kernel/init.o \ $(KOBJDIR)/kernel/panic.o $(KOBJDIR)/kernel/map.o \ $(KOBJDIR)/kernel/heap.o $(KOBJDIR)/kernel/malloc.o -$(KOBJDIR)/kernel/cpuid.o: $(KERNELDIR)/kernel/cpu/cpuid.c +$(KOBJDIR)/kernel/cpuid.o: $(KERNELDIR)/kernel/cpu/cpuid.c $(KERNELDIR)/include/*/*.h @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/kernel/init.o: $(KERNELDIR)/kernel/init/init.c +$(KOBJDIR)/kernel/init.o: $(KERNELDIR)/kernel/init/init.c $(KERNELDIR)/include/*/*.h @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/kernel/table.o: $(KERNELDIR)/kernel/init/table.c +$(KOBJDIR)/kernel/table.o: $(KERNELDIR)/kernel/init/table.c $(KERNELDIR)/include/*/*.h @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/kernel/cursor.o: $(KERNELDIR)/kernel/io/cursor.c +$(KOBJDIR)/kernel/cursor.o: $(KERNELDIR)/kernel/io/cursor.c $(KERNELDIR)/include/*/*.h @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/kernel/term.o: $(KERNELDIR)/kernel/io/term.c +$(KOBJDIR)/kernel/term.o: $(KERNELDIR)/kernel/io/term.c $(KERNELDIR)/include/*/*.h @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/kernel/vga.o: $(KERNELDIR)/kernel/io/vga.c +$(KOBJDIR)/kernel/vga.o: $(KERNELDIR)/kernel/io/vga.c $(KERNELDIR)/include/*/*.h @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/kernel/panic.o: $(KERNELDIR)/kernel/ke/panic.c +$(KOBJDIR)/kernel/panic.o: $(KERNELDIR)/kernel/ke/panic.c $(KERNELDIR)/include/*/*.h @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/kernel/map.o: $(KERNELDIR)/kernel/mm/map.c +$(KOBJDIR)/kernel/map.o: $(KERNELDIR)/kernel/mm/map.c $(KERNELDIR)/include/*/*.h @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/kernel/heap.o: $(KERNELDIR)/kernel/mm/heap.c +$(KOBJDIR)/kernel/heap.o: $(KERNELDIR)/kernel/mm/heap.c $(KERNELDIR)/include/*/*.h @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} -$(KOBJDIR)/kernel/malloc.o: $(KERNELDIR)/kernel/mm/malloc.c +$(KOBJDIR)/kernel/malloc.o: $(KERNELDIR)/kernel/mm/malloc.c $(KERNELDIR)/include/*/*.h @$(KCC) $< -o $@ @echo ${CL2}[$@] ${CL}Compiled.${CL3} From 75262f81ee80053a60d613f02a9eee9e73c1beb0 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Sat, 23 Mar 2019 00:07:05 +0100 Subject: [PATCH 28/28] Makefile stuff --- Makefile | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index b188beb..a5bfb2f 100644 --- a/Makefile +++ b/Makefile @@ -61,14 +61,14 @@ all : OS/K ## KALEID MAKEFILE ----------------------------------------------------------- # # Common objects -kal_com_obj= $(KOBJDIR)/atoi.o $(KOBJDIR)/ctype.o \ - $(KOBJDIR)/itoa.o $(KOBJDIR)/mem.o \ - $(KOBJDIR)/rand.o $(KOBJDIR)/sprintf.o \ - $(KOBJDIR)/status.o $(KOBJDIR)/string.o \ - $(KOBJDIR)/strtol.o $(KOBJDIR)/argv.o \ - $(KOBJDIR)/prog.o $(KOBJDIR)/atol.o \ - $(KOBJDIR)/atou.o $(KOBJDIR)/atoul.o \ - $(KOBJDIR)/utoa.o $(KOBJDIR)/ltoa.o \ +kal_com_obj= $(KOBJDIR)/atoi.o $(KOBJDIR)/ctype.o \ + $(KOBJDIR)/itoa.o $(KOBJDIR)/mem.o \ + $(KOBJDIR)/rand.o $(KOBJDIR)/sprintf.o \ + $(KOBJDIR)/status.o $(KOBJDIR)/string.o \ + $(KOBJDIR)/strtol.o $(KOBJDIR)/argv.o \ + $(KOBJDIR)/prog.o $(KOBJDIR)/atol.o \ + $(KOBJDIR)/atou.o $(KOBJDIR)/atoul.o \ + $(KOBJDIR)/utoa.o $(KOBJDIR)/ltoa.o \ $(KOBJDIR)/ultoa.o $(KOBJDIR)/atoi.o: $(KERNELDIR)/crtlib/atoi.c $(KERNELDIR)/include/*/*.h @@ -124,10 +124,10 @@ $(KOBJDIR)/prog.o: $(KERNELDIR)/extras/prog.c $(KERNELDIR)/include/*/*.h @echo ${CL2}[$@] ${CL}Compiled.${CL3} # Kernel objects -kal_kern_obj= $(KOBJDIR)/kernel/cpuid.o $(KOBJDIR)/kernel/init.o \ - $(KOBJDIR)/kernel/table.o $(KOBJDIR)/kernel/cursor.o \ - $(KOBJDIR)/kernel/term.o $(KOBJDIR)/kernel/vga.o \ - $(KOBJDIR)/kernel/panic.o $(KOBJDIR)/kernel/map.o \ +kal_kern_obj= $(KOBJDIR)/kernel/cpuid.o $(KOBJDIR)/kernel/init.o \ + $(KOBJDIR)/kernel/table.o $(KOBJDIR)/kernel/cursor.o \ + $(KOBJDIR)/kernel/term.o $(KOBJDIR)/kernel/vga.o \ + $(KOBJDIR)/kernel/panic.o $(KOBJDIR)/kernel/map.o \ $(KOBJDIR)/kernel/heap.o $(KOBJDIR)/kernel/malloc.o $(KOBJDIR)/kernel/cpuid.o: $(KERNELDIR)/kernel/cpu/cpuid.c $(KERNELDIR)/include/*/*.h