Debian

擺脫 Respeaker Core V2 上的串列控制台

  • November 11, 2018

我有一個Respeaker Core v2.0,我想使用 UART 介面(這個板有一個連接到 Uart 埠的 USB 到 TTL 適配器)來使這個板與另一個板通信。

設置$$ EDITED $$

我已將串列到 TTL 轉換器插入筆記型電腦並將其連接到 RespeakerCore 的 TX、RX 和 GND 引腳。然後,我在筆記型電腦上打開了一個 miniterm 控制台(具有正確的波特率和埠設置),在 Respeaker 上打開了另一個。我打開了 Respeaker,miniterm 上出現以下內容:

Starting kernel ...

[    0.065704] /cpus/cpu@f00 missing clock-frequency property
[    0.071689] /cpus/cpu@f01 missing clock-frequency property
[    0.077712] /cpus/cpu@f02 missing clock-frequency property
[    0.083677] /cpus/cpu@f03 missing clock-frequency property
[    0.829278] rk-vcodec 20020000.vpu-service: could not find power_model node
[    0.856875] rockchip-vop 20050000.vop: invalid resource
[    0.862758] rockchip-vop 20050000.vop: invalid resource
[    0.868586] rockchip-vop 20050000.vop: missing rockchip,grf property
[    0.876380] i2c i2c-0: of_i2c: modalias failure on /hdmi@200a0000/ports
[    2.037851] cpu cpu0: Failed to get pvtm
[    2.122396] rockchip-dmc dmc: Failed to get pvtm
[    2.128437] rockchip-dmc dmc: failed to get vop bandwidth to dmc rate
[    2.139954] rknandbase v1.2 2018-05-08
[    2.612237] rk_gmac-dwmac 30200000.ethernet: Can not read property: tx_delay.
[    2.620241] rk_gmac-dwmac 30200000.ethernet: set tx_delay to 0x30
[    2.627017] rk_gmac-dwmac 30200000.ethernet: Can not read property: rx_delay.
[    2.635007] rk_gmac-dwmac 30200000.ethernet: set rx_delay to 0x10
[    2.642046] rk_gmac-dwmac 30200000.ethernet: cannot get clock clk_mac_speed
[    5.638765] get ac108 regulator name failed 
[    5.749516] get ac108 regulator name failed 
[    5.760861] mali-utgard 20001000.gpu: Failed to get pvtm
[    5.938710] devfreq 20001000.gpu: Couldn't update frequency transition information.
[    6.153327] ac108_write error->[REG-0x00,val-0x12]
[    6.175033] ac108_write error->[REG-0x00,val-0x12]
[    9.971169] rk_gmac-dwmac 30200000.ethernet: rk_get_eth_addr: mac address: 72:1c:0a:8e:4a:4a

Debian GNU/Linux 9 glutamate ttyS2

respeaker.io Debian Image 20180801

Support/FAQ: http://respeaker.io

glutamate login:

TX 和 RX 引腳用作串列控制台。

userk@glutamate:~$ setserial -g /dev/ttyS[0123]
/dev/ttyS0, UART: 16550A, Port: 0x0000, IRQ: 29
/dev/ttyS1, UART: 16550A, Port: 0x0000, IRQ: 30
/dev/ttyS2, UART: 16550A, Port: 0x0000, IRQ: 31
/dev/ttyS3, UART: unknown, Port: 0x0000, IRQ: 0

還有一項服務正在使用我感興趣的 ttyS2 設備。

userk@glutamate:~$ sudo systemctl status | grep tty
          │ ├─system-serial\x2dgetty.slice
          │ │ ├─serial-getty@ttyS2.service
          │ │ │ └─721 /sbin/agetty --keep-baud 115200,38400,9600 ttyS2 vt220
          │ │ └─serial-getty@ttyGS0.service
          │ │   └─747 /sbin/agetty --keep-baud 115200,38400,9600 ttyGS0 vt220
          │ │ └─767 brcm_patchram_plus --enable_hci --no2bytes --use_baudrate_for_download --tosleep 200000 --baudrate 1500000 --patchram /system/etc/firmware/bcm43438a0.hcd /dev/ttyS1
          │ ├─system-getty.slice
          │ │ └─getty@tty1.service
          │ │   └─720 /sbin/agetty --noclear tty1 linux
              │ ├─1050 grep tty

我試過的

我嘗試使用以下命令停止服務:

sudo systemctl stop serial-getty@ttyS2.service

但 5 秒後它會自動重新啟動。

問題

一段時間後,系統開始再次將控制台輸出發送到 ttyS2 埠。

是否可以完全刪除連結到 ttyS2 的串列控制台?

解決方案

只需停止並禁用該服務:

sudo systemctl stop serial-getty@ttyS2.service
sudo systemctl disable serial-getty@ttyS2.service

並且通信是雙向的。

你找錯地方了。

驅動這一點的基本配置項是console通過引導載入程序在命令行上提供給核心的設置。這就是告訴生成器要啟動哪些串列控制台服務。就是告訴核心將核心控制台輸出發送到哪裡。正是它告訴核心將/dev/console輸出發送到哪裡。如果您不希望您的串列設備成為控制台,那麼您需要進行調整。

但是,請注意您沒有serial-getty@ttyS2.service服務。你有getty@ttyS2.service服務和serial-getty@ttyGS0.service服務。所以系統認為那ttyGS0是你的串列控制台設備,顯然已經不認為那ttyS2是。

你可能getty@ttyS2.service在某個時候手工製作。它不是 systemd 的標準。因為它是不正確的。該getty@.service模板不適用於串口設備,是為核心虛擬終端設備設計的。請注意,serial-getty@.service已針對系統認為是您的控制台的**其他設備實例化了正確的模板 。

所以禁用getty@ttyS2.service.

進一步閱讀

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