#include <lunaix/block.h>
#include <lunaix/boot_generic.h>
#include <lunaix/device.h>
-#include <lunaix/foptions.h>
#include <lunaix/input.h>
+
#include <lunaix/mm/cake.h>
#include <lunaix/mm/pmm.h>
#include <lunaix/mm/page.h>
#include <lunaix/mm/valloc.h>
#include <lunaix/mm/vmm.h>
+
#include <lunaix/process.h>
#include <lunaix/sched.h>
#include <lunaix/spike.h>
#include <lunaix/syslog.h>
#include <lunaix/sections.h>
-#include <hal/acpi/acpi.h>
#include <hal/devtree.h>
-#include <sys/abi.h>
-#include <sys/mm/mm_defs.h>
-
-#include <klibc/strfmt.h>
-#include <klibc/string.h>
+#include <asm/mm_defs.h>
LOG_MODULE("kinit")
unsigned int i = ptep_vfn(ptep);
do {
- if (l0tep_implie_vmnts(ptep)) {
+ if (lntep_implie_vmnts(ptep, L0T_SIZE)) {
ptep++;
continue;
}
return;
}
+static void
+log_bootup_time()
+{
+ datetime_t dt;
+
+ clock_walltime(&dt);
+ INFO("kernel boot at: %d/%d/%d %d:%d:%d",
+ dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second);
+}
+
void
kernel_bootstrap(struct boot_handoff* bhctx)
{
- vmm_init();
-
pmm_init(bhctx);
// now we can start reserving physical space
/* Setup kernel memory layout and services */
kmem_init(bhctx);
- __remap_and_load_dtb(bhctx);
+ INFO();
+ INFO("Lunaix " CONFIG_LUNAIX_VER " (c) Lunaixsky 2022-2025");
boot_parse_cmdline(bhctx);
device_scan_drivers();
+ initfn_invoke_sysconf();
+
+ __remap_and_load_dtb(bhctx);
device_sysconf_load();
- invoke_init_function(on_earlyboot);
+ // TODO register devtree hooks
+ // TODO re-scan devtree to bind devices.
clock_init();
timer_init();
+ log_bootup_time();
- /*
- TODO autoload these init function that do not have dependency between
- them
- */
+ initfn_invoke_earlyboot();
- /* Let's get fs online as soon as possible, as things rely on them */
vfs_init();
fsm_init();
input_init();
must_success(vfs_mount_root("ramfs", NULL));
must_success(vfs_mount("/dev", "devfs", NULL, 0));
- invoke_init_function(on_boot);
+ initfn_invoke_boot();
/* Finish up bootstrapping sequence, we are ready to spawn the root process
* and start geting into uspace