diff --git a/content/blog/2024-08-22-gsoc-uefi-gop.mdx b/content/blog/2024-08-22-gsoc-uefi-gop.mdx new file mode 100644 index 00000000..59dcc7eb --- /dev/null +++ b/content/blog/2024-08-22-gsoc-uefi-gop.mdx @@ -0,0 +1,67 @@ +--- +title: "GSoC'24: UEFI Graphics Output Protocol Support in Unikraft, Part IV" +description: | + This is the fourth post in a series of posts where I talk about my progress with the project. +publishedDate: 2024-08-22 +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), [Part II](https://unikraft.org/blog/2024-07-10-gsoc-uefi-gop) and [Part III](https://unikraft.org/blog/2024-08-07-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). + +## ASCII code support + +Added support for ASCII codes `\a`, `\b`, `\t`. + +## Colored output support + +Enabling the configuration option `CONFIG_LIBUKDEBUG_ANSI_COLOR` generates colored logs with the use of ANSI escape codes. +These codes are now parsed and the logs are colored appropriately by the GOP console. +All the new code has been pushed to the [draft PR](https://github.com/unikraft/unikraft/pull/1448)! + + + +ANSI escape codes control various paramters of text output such as foreground color, background color, formatting etc. + +These escape codes are prefixed with the escape character, which has the ASCII value `27` or `033` in octal or `0x1b` in hex. + +The format of ANSI color codes is `\033[m`. +There are many of these codes, but the focus of my implementation is on parsing just the color codes that the Unikraft kernel outputs in in logs when `CONFIG_LIBUKDEBUG_ANSI_COLOR` is on, which currently are: + +| Color Name | Foreground Color Code | Background Color Code | +| :--------- | :-------------------- | :-------------------- | +| Reset | `0` | `0` | +| Black | `30` | `40` | +| Red | `31` | `41` | +| Green | `32` | `42` | +| Yellow | `33` | `43` | +| Blue | `34` | `44` | +| Magenta | `35` | `45` | +| Cyan | `36` | `46` | +| White | `37` | `47` | + +Full reference [here](https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797). + +For example, `\033[37m\033[44mHello World!` would print `Hello World!` in white on a blue background. The order in which the foreground and the background sequences are issued does not matter. + +## 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-colored.png b/public/images/uefi-gop-colored.png new file mode 100644 index 00000000..64cb5562 Binary files /dev/null and b/public/images/uefi-gop-colored.png differ