这是视频,其中逐步解释了如何防止 U-boot 控制台中断自动启动并在 Raspberry Pi 上的 UART 上发送调试消息 - 如果其他板使用 U-boot,它应该类似地工作。但是,您需要在 u-boot 源文件夹中为您的开发板找到正确的配置文件。我知道只有链接的答案是不受欢迎的,所以这里有一个解决方案的快速分解:
安装依赖项
sudo apt install git make gcc gcc-aarch64-linux-gnu bison flex
Git 克隆官方 u-boot 存储库。或者,您可以 git clone my fork of repository,我已经对静默自动启动进行了必要的更改 - 但如果您需要最新版本,则需要克隆官方存储库并自己进行更改。
git clone --depth 1 git://git.denx.de/u-boot.git
cd u-boot
找到您的电路板配置文件 - 它们取决于型号,例如 rpi_3_defconfig 用于 Raspberry Pi 3,rpi_4_defconfig 用于 Raspberry Pi 4 等等。将以下行添加到文件末尾
CONFIG_BOOTDELAY=-2
CONFIG_SILENT_CONSOLE=y
CONFIG_SYS_DEVICE_NULLDEV=y
CONFIG_SILENT_CONSOLE_UPDATE_ON_SET=y
CONFIG_SILENT_U_BOOT_ONLY=y
第一行去掉了启动延迟,因此自动启动不会被 UART 接口上发送的消息中断。接下来的四行启用静默启动,因此 U-boot 不会在 UART 本身上发送任何消息,因为这些消息可能会反过来混淆您的设备。还剩下一件小事,设置静默启动环境变量。通过添加以下内容更改您的板的头文件(对于 raspberry pi,它是 include/configs/rpi.h ):
#define CONFIG_EXTRA_ENV_SETTINGS \
"dhcpuboot=usb start; dhcp u-boot.uimg; bootm\0" \
"silent=1\0" \
ENV_DEVICE_SETTINGS \
ENV_DFU_SETTINGS \
ENV_MEM_LAYOUT_SETTINGS \
BOOTENV
现在配置
make rpi_3_defconfig
从存储库主文件夹并使用
make CROSS_COMPILE=aarch64-linux-gnu-
构建过程完成后,您将拥有一个 u-boot.bin 文件,您需要将其重命名(对于 Raspberry Pi 3 为 uboot_rpi_3.bin)并复制到位于 /boot/firmware/ 的 Raspberry Pi SD 卡。现在,您的 Raspberry Pi 在启动期间不会受到 UART 上的任何消息的干扰。启动后的 UART 功能不会受到影响。
相关文档:https ://gitlab.denx.de/u-boot/u-boot/blob/HEAD/doc/README.autoboot https://gitlab.denx.de/u-boot/u-boot/blob/ HEAD/doc/README.silent https://wiki.ubuntu.com/ARM/RaspberryPi