แต่น่าเสียดายที่พอร์ตอนุกรมจะไม่ PlugNPlay ดังนั้นเคอร์เนลไม่ทราบว่าอุปกรณ์เสียบ. หลังจากอ่านHowToกวดวิชาที่ผมเคยมีความคิดในการทำงาน
/dev/
ไดเรกทอรีของยูนิกซ์เช่นระบบปฏิบัติการที่มีไฟล์ชื่อเป็นttySN (กับ n เป็นตัวเลข) ส่วนใหญ่ไม่ตรงกับอุปกรณ์ที่มีอยู่ เพื่อค้นหาสิ่งที่ทำออกคำสั่ง:
$ dmesg | grep ttyS
[ 0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 0.892626] 00:07: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
[ 0.915797] 0000:01:01.0: ttyS4 at I/O 0x9800 (irq = 19) is a ST16650V2
[ 0.936942] 0000:01:01.1: ttyS5 at I/O 0x9c00 (irq = 18) is a ST16650V2
ด้านบนเป็นตัวอย่างผลลัพธ์ของพีซีของฉัน คุณสามารถเห็นการเริ่มต้นของพอร์ตอนุกรมสองสามตัว:
ttyS0
, ttyS1
, ,ttyS4
ttyS5
หนึ่งในนั้นจะมีแรงดันไฟฟ้าเป็นบวกเมื่อเสียบอุปกรณ์ดังนั้นโดยการเปรียบเทียบเนื้อหาของไฟล์ที่/proc/tty/driver/serial
มีและไม่มีอุปกรณ์ที่เสียบอยู่เราสามารถหาttySที่เกี่ยวข้องกับอุปกรณ์ของเราได้อย่างง่ายดาย ดังนั้นตอนนี้ทำ:
$ sudo cat /proc/tty/driver/serial> /tmp/1
(un) เสียบอุปกรณ์
$ sudo cat /proc/tty/driver/serial> /tmp/2
ตรวจสอบความแตกต่างระหว่างสองไฟล์ต่อไป ด้านล่างเป็นผลลัพธ์ของพีซีของฉัน:
$ diff /tmp/1 /tmp/2
2c2
< 0: uart:16550A port:000003F8 irq:4 tx:6 rx:0
---
> 0: uart:16550A port:000003F8 irq:4 tx:6 rx:0 CTS|DSR
โดยการเปรียบเทียบตัวเลขสามตัวกับเอาต์พุต dmesg เราสามารถกำหนดได้ว่าอันไหนคือพอร์ต:
[ 0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
ดังนั้นอุปกรณ์ของเรา/dev/ttyS0
บรรลุภารกิจแล้ว!