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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 z 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 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