more stuff
This commit is contained in:
+10
-6
@@ -23,13 +23,15 @@ SECTIONS
|
||||
__ld_text_end = .;
|
||||
} :text
|
||||
|
||||
.rodata ALIGN(CONSTANT(MAXPAGESIZE)) : {
|
||||
.cmdline ALIGN(CONSTANT(MAXPAGESIZE)) : {
|
||||
__ld_rodata_start = .;
|
||||
|
||||
__ld_cmdline_start = .;
|
||||
KEEP(*(.cmdline))
|
||||
__ld_cmdline_end = .;
|
||||
|
||||
} :rodata
|
||||
|
||||
.rodata : {
|
||||
*(.rodata .rodata.*)
|
||||
*(.got .got.*)
|
||||
|
||||
@@ -39,15 +41,17 @@ SECTIONS
|
||||
.data ALIGN(CONSTANT(MAXPAGESIZE)) : {
|
||||
__ld_data_start = .;
|
||||
|
||||
__ld_console_start = .;
|
||||
KEEP(*(.console))
|
||||
__ld_console_end = .;
|
||||
|
||||
KEEP(*(SORT_BY_NAME(.init.data.*)))
|
||||
KEEP(*(.init.data))
|
||||
*(.data .data.*)
|
||||
} :data
|
||||
|
||||
.console : {
|
||||
__ld_console_start = .;
|
||||
KEEP(*(.console))
|
||||
__ld_console_end = .;
|
||||
} :data
|
||||
|
||||
.dynsym : {
|
||||
__ld_dynsym_start = .;
|
||||
*(.dynsym)
|
||||
|
||||
+6
-8
@@ -5,7 +5,6 @@
|
||||
#include <zinnia/compiler.h>
|
||||
#include <zinnia/console.h>
|
||||
#include <zinnia/elf.h>
|
||||
#include <zinnia/futex.h>
|
||||
#include <zinnia/init.h>
|
||||
#include <zinnia/irq.h>
|
||||
#include <zinnia/percpu.h>
|
||||
@@ -22,7 +21,7 @@ static const char zinnia_banner[] = "Zinnia " ZINNIA_VERSION " " CONFIG_KERNEL_F
|
||||
static void kernel_main_task(uintptr_t arg0) {
|
||||
struct boot_info* info = (struct boot_info*)arg0;
|
||||
|
||||
log("main", "Hello from main task!\n");
|
||||
log("main: Hello from main task!\n");
|
||||
|
||||
assert(info->num_files >= 1, "No init executable provided\n");
|
||||
|
||||
@@ -36,7 +35,7 @@ static void kernel_main_task(uintptr_t arg0) {
|
||||
assert(vmo_new_phys(&init_file) == EOK, "");
|
||||
vmo_write(&init_file->object, 0, HHDM_PTR(file_data->data), file_data->length, nullptr);
|
||||
|
||||
log("main", "%s:%i\n", __FUNCTION__, __LINE__);
|
||||
log("main: %s:%i\n", __FUNCTION__, __LINE__);
|
||||
|
||||
// Load init.
|
||||
const char* init_argv[] = {"init", nullptr};
|
||||
@@ -50,7 +49,7 @@ static void kernel_main_task(uintptr_t arg0) {
|
||||
assert(status == 0, "Failed to load init process (%i)\n", status);
|
||||
sched_add_task(&percpu_get()->sched, init_task);
|
||||
|
||||
log("main", "%s:%i\n", __FUNCTION__, __LINE__);
|
||||
log("main: %s:%i\n", __FUNCTION__, __LINE__);
|
||||
|
||||
while (true) {
|
||||
irq_wait();
|
||||
@@ -66,19 +65,18 @@ void kernel_early_init() {
|
||||
|
||||
[[noreturn]]
|
||||
void kernel_main(struct boot_info* info) {
|
||||
// TODO: Initialize log ring.
|
||||
// TODO: Initialize in-memory log ring.
|
||||
kprintf("%s\n", zinnia_banner); // Say hello!
|
||||
kprintf("Command line: %s\n", info->cmdline);
|
||||
|
||||
cmdline_parse(info->cmdline);
|
||||
console_init();
|
||||
|
||||
kprintf("\ec");
|
||||
kprintf("Kernel command line: %s\n", info->cmdline);
|
||||
|
||||
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);
|
||||
futex_init();
|
||||
|
||||
struct task* main_task;
|
||||
task_create("main", &kernel_vma, kernel_main_task, (uintptr_t)info, &main_task);
|
||||
|
||||
Reference in New Issue
Block a user