现在我已经找到了一个合适的解决方案,将近一年后我回到了这个问题。
我所使用的开发板其BSP中有一个相当新的。要禁用串口控制台,我需要执行以下步骤:
将以下定义添加到开发板配置头文件中(位于include/configs/board.h):
#define CONFIG_DISABLE_CONSOLE
#define CONFIG_SILENT_CONSOLE
#define CONFIG_SYS_DEVICE_NULLDEV
检查您的板子在同一文件中是否启用了early_init_f:
#define CONFIG_BOARD_EARLY_INIT_F 1
找到arch文件(类似于arch/x86/cpu/architecture/architecture.c),在其中的early_init_f函数中添加此调用。它实际上修改了板子的全局数据变量,以具有这些标志: gd->flags |= (GD_FLG_SILENT | GD_FLG_DISABLE_CONSOLE);
我的板子上没有这个功能,所以我不得不添加整个函数。
int board_early_init_f(void)
{
gd->flags |= (GD_FLG_SILENT | GD_FLG_DISABLE_CONSOLE);
return 0;
}
示例: 如果您正在寻找Orange Pi 4B的board_early_init_f,则在/build/cache/sources/u-boot/v2020.10/board/rockchip/evb_rk3399/evb-rk3399.c中可以找到它。
就是这样。希望这能帮助其他人!
见此处也可参考。
bootdelay
设置为-2
会禁用UART在U-Boot 2017.01
版本中中断启动过程的能力。看起来-1
是一个特殊情况。common/autoboot.c
,链接:http://git.denx.de/?p=u-boot.git;a=blob;f=common/autoboot.c;hb=refs/heads/master。
关于U-Boot环境变量。没有办法在不修改U-Boot源代码(配置)的情况下完成此操作。
要禁用U-Boot中的串行控制台,您需要重新配置U-Boot。来自U-Boot主分支的文档:Readme.silent
根据该文档,您需要设置:
CONFIG_SILENT_CONSOLE
CONFIG_SILENT_CONSOLE_UPDATE_ON_SET
CONFIG_SYS_DEVICE_NULLDEV
如果你只希望U-Boot保持安静,那么还需要使用CONFIG_SILENT_U_BOOT_ONLY
。
你可能还需要测试CONFIG_SILENT_CONSOLE_UPDATE_ON_RELOC
,并且可能需要将silent 1
添加到CONFIG_EXTRA_ENV_SETTINGS
中。
== 更新 ==
有可能需要以下选项进行解决:
CONFIG_ZERO_BOOTDELAY_CHECK
CONFIG_AUTOBOOT_KEYED
CONFIG_AUTOBOOT_KEYED_CTRLC
CONFIG_AUTOBOOT_PROMPT
CONFIG_AUTOBOOT_DELAY_STR
CONFIG_AUTOBOOT_STOP_STR
这些选项至少可以让您通过要求一个特定字符串来停止启动,来帮助您解决问题。请参见README.autoboot了解更多信息。
这里是视频, 详细讲解如何逐步防止U-boot控制台中断自动启动并在Raspberry Pi上通过UART发送调试信息 - 对于其他使用U-boot的板子来说,应该可以类似地工作。但是,你需要在u-boot源文件夹中找到适合你板子的正确配置文件。我知道仅提供链接的答案往往会被忽视,所以这里简要说明一下解决方案:
安装依赖项
sudo apt install git make gcc gcc-aarch64-linux-gnu bison flex
克隆官方的u-boot存储库。或者,您可以克隆我的存储库分支,我已经对静默自动引导所需的更改进行了修改 - 但是如果您需要最新版本,则需要克隆官方存储库并自行进行更改。
git clone --depth 1 git://git.denx.de/u-boot.git
cd u-boot
找到您的板配置文件 - 它们取决于型号,例如树莓派3的rpi_3_defconfig,树莓派4的rpi_4_defconfig等。在文件末尾添加以下行:
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
#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-