]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
video: add DejaVu Mono font
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Thu, 20 Nov 2025 19:34:48 +0000 (20:34 +0100)
committerTom Rini <trini@konsulko.com>
Sat, 24 Jan 2026 16:01:22 +0000 (10:01 -0600)
A TrueType font for U-Boot should fulfill the following requirements:

* mono spaced
* support full code page 437
* easily readable

Unfortunately none of the fonts provided with U-Boot fulfills all of these
requirements.

Let's add the DejaVu Mono font. To reduce the code size the characters are
limited to code page 437.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/video/console_truetype.c
drivers/video/fonts/437.ff [new file with mode: 0755]
drivers/video/fonts/Kconfig
drivers/video/fonts/Makefile
drivers/video/fonts/dejavu_mono.ttf [new file with mode: 0644]

index 6d2c2c2e1776ef4d34fcddc8d86b0bc70eabc0f3..eaf169e83867a75b9301a2a0d40b358b14d755c1 100644 (file)
@@ -528,6 +528,7 @@ FONT_DECL(nimbus_sans_l_regular);
 FONT_DECL(ankacoder_c75_r);
 FONT_DECL(rufscript010);
 FONT_DECL(cantoraone_regular);
+FONT_DECL(dejavu_mono);
 
 static struct font_info font_table[] = {
 #ifdef CONFIG_CONSOLE_TRUETYPE_NIMBUS
@@ -541,6 +542,9 @@ static struct font_info font_table[] = {
 #endif
 #ifdef CONFIG_CONSOLE_TRUETYPE_CANTORAONE
        FONT_ENTRY(cantoraone_regular),
+#endif
+#ifdef CONFIG_CONSOLE_TRUETYPE_DEJAVU
+       FONT_ENTRY(dejavu_mono),
 #endif
        {} /* sentinel */
 };
diff --git a/drivers/video/fonts/437.ff b/drivers/video/fonts/437.ff
new file mode 100755 (executable)
index 0000000..a6e3b9e
--- /dev/null
@@ -0,0 +1,291 @@
+#!/usr/bin/fontforge
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+# This script uses FontForge to strip unused symbols from a TrueType font.
+# Only symbols in code page 437 and two glyphs used by GRUB are left in.
+#
+# Usage
+#
+#     ./437.ff <font_in> <font_out.ttf>
+#
+# e.g.
+#
+#     ./437.ff dejavu-fonts-2.37/src/DejaVuSansMono.sfd dejavu_mono.ttf
+#
+# or
+#
+#     ./437.ff /usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf dejavu_mono.ttf
+
+Print()
+Print("Strip unused symbols from TrueType font")
+if ($argc != 3)
+       Print()
+       Print("Usage:")
+       Print($0, " <font_in> <font_out.ttf>")
+       return
+endif
+
+Print("Loading ", $1)
+Open($1)
+
+# Code page 437
+SelectMore("u263A") # WHITE SMILING FACE
+SelectMore("u263B") # BLACK SMILING FACE
+SelectMore("u2665") # BLACK HEART SUIT
+SelectMore("u2666") # BLACK DIAMOND SUIT
+SelectMore("u2663") # BLACK CLUB SUIT
+SelectMore("u2660") # BLACK SPADE SUIT
+SelectMore("u2022") # BULLET
+SelectMore("u25D8") # INVERSE BULLET
+SelectMore("u25CB") # WHITE CIRCLE
+SelectMore("u25D9") # INVERSE WHITE CIRCLE
+SelectMore("u2642") # MALE SIGN
+SelectMore("u2640") # FEMALE SIGN
+SelectMore("u266A") # EIGHTH NOTE
+SelectMore("u266B") # BEAMED EIGHTH NOTES
+SelectMore("u263C") # WHITE SUN WITH RAYS
+SelectMore("u25BA") # BLACK RIGHT-POINTING POINTER
+SelectMore("u25C4") # BLACK LEFT-POINTING POINTER
+SelectMore("u2195") # UP DOWN ARROW
+SelectMore("u203C") # DOUBLE EXCLAMATION MARK
+SelectMore("u00B6") # PILCROW SIGN
+SelectMore("u00A7") # SECTION SIGN
+SelectMore("u25AC") # BLACK RECTANGLE
+SelectMore("u21A8") # UP DOWN ARROW WITH BASE
+SelectMore("u2191") # UPWARDS ARROW
+SelectMore("u2193") # DOWNWARDS ARROW
+SelectMore("u2192") # RIGHTWARDS ARROW
+SelectMore("u2190") # LEFTWARDS ARROW
+SelectMore("u221F") # RIGHT ANGLE
+SelectMore("u2194") # LEFT RIGHT ARROW
+SelectMore("u25B2") # BLACK UP-POINTING TRIANGLE
+SelectMore("u25BC") # BLACK DOWN-POINTING TRIANGLE
+SelectMore("u0020") # SPACE
+SelectMore("u0021")
+SelectMore("u0022")
+SelectMore("u0023")
+SelectMore("u0024")
+SelectMore("u0025")
+SelectMore("u0026")
+SelectMore("u0027")
+SelectMore("u0028")
+SelectMore("u0029")
+SelectMore("u002a")
+SelectMore("u002b")
+SelectMore("u002c")
+SelectMore("u002d")
+SelectMore("u002e")
+SelectMore("u002f")
+SelectMore("u0030")
+SelectMore("u0031")
+SelectMore("u0032")
+SelectMore("u0033")
+SelectMore("u0034")
+SelectMore("u0035")
+SelectMore("u0036")
+SelectMore("u0037")
+SelectMore("u0038")
+SelectMore("u0039")
+SelectMore("u003a")
+SelectMore("u003b")
+SelectMore("u003c")
+SelectMore("u003d")
+SelectMore("u003e")
+SelectMore("u003f")
+SelectMore("u0040")
+SelectMore("u0041")
+SelectMore("u0042")
+SelectMore("u0043")
+SelectMore("u0044")
+SelectMore("u0045")
+SelectMore("u0046")
+SelectMore("u0047")
+SelectMore("u0048")
+SelectMore("u0049")
+SelectMore("u004a")
+SelectMore("u004b")
+SelectMore("u004c")
+SelectMore("u004d")
+SelectMore("u004e")
+SelectMore("u004f")
+SelectMore("u0050")
+SelectMore("u0051")
+SelectMore("u0052")
+SelectMore("u0053")
+SelectMore("u0054")
+SelectMore("u0055")
+SelectMore("u0056")
+SelectMore("u0057")
+SelectMore("u0058")
+SelectMore("u0059")
+SelectMore("u005a")
+SelectMore("u005b")
+SelectMore("u005c")
+SelectMore("u005d")
+SelectMore("u005e")
+SelectMore("u005f")
+SelectMore("u0060")
+SelectMore("u0061")
+SelectMore("u0062")
+SelectMore("u0063")
+SelectMore("u0064")
+SelectMore("u0065")
+SelectMore("u0066")
+SelectMore("u0067")
+SelectMore("u0068")
+SelectMore("u0069")
+SelectMore("u006a")
+SelectMore("u006b")
+SelectMore("u006c")
+SelectMore("u006d")
+SelectMore("u006e")
+SelectMore("u006f")
+SelectMore("u0070")
+SelectMore("u0071")
+SelectMore("u0072")
+SelectMore("u0073")
+SelectMore("u0074")
+SelectMore("u0075")
+SelectMore("u0076")
+SelectMore("u0077")
+SelectMore("u0078")
+SelectMore("u0079")
+SelectMore("u007a")
+SelectMore("u007b")
+SelectMore("u007c")
+SelectMore("u007d")
+SelectMore("u007e")
+SelectMore("u00c7")
+SelectMore("u00fc")
+SelectMore("u00e9")
+SelectMore("u00e2")
+SelectMore("u00e4")
+SelectMore("u00e0")
+SelectMore("u00e5")
+SelectMore("u00e7")
+SelectMore("u00ea")
+SelectMore("u00eb")
+SelectMore("u00e8")
+SelectMore("u00ef")
+SelectMore("u00ee")
+SelectMore("u00ec")
+SelectMore("u00c4")
+SelectMore("u00c5")
+SelectMore("u00c9")
+SelectMore("u00e6")
+SelectMore("u00c6")
+SelectMore("u00f4")
+SelectMore("u00f6")
+SelectMore("u00f2")
+SelectMore("u00fb")
+SelectMore("u00f9")
+SelectMore("u00ff")
+SelectMore("u00d6")
+SelectMore("u00dc")
+SelectMore("u00a2")
+SelectMore("u00a3")
+SelectMore("u00a5")
+SelectMore("u20a7")
+SelectMore("u0192")
+SelectMore("u00e1")
+SelectMore("u00ed")
+SelectMore("u00f3")
+SelectMore("u00fa")
+SelectMore("u00f1")
+SelectMore("u00d1")
+SelectMore("u00aa")
+SelectMore("u00ba")
+SelectMore("u00bf")
+SelectMore("u2310")
+SelectMore("u00ac")
+SelectMore("u00bd")
+SelectMore("u00bc")
+SelectMore("u00a1")
+SelectMore("u00ab")
+SelectMore("u00bb")
+SelectMore("u2591")
+SelectMore("u2592")
+SelectMore("u2593")
+SelectMore("u2502")
+SelectMore("u2524")
+SelectMore("u2561")
+SelectMore("u2562")
+SelectMore("u2556")
+SelectMore("u2555")
+SelectMore("u2563")
+SelectMore("u2551")
+SelectMore("u2557")
+SelectMore("u255d")
+SelectMore("u255c")
+SelectMore("u255b")
+SelectMore("u2510")
+SelectMore("u2514")
+SelectMore("u2534")
+SelectMore("u252c")
+SelectMore("u251c")
+SelectMore("u2500")
+SelectMore("u253c")
+SelectMore("u255e")
+SelectMore("u255f")
+SelectMore("u255a")
+SelectMore("u2554")
+SelectMore("u2569")
+SelectMore("u2566")
+SelectMore("u2560")
+SelectMore("u2550")
+SelectMore("u256c")
+SelectMore("u2567")
+SelectMore("u2568")
+SelectMore("u2564")
+SelectMore("u2565")
+SelectMore("u2559")
+SelectMore("u2558")
+SelectMore("u2552")
+SelectMore("u2553")
+SelectMore("u256b")
+SelectMore("u256a")
+SelectMore("u2518")
+SelectMore("u250c")
+SelectMore("u2588")
+SelectMore("u2584")
+SelectMore("u258c")
+SelectMore("u2590")
+SelectMore("u2580")
+SelectMore("u03b1")
+SelectMore("u00df")
+SelectMore("u0393")
+SelectMore("u03c0")
+SelectMore("u03a3")
+SelectMore("u03c3")
+SelectMore("u00b5")
+SelectMore("u03c4")
+SelectMore("u03a6")
+SelectMore("u0398")
+SelectMore("u03a9")
+SelectMore("u03b4")
+SelectMore("u221e")
+SelectMore("u03c6")
+SelectMore("u03b5")
+SelectMore("u2229")
+SelectMore("u2261")
+SelectMore("u00b1")
+SelectMore("u2265")
+SelectMore("u2264")
+SelectMore("u2320")
+SelectMore("u2321")
+SelectMore("u00f7")
+SelectMore("u2248")
+SelectMore("u00b0")
+SelectMore("u2219")
+SelectMore("u00b7")
+SelectMore("u221a")
+SelectMore("u207f")
+SelectMore("u00b2")
+SelectMore("u25a0")
+SelectMore("u00a0")
+
+SelectInvert()
+DetachAndRemoveGlyphs()
+
+Print("Saving ", $2)
+Generate($2)
index c692fa9602f85fab204d1f9626d3412c966ed805..2568e48ecf202778f200a3e65eda531ad6feb533 100644 (file)
@@ -49,4 +49,12 @@ config CONSOLE_TRUETYPE_CANTORAONE
          License: SIL Open Font Licence
          http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL
 
+config CONSOLE_TRUETYPE_DEJAVU
+       bool "DejaVu Sans Mono Regular"
+       depends on CONSOLE_TRUETYPE
+       help
+         This mono spaced font contains all code page 437 characters.
+         From https://sourceforge.net/projects/dejavu/
+         License: DejaVu Font License
+
 endmenu
index 4fca120b73cb59274f201ae4dd6c6a0152f23bbf..1111f92a2c6d18848a37cc259a1f26a4fda32a62 100644 (file)
@@ -7,3 +7,4 @@ obj-$(CONFIG_CONSOLE_TRUETYPE_NIMBUS) += nimbus_sans_l_regular.o
 obj-$(CONFIG_CONSOLE_TRUETYPE_ANKACODER) += ankacoder_c75_r.o
 obj-$(CONFIG_CONSOLE_TRUETYPE_RUFSCRIPT) += rufscript010.o
 obj-$(CONFIG_CONSOLE_TRUETYPE_CANTORAONE) += cantoraone_regular.o
+obj-$(CONFIG_CONSOLE_TRUETYPE_DEJAVU) += dejavu_mono.o
diff --git a/drivers/video/fonts/dejavu_mono.ttf b/drivers/video/fonts/dejavu_mono.ttf
new file mode 100644 (file)
index 0000000..47c0411
Binary files /dev/null and b/drivers/video/fonts/dejavu_mono.ttf differ