diff --git a/Kernel/Arch/aarch64/init.cpp b/Kernel/Arch/aarch64/init.cpp index 60edf6f204..345610f406 100644 --- a/Kernel/Arch/aarch64/init.cpp +++ b/Kernel/Arch/aarch64/init.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -100,9 +101,6 @@ extern "C" [[noreturn]] void init() (*ctor)(); kmalloc_init(); - for (ctor_func_t* ctor = start_ctors; ctor < end_ctors; ctor++) - (*ctor)(); - load_kernel_symbol_table(); auto& framebuffer = RPi::Framebuffer::the(); @@ -112,6 +110,13 @@ extern "C" [[noreturn]] void init() } dmesgln("Starting SerenityOS..."); + DeviceManagement::initialize(); + + // Invoke all static global constructors in the kernel. + // Note that we want to do this as early as possible. + for (ctor_func_t* ctor = start_ctors; ctor < end_ctors; ctor++) + (*ctor)(); + initialize_interrupts(); InterruptManagement::initialize(); Processor::enable_interrupts(); diff --git a/Kernel/CMakeLists.txt b/Kernel/CMakeLists.txt index 100967d338..6ee9bbc1a2 100644 --- a/Kernel/CMakeLists.txt +++ b/Kernel/CMakeLists.txt @@ -472,6 +472,8 @@ else() MiniStdLib.cpp UBSanitizer.cpp + Devices/DeviceManagement.cpp + Graphics/Console/BootFramebufferConsole.cpp Graphics/Console/GenericFramebufferConsole.cpp