U-BOOT是伴随Linux成长起来的引导程序(Boot Loader),以代码短小精悍,功能灵活强大著称。虽然它支持包括比如Power PC和X86在内的很多种CPU,但是在ARM上使用的最广泛。比如幽兰代码本最初使用的就是U-BOOT。2023年年初,幽兰本增加了UEFI支持,但使用了一段时间后,又改为默认预装U-BOOT了。
曾经改用UEFI的主要原因有两个:一个是支持Windows,另一个是本地的交互界面,包括GUI和UEFI Shell。
改回U-BOOT的原因也主要有两个:一是U-BOOT速度快,二是硬件适配得比较好。U-BOOT对ARM的支持超过20年,而UEFI在ARM上的时间虽然算起来也有将近10年,但是实际使用不多,还属于磨合阶段。
换回U-BOOT后,少了UEFI的本地GUI和UEFI Shell。如何弥补这个缺失呢?
其实,U-BOOT也是有命令接口(Command Shell)的,而且命令的数量和功能与UEFI不相上下,只是使用起来不如UEFI那么方便。
幽兰使用的U-BOOT是基于瑞芯微定制过的版本修改的(以下简称RK版本)。以这个版本为例,只能通过串口终端才能激活和使用命令接口。
具体来说,需要使用一根串口线和两台电脑,在U-BOOT阶段在串口终端中按热键1打断自动启动,让其进入命令行。
Autoboot in 2 seconds
ulan# version
U-Boot 2017.09-YourLand_YouXi (Jan 27 2025 - 14:39:17 +0800)
gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0
GNU ld (GNU Binutils for Ubuntu) 2.42
ulan#
本地对话
串口终端需要两台电脑,肯定不如本地交互方便。为此,我一直在思考如何解决这个问题。
在谷歌公司工作的Simon Glass是U-BOOT的一位重要开发者,他在2023年6月的Embedded Open Source Summit上演讲,题目为《U-Boot中的近期进步》(Recent Advances in U-Boot)。
(Simon Glass,U-Boot重要开发者,照片来自Github)
在这个演讲中,Simon介绍了U-Boot的expo子