This commit is contained in:
2026-09-25 15:39:16 +02:00
committed by Marvin Friedrich
parent b9ee87aed4
commit 6e92817f3f
35 changed files with 271 additions and 157 deletions
+5 -2
View File
@@ -1,8 +1,8 @@
#include <zinnia/cmdline.h>
#include <zinnia/init.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include <zinnia/cmdline.h>
#include <zinnia/init.h>
// Defined in linker script.
extern const struct cmdline_option* __ld_cmdline_start[];
@@ -12,6 +12,9 @@ static char cmdline_buf[0x1000];
[[__init]]
void cmdline_parse(const char* cmdline) {
if (cmdline == nullptr)
cmdline = "";
const size_t len = strnlen(cmdline, sizeof(cmdline_buf) - 1);
size_t idx = 0;
memcpy(cmdline_buf, cmdline, len);
+2 -1
View File
@@ -82,7 +82,8 @@ SECTIONS
/* Per-CPU data block. MUST always come last. */
.percpu ALIGN(CONSTANT(MAXPAGESIZE)) : {
__ld_percpu_start = .;
KEEP(*(.percpu))
KEEP(*(.percpu.init .percpu.init*))
KEEP(*(.percpu.data .percpu.data*))
. = ALIGN(CONSTANT(MAXPAGESIZE));
__ld_percpu_end = .;
+1 -3
View File
@@ -1,9 +1,9 @@
#include <string.h>
#include <zinnia/alloc.h>
#include <zinnia/cmdline.h>
#include <zinnia/init.h>
#include <zinnia/print.h>
#include <zinnia/utils.h>
#include <string.h>
#include "limine.h"
[[__initdata_sorted("limine.0")]]
@@ -89,5 +89,3 @@ void kernel_entry() {
kernel_main(&info);
}
phys_t rsdp_addr;
+9 -1
View File
@@ -15,6 +15,10 @@
#include <config.h>
#include <stdint.h>
#if CONFIG_ACPI
#include <zinnia/acpi.h>
#endif
static const char zinnia_banner[] = "Zinnia " ZINNIA_VERSION " " CONFIG_KERNEL_FLAVOR " (" ZINNIA_ARCH
", " ZINNIA_COMPILER_ID ", " ZINNIA_LINKER_ID ")";
@@ -74,10 +78,14 @@ void kernel_main(struct boot_info* info) {
kprintf("\ec");
mem_init(info->mem_map, info->num_mem_maps, info->virt_base, info->phys_base, info->hhdm_base);
rsdp_addr = info->rsdp; // TODO
percpu_init();
sched_init(&percpu_get()->sched);
#if CONFIG_ACPI
acpi_init(info);
#endif
struct task* main_task;
task_create("main", &kernel_vma, kernel_main_task, (uintptr_t)info, &main_task);
sched_add_task(&percpu_get()->sched, main_task);