![如何在启动时禁用 ttyAMA0 控制台(Raspberry Pi)?](https://linux22.com/image/1016655/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%90%AF%E5%8A%A8%E6%97%B6%E7%A6%81%E7%94%A8%20ttyAMA0%20%E6%8E%A7%E5%88%B6%E5%8F%B0%EF%BC%88Raspberry%20Pi%EF%BC%89%EF%BC%9F.png)
在 Raspberry Pi 3 B+ 上运行 Ubuntu Server,我无法禁用连接到 GPIO UART 的控制台以进行初始启动序列。我能够在常规执行中禁用它(并且已经这样做了),但每次重新启动时,它都会启用“按任意键停止自动启动”对话框。
该电路板将放置在自动驾驶汽车上,配套电路板会不断通过接口传输遥测数据。如果它先启动(除非故意延迟,否则总是会启动),那么 RPi 会因为该对话而无法启动。除了延迟启动带来的麻烦之外,还有一个明显的危险,即如果在任务中途断电,RPi 无法恢复。
Ubuntu 服务器 18.04.4。LTS Raspberry Pi 3 B+ GPIO UART (ttyAMA0)
为了禁用自动启动,我执行以下操作:
- 从 /boot/firmware/nobtcmd.txt 中删除了 console=ttyAMA0,115200
- 将 dtoverlay=pi3-miniuart-bt 添加到 /boot/firmware/config.txt(或 usercfg.txt,差别不大)
- 已禁用[电子邮件保护]
上述步骤仅确保了其在一般使用中的功能,如何阻止初始服务运行?
答案1
[ALL]
我在 18.04 中解决了这个问题,方法是将这些行添加到以下部分,完全绕过 grub /boot/firmware/config.txt
:
kernel=vmlinuz
initramfs initrd.img followkernel
我也在同一个文件中注释掉了设备树但不确定是否有必要。
答案2
这是一个视频其中逐步解释了如何防止 U-boot 控制台中断自动启动并在 UART 上发送调试消息。我知道只有链接的答案会被拒绝,所以这里快速分解一下解决方案:
安装依赖项
sudo apt install git make gcc gcc-aarch64-linux-gnu
Git clone 官方 u-boot 存储库。或者,您也可以 git clone我的存储库分支,其中我已经对静默自动启动进行了必要的更改 - 但如果您需要最新版本,那么您需要克隆官方存储库并自行进行更改。
git clone --depth 1 git://git.denx.de/u-boot.git
cd u-boot
找到 Raspberry Pi 配置文件 - 它们取决于型号,Raspberry Pi 3 为 rpi_3_defconfig,Raspberry Pi 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
第一行删除了启动延迟,因此自动启动不会被 UART 接口上发送的消息打断。接下来的四行启用静默启动,因此 U-boot 不会在 UART 本身上发送任何消息,因为这些消息可能会反过来混淆您的设备。还剩下一件小事,设置静默启动环境变量。更改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 SD 卡。现在,您的 Raspberry Pi 在启动期间不会受到 UART 上任何消息的干扰。启动后的 UART 功能不会受到影响。
答案3
在启动内核之前,Pi 正在运行引导程序默认情况下,它会被通过 UART 接收的数据中断,即使随后内核禁用它。
我已经通过更改解决了 Raspberry Pi 4 上 Ubuntu 20.04 的这个问题引导程序不监听中止信号。
您可以通过设置环境变量将其设置为无延迟启动并且不检查中止启动延迟到-2。为此,您可以编译一个新的引导程序二进制文件或者你通过串行控制台连接到你的 Pi(例如使用屏幕):
$ sudo screen /dev/ttyUSB0 115200
启动 Pi 并通过按下一个键来中止启动过程并设置启动延迟变量为 -2:
U-Boot> setenv bootdelay -2
U-Boot> saveenv
这保存环境变量命令保存环境变量以使更改永久生效。
有关环境变量的更多信息引导程序可以被找寻到这里。