
Have you ever run the help
or env print
command and watched a torrent of text scroll past, faster than you could read it? We’ve all been there. Important information disappears off the top of the screen before we have a chance to digest it.
Well, those days are over! Thanks to a new patch series, U-Boot Concept now includes a console pager, a simple but highly effective feature that makes managing long command outputs a breeze.
What is the Pager?
At its core, the pager does one thing very well: it pauses output once your screen is full. When you run a command that generates a lot of text, the pager will stop after a certain number of lines and display a prompt:
: Press SPACE to continue
This gives you all the time you need to read the output. Once you’re ready, just press the SPACE bar, and U-Boot will display the next screenful of text. It’s an intuitive and familiar experience for anyone who has used tools like less
or more
in a Linux environment.
How to Use and Configure It
The pager is enabled with the CONFIG_CONSOLE_PAGER
option. Once enabled, U-Boot uses a smart system to determine the page size (i.e., how many lines to show before pausing). Here’s the order of priority:
- The
pager
Environment Variable: You have full control. You can set the number of lines (in hexadecimal) yourself (‘setenv pager 1e’). Setting it to0
disables the pager. - Automatic Device Detection: If the
pager
variable isn’t set, U-Boot tries to be clever.- If you’re using a video console (
vidconsole
), it will automatically use the number of rows your display supports. - If you’re on a serial console, U-Boot can query the terminal to get its dimensions. This is enabled by
CONFIG_SERIAL_TERM_PRESENT
.
- If you’re using a video console (
- Default Value: If all else fails, it falls back to a sensible default defined by
CONFIG_CONSOLE_PAGER_LINES
.
Under the Hood: A Foundation of Quality-of-Life Improvements
Introducing the pager wasn’t just a single patch. This feature was built on a solid foundation of refactoring and improvements throughout the console and serial subsystems.
One of the key preparatory steps was to generalize terminal size detection. Previously, the logic to query a terminal’s rows and columns was tucked away in the EFI loader. This code has now been moved into the generic serial uclass, making it available to any part of U-Boot. To improve performance, the terminal dimensions are cached, so U-Boot only has to ask once.
Additionally, new helper functions were introduced to determine if the console is actually connected to an interactive terminal (serial_is_tty()
) or if a video display is visible. This is particularly important for environments like sandbox, where U-Boot’s output might be redirected to a file. In those cases, the pager intelligently disables itself to prevent scripts from hanging.
A Boon for Testers and Developers
Speaking of automated testing, the pager could potentially cause tests to hang while waiting for user input. To solve this, two new command-line flags have been added to the sandbox environment:
-P
: Bypasses the pager completely.-A
: Assumes no terminal is present, which disables the terminal-size query.
Our Python test suite has already been updated to use these flags, ensuring that automated testing remains smooth and reliable.
Conclusion
The console pager is a nice quality-of-life improvement that makes the U-Boot command line more user-friendly. It’s a small change that will have a big impact on daily development and debugging workflows, particularly on devices without a serial console. This work, along with the thoughtful refactoring that supports it, is a great example of the continuous effort to polish and improve the U-Boot user experience.
So go ahead, enable CONFIG_CONSOLE_PAGER
, and enjoy a more civilized console experience!