From 588ba72fe72e906c19ce6a0742dc400a7082c4a3 Mon Sep 17 00:00:00 2001 From: Marcin Undak Date: Thu, 14 Oct 2021 22:56:01 -0400 Subject: [PATCH] Kernel: Draw picture on screen when booting Raspberry Pi --- .../Arch/aarch64/SerenityLogoRGB.ppm | Bin 0 -> 274351 bytes Kernel/Prekernel/Arch/aarch64/init.cpp | 72 ++++++++++++++++++ Kernel/Prekernel/CMakeLists.txt | 2 + 3 files changed, 74 insertions(+) create mode 100644 Kernel/Prekernel/Arch/aarch64/SerenityLogoRGB.ppm diff --git a/Kernel/Prekernel/Arch/aarch64/SerenityLogoRGB.ppm b/Kernel/Prekernel/Arch/aarch64/SerenityLogoRGB.ppm new file mode 100644 index 0000000000000000000000000000000000000000..6cf9490cd4ebafd701d6c0770cf0d101b8d53811 GIT binary patch literal 274351 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�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 Hs<;0G+#F!+ literal 0 HcmV?d00001 diff --git a/Kernel/Prekernel/Arch/aarch64/init.cpp b/Kernel/Prekernel/Arch/aarch64/init.cpp index d9d7f7e5ba..37d64843d8 100644 --- a/Kernel/Prekernel/Arch/aarch64/init.cpp +++ b/Kernel/Prekernel/Arch/aarch64/init.cpp @@ -7,9 +7,12 @@ #include #include +#include +#include #include #include #include +#include extern "C" [[noreturn]] void halt(); extern "C" [[noreturn]] void init(); @@ -19,6 +22,7 @@ static void set_up_el1_mode(); static void set_up_el2_mode(); static void set_up_el3_mode(); static void print_current_exception_level(const char* msg); +static void draw_logo(); static u32 query_firmware_version(); [[noreturn]] static void jump_to_os_start_from_el2(); [[noreturn]] static void jump_to_os_start_from_el3(); @@ -62,6 +66,11 @@ extern "C" [[noreturn]] void os_start() print_current_exception_level("CPU switched to:"); + auto& framebuffer = Prekernel::Framebuffer::the(); + if (framebuffer.initialized()) { + draw_logo(); + } + auto& timer = Prekernel::Timer::the(); u64 start_musec = 0; for (;;) { @@ -239,3 +248,66 @@ static u32 query_firmware_version() return message_queue.query_firmware_version.version; } + +extern "C" const u32 serenity_boot_logo_start; +extern "C" const u32 serenity_boot_logo_size; + +static void draw_logo() +{ + Prekernel::BootPPMParser logo_parser(reinterpret_cast(&serenity_boot_logo_start), serenity_boot_logo_size); + if (!logo_parser.parse()) { + Prekernel::warnln("Invalid boot logo."); + return; + } + + auto& uart = Prekernel::UART::the(); + uart.print_str("Boot logo size: "); + uart.print_num(serenity_boot_logo_size); + uart.print_str("\r\n"); + uart.print_str("Width: "); + uart.print_num(logo_parser.image.width); + uart.print_str("\r\n"); + uart.print_str("Height: "); + uart.print_num(logo_parser.image.height); + uart.print_str("\r\n"); + + auto& framebuffer = Prekernel::Framebuffer::the(); + auto fb_ptr = framebuffer.gpu_buffer(); + auto image_left = (framebuffer.width() - logo_parser.image.width) / 2; + auto image_right = image_left + logo_parser.image.width; + auto image_top = (framebuffer.height() - logo_parser.image.height) / 2; + auto image_bottom = image_top + logo_parser.image.height; + auto logo_pixels = logo_parser.image.pixel_data; + + for (u32 y = 0; y < framebuffer.height(); y++) { + for (u32 x = 0; x < framebuffer.width(); x++) { + if (x >= image_left && x < image_right && y >= image_top && y < image_bottom) { + switch (framebuffer.pixel_order()) { + case Prekernel::Framebuffer::PixelOrder::RGB: + fb_ptr[0] = logo_pixels[0]; + fb_ptr[1] = logo_pixels[1]; + fb_ptr[2] = logo_pixels[2]; + break; + case Prekernel::Framebuffer::PixelOrder::BGR: + fb_ptr[0] = logo_pixels[2]; + fb_ptr[1] = logo_pixels[1]; + fb_ptr[2] = logo_pixels[0]; + break; + default: + Prekernel::warnln("Unsupported pixel format"); + halt(); + } + + logo_pixels += 3; + } else { + fb_ptr[0] = 0xBD; + fb_ptr[1] = 0xBD; + fb_ptr[2] = 0xBD; + } + + fb_ptr[3] = 0xFF; + fb_ptr += 4; + } + fb_ptr += framebuffer.pitch() - framebuffer.width() * 4; + } +} diff --git a/Kernel/Prekernel/CMakeLists.txt b/Kernel/Prekernel/CMakeLists.txt index 9fde4dcb59..2119feaa07 100644 --- a/Kernel/Prekernel/CMakeLists.txt +++ b/Kernel/Prekernel/CMakeLists.txt @@ -66,6 +66,8 @@ if ("${SERENITY_ARCH}" STREQUAL "i686" OR "${SERENITY_ARCH}" STREQUAL "x86_64") endif() if ("${SERENITY_ARCH}" STREQUAL "aarch64") + embed_resource(Prekernel serenity_boot_logo "Arch/aarch64/SerenityLogoRGB.ppm") + add_custom_command( TARGET Prekernel POST_BUILD COMMAND ${CMAKE_OBJCOPY} -O binary Prekernel kernel8.img