Linux

提供 console 啟動參數以啟用串列訪問時,系統無法啟動

  • July 28, 2021

我想要完成的

我想通過 USB-RS232 適配器遠端終端訪問我的 NAS(執行 Debian Stretch)。由於這台機器應該是無頭的,所以我也想看看串口線的啟動過程。

(不過,為了評估這個問題,目前 HDMI 埠上連接了一個螢幕。)

我採取的行動

我附加console=ttyUSB0到核心參數列表中。啟動時,這會導致我的系統凍結。

引導輸出的最後幾行是:(Bootloader 是 extlinux)

Loading /vmlinuz... ok
Loading /initrd.img...ok
Probing EDD (edd=off to disable)... ok

當不使用所述核心參數時,機器正在引導而沒有問題。從那裡開始,我可以通過執行輕鬆完成串列終端訪問

systemctl enable serial-getty@ttyUSB0.service
systemctl start serial-getty@ttyUSB0.service

在遠端伺服器上,以及

screen -F /dev/ttyUSB0 9600

在我的本地機器上。因此,USB-RS232 適配器工作正常。該伺服器是帶有 Braswell 晶片組的Intel NUC 5CPYH,執行Linux 4.9.0-4-amd64debian 核心。

我的問題

我必須採取哪些措施才能使其正常工作?

編輯№1

當提供console=tty0 console=ttyUSB0,9600n8啟動參數時,機器啟動得很好,但我仍然無法連接到串列埠。另外,systemctl status serial-getty@ttyUSB0.service說服務是loadedand inactive (dead)。我本來預計它會在那時啟動並執行。

編輯№2

我做了一些研究,發現我的 initramfs 缺少相關的核心模組。我通過提供核心參數設法進入 initramfs shell,break=init發現沒有/dev/ttyUSB0設備。

我在重新創建 initramfs 後添加了cp210x,pl2303ftdi_sioto /etc/initramfs-tools/modules,看到現在/dev/ttyUSB0initramfs shell 中有一個設備。

不過,我無法從我的另一台機器連接。所以我嘗試在該設備上手動啟動 getty:

# /sbin/getty -L 9600 /dev/ttyUSB0 vt100
getty: setsid: Operation not permitted
# su root -c "/sbin/getty -L 9600 /dev/ttyUSB0 vt100"
sh: su: not found

這就是我現在的位置。

Debian 目前不使用 建構它的 Linux 核心CONFIG_USB_SERIAL_CONSOLE=y,這是該功能工作所必需的。

對應的錯誤報告是https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=868352

CONFIG_USB_SERIAL_CONSOLE=y在使用(參見https://kernel-team.pages.debian.net/kernel-handbook/ch-common-tasks.html#s-common-official )建構我自己的核心之後,我還必須包含 FTDI 串列驅動程序對於我在 initrd 中的適配器:

# echo ftdi_sio >> /etc/initramfs-tools/modules
# update-initramfs -u

最後,我調整/etc/default/grub閱讀:

GRUB_CMDLINE_LINUX_DEFAULT="panic=10 panic_on_oops=1 console=tty0 console=ttyUSB0,115200"

……然後跑了update-grub

之後,我成功看到了啟動資訊,並且可以通過自動啟動的serial-getty@ttyUSB0 服務登錄。

您的系統沒有凍結。您剛剛將所有輸出定向到串列控制台。

將控制台參數傳遞給核心,您必須同時包含本地控制台和串列介面。

請參閱TLDP - 遠端串列控制台 HOWTO - 第 5 章。配置 Linux 核心

圖 5-2。推薦核心參數,帶顯卡的PC

console=tty0 console=ttyS0,9600n8

核心消息將同時出現在第一個虛擬終端和串列埠上。來自 init 系統和系統記錄器的消息將僅出現在第一個串列埠上。在查看連接的監視器時,這可能會有點令人困惑:機器似乎正在啟動然後掛起。不要驚慌,init 系統已經啟動,但現在正在向串列埠列印消息,但在螢幕上沒有列印任何內容。如果配置了 getty,則登錄:提示最終將出現在連接的監視器上。

對於沒有顯卡的 PC,此 HOWTO 建議核心參數:

圖 5-3。推薦核心參數,不帶顯卡的PC

console=ttyS0,9600n8

這些參數由引導載入程序傳遞給引導核心。接下來,我們將配置您的 Linux 安裝使用的引導載入程序,以將控制台參數傳遞給核心。

引用自:https://unix.stackexchange.com/questions/425280