From b207da29c64f8345751f287f785ea9d371fccd4d Mon Sep 17 00:00:00 2001 From: procub3r Date: Wed, 7 Aug 2024 21:50:43 +0530 Subject: [PATCH] blog: Add GSoC'24 UEFI GOP, Part III Post Signed-off-by: procub3r --- content/blog/2024-08-07-gsoc-uefi-gop.mdx | 98 ++++++++++++++++++++++ public/images/uefi-gop-with-ukconsole.png | Bin 0 -> 51204 bytes 2 files changed, 98 insertions(+) create mode 100644 content/blog/2024-08-07-gsoc-uefi-gop.mdx create mode 100644 public/images/uefi-gop-with-ukconsole.png diff --git a/content/blog/2024-08-07-gsoc-uefi-gop.mdx b/content/blog/2024-08-07-gsoc-uefi-gop.mdx new file mode 100644 index 00000000..99e7b694 --- /dev/null +++ b/content/blog/2024-08-07-gsoc-uefi-gop.mdx @@ -0,0 +1,98 @@ +--- +title: "GSoC'24: UEFI Graphics Output Protocol Support in Unikraft, Part III" +description: | + This is the third post in a series of posts where I talk about my progress with the project. +publishedDate: 2024-08-07 +image: /images/unikraft-gsoc24.png +authors: +- Sriprad Potukuchi +tags: +- gsoc +- gsoc24 +- uefi +- booting +--- + +## Project Overview + +The widely available and standardized [UEFI Graphics Output Protocol](https://uefi.org/specs/UEFI/2.10/12_Protocols_Console_Support.html#efi-graphics-output-protocol) (GOP) interface is an excellent alternative to VGA or serial port consoles for printing logs to the screen. + +This project aims to implement a UEFI GOP based console. +For more information, check out [Part I](https://unikraft.org/blog/2024-06-18-gsoc-uefi-gop) and [Part II](https://unikraft.org/blog/2024-07-10-gsoc-uefi-gop) of this series. + +## Progress + +All the work referred to here can be found in [this draft PR](https://github.com/unikraft/unikraft/pull/1448). + +### Arbitrary fonts + +The driver can now work with any arbitrary bitmap font! The bitmap font array, along with the width and height of each character can be defined in `drivers/uktty/gop/font.c` as follows: + +```c +__u8 char_width = 8; +__u8 char_height = 16; + +__u8 font[256][16] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // control char + /* ... */ + {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x0C, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, // question + {0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xDE, 0xDE, 0xDE, 0xDC, 0xC0, 0x7C, 0x00, 0x00, 0x00, 0x00}, // at + {0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, // A + {0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, 0x00, 0x00}, // B + /* ... */ + {0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00}, // char127 +}; +``` + +The driver code in `drivers/uktty/gop/gop.c` externs these symbols and directly accesses them. + +```c +/* Font metadata */ +extern __u8 char_width; +extern __u8 char_height; +extern __u8 font[256][16]; /* Default font */ +``` + +### Generic console device interface + +A generic console device interface was proposed by [PR #1464](https://github.com/unikraft/unikraft/pull/1464) submitted by [thass0](https://github.com/thass0) on GitHub. This interface, exposed through a library called `ukconsole`, allows you to: + +- Register console devices, each of which uses its own underlying interfaces (serial, VGA, UEFI GOP etc). +- Query registered console devices. +- Write bytes to either or all registered console devices to print logs. +- Read bytes from a given console device to take user input. + +All of my work has been rebased onto the work done in `PR #1464`. +The GOP driver has been modified into a console device that can now be registered to the `ukconsole` library. + + + +This means that the kernel can be configured to transparently use this GOP console device without having to change any of the existing print statements! + +### Refactoring + +The code was moved to `drivers/uktty/gop/` from `plat/common/` which was a temporary location. + +This was done in order to integrate with `ukconsole`. + +In addition to this, the code underwent a substantial overhaul. It is now much cleaner! + +## Next Steps + +- Support for all ASCII codes (like `\a`, `\t` etc) must be added. + +- The logs are not colored! + The image above shows some weird characters being printed along with the actual logs. + + These are escape codes used to color the logs themselves, which must be interpreted as such and not actually printed onto the console. + +- The console device must be tested against all configuration options such as `CONFIG_LIBUKDEBUG_ANSI_COLOR`, which dictate some logging parameters. + +- The code must be brought to a mergeable state by adding license information, checking the formatting etc. + +## Acknowledgement + +I would once again like to thank all the great Unikraft folk for their continued support! This work would not have been possible without them :heart: diff --git a/public/images/uefi-gop-with-ukconsole.png b/public/images/uefi-gop-with-ukconsole.png new file mode 100644 index 0000000000000000000000000000000000000000..d7ce42a2994610d12537f9ae3975f824a87c77dd GIT binary patch literal 51204 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 literal 0 HcmV?d00001