我有一个 fitlet2 (https://fit-iot.com/web/products/fitlet2/)有一个串行端口。在 BIOS 中启用“串行端口控制台重定向”后,我可以从计算机(屏幕 /dev/ttyUSB0 115200)连接到带有屏幕的 fitlet2 的串行端口并访问 BIOS。
我还可以通过串行访问 GRUB 引导加载程序。通过串行方式访问各种 GRUB 引导加载程序(debian/ubuntu 安装程序、已安装的 debian)。但是每当系统加载时,我就无法再访问我正在使用的串行端口。
我尝试根据这篇文章编辑引导参数来激活系统 GRUB 中的控制台重定向https://www.cyberciti.biz/faq/howto-setup-serial-console-on-debian-linux/。很快我意识到我的 ttyS0 无法正常工作。开始调试我的物理串行接口时,我只是找不到让它工作的方法。
Setserial 告诉我以下内容:
/dev/ttyS0, UART: 16550A, Port: 0x0000, IRQ: 4
/dev/ttyS1, UART: 16550A, Port: 0x0000, IRQ: 5
/dev/ttyS2, UART: 16550A, Port: 0x0000, IRQ: 7
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3
dmesg | grep tty 这个:
[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-4.9.0-8-amd64 root=/dev/mapper/pen--01--vg-root ro console=ttyS0,115200n8 console=tty0,115200n8
[ 0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-4.9.0-8-amd64 root=/dev/mapper/pen--01--vg-root ro console=ttyS0,115200n8 console=tty0,115200n8
[ 0.000000] console [tty0] enabled
[ 0.000000] console [ttyS0] enabled
[ 49.308213] console [ttyS0] disabled
[ 49.312635] dw-apb-uart.0: ttyS0 at MMIO 0x81424000 (irq = 4, base_baud = 115200) is a 16550A
[ 49.407713] usb 1-8.2: Qualcomm USB modem converter now attached to ttyUSB0
[ 49.410489] usb 1-8.2: Qualcomm USB modem converter now attached to ttyUSB1
[ 49.411349] usb 1-8.2: Qualcomm USB modem converter now attached to ttyUSB2
[ 53.577143] console [ttyS0] enabled
[ 54.744793] dw-apb-uart.1: ttyS1 at MMIO 0x81422000 (irq = 5, base_baud = 115200) is a 16550A
[ 54.755771] dw-apb-uart.2: ttyS2 at MMIO 0x81420000 (irq = 7, base_baud = 115200) is a 16550A
[ 115.902885] ttyS2 - failed to request DMA
为什么 ttyS0 被禁用并再次重新启用?我怎样才能启用它/正确使用它?
如何在串口上获取登录 shell?我缺少什么?
答案1
很快我意识到我的 ttyS0 无法正常工作。开始调试我的物理串行接口时,我只是找不到让它工作的方法。
就我而言,在配备 Atom E3950 cpu 的 fitlet2 上,终端S2是机器背面串口对应的设备节点。我已经能够将它用作具有常用console=ttyS2,115200
内核命令行选项的控制台。我已经使用当前的 Debian 稳定内核 (4.19.152-1) 和不稳定内核 (5.9.11-1) 进行了测试。
使用稳定版时,我也会看到该ttyS2 - failed to request DMA
消息,但它仍然有效。
在我的机器上我有:
# cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A mmio:0x7FFFF0E000 irq:4 tx:0 rx:0
1: uart:16550A mmio:0x7FFFF0C000 irq:5 tx:0 rx:0 CTS
2: uart:16550A mmio:0x480000000 irq:6 tx:1067 rx:38 RTS|CTS|DTR
3: uart:16550A mmio:0x7FFFF0A000 irq:7 tx:0 rx:0 CTS
尽我所能,我无法让 grub 本机使用串行端口。正如您所说,当您在固件中启用串行控制台重定向时,可以通过串行端口访问 grub 接口,但我相信这是通过驱动串行端口的固件代理实现的。在该模式下,配置 grubterminal console
足以在串行端口上输出。无论如何,它运作良好。