CentOS7 收不到串口數(shù)據(jù)6:常見(jiàn)原因與解決方法
問(wèn)題現(xiàn)象描述
在CentOS7系統(tǒng)中,用戶通過(guò)串口(如ttyS0、ttyUSB0)連接外部設(shè)備時(shí),可能出現(xiàn)無(wú)法接收數(shù)據(jù)的情況。典型表現(xiàn)為:使用minicom
、screen
等工具無(wú)法讀取數(shù)據(jù),或應(yīng)用程序調(diào)用串口API時(shí)返回超時(shí)錯(cuò)誤。
排查步驟與解決方案
1. 檢查硬件連接與設(shè)備狀態(tài)
確認(rèn)物理連接正常,使用dmesg | grep tty
命令查看系統(tǒng)是否識(shí)別串口設(shè)備。若設(shè)備未列出,需檢查USB轉(zhuǎn)串口驅(qū)動(dòng)是否加載(如usbserial
模塊)。
# 查看已加載的串口驅(qū)動(dòng)
lsmod | grep usbserial
# 手動(dòng)加載驅(qū)動(dòng)(以PL2303為例)
modprobe pl2303
2. 驗(yàn)證串口權(quán)限配置
確保當(dāng)前用戶擁有訪問(wèn)串口的權(quán)限。執(zhí)行ls -l /dev/ttyS0
檢查設(shè)備所屬組,將用戶加入dialout
或uucp
組:
sudo usermod -aG dialout $USER
sudo chmod 660 /dev/ttyS0
3. 禁用Serial Getty服務(wù)
CentOS7默認(rèn)啟用Serial Getty服務(wù)占用串口,導(dǎo)致應(yīng)用程序無(wú)法訪問(wèn)。通過(guò)以下命令關(guān)閉服務(wù):
sudo systemctl stop serial-getty@ttyS0.service
sudo systemctl disable serial-getty@ttyS0.service
4. 配置正確的串口參數(shù)
使用stty
命令設(shè)置波特率、數(shù)據(jù)位等參數(shù),確保與外部設(shè)備匹配:
stty -F /dev/ttyS0 115200 cs8 -parenb -cstopb
5. 測(cè)試串口回環(huán)功能
短接串口的TX與RX引腳,發(fā)送測(cè)試數(shù)據(jù)驗(yàn)證硬件是否正常:
echo "test" > /dev/ttyS0
cat
6. 檢查內(nèi)核串口支持與GRUB配置
編輯/etc/default/grub
文件,添加console=ttyS0,115200n8
參數(shù),更新GRUB后重啟:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
高級(jí)調(diào)試技巧
- 使用
setserial -g /dev/ttyS0
查看串口詳細(xì)信息 - 通過(guò)
cat /proc/tty/driver/serial
監(jiān)控串口中斷狀態(tài) - 安裝
tio
或cu
工具進(jìn)行交互式測(cè)試