您的 Unix 的 TTY 主编号是多少?

zmo*_*zmo 7 linux solaris bsd tty serial-port

我目前正在研究一个串行端口库,它已经使用特殊框架来获取有关系统上串行端口的信息。虽然串行端口在基本设计Unix的一个答案,例如这一个证明,我认为,一个好办法,测试文件是否是一个串行端口是通过测试字符设备和检查的主要模式,这是否真的是一个TTY与否。

在互联网上爬行,我找不到任何关于TTYs 跨 unice的主要模式的文档。嗯,只有一个 Linux 手册页说明 ptmx 具有主要模式 5。

虽然我已经问基于TTY字符设备的实现细节,这个堆栈溢出 的问题,我想我可能会问了Unix堆栈交流社区,了解如何将TTY值稳定是跨越Unix操作系统。

因此,我请求您帮助建立系统上所有 tty 文件的主要模式的知识库,即:什么是主要模式

  • 真正的串口?
  • 伪终端 ( PTS) 端口?
  • FTDI USB 串口?
  • 其他USB串口?

要获取字符设备的主要模式的值,您应该使用:

% stat -f " * %N: %Hr%n" /dev/tty* /dev/pts/*
 * /dev/ttys001: 16
                 ^^- major mode
Run Code Online (Sandbox Code Playgroud)

或使用好旧ls

% ls -l /dev/ttys001
crw--w----  1 <user>  tty   16,   1 Apr 30 03:25 /dev/ttys001
                major mode -^^   ^^- minor mode
Run Code Online (Sandbox Code Playgroud)

您可以将信息作为您自己的答案,或使用其他信息扩展社区 wiki 答案。

zmo*_*zmo 8

Unix 版本 7(1979):

# ls -l /dev/console /dev/tty?*
crw--w--w- 1 root    0,  0 Sep 22 06:46 /dev/console
crw-rw-r-- 1 root    0,  1 Sep 22 05:47 /dev/tty1
crw-rw-r-- 1 root    0,  2 Sep 22 05:47 /dev/tty2
Run Code Online (Sandbox Code Playgroud)

(还没有 pty)

Linux 3.2.0 (debian wheezy)。

注意:您还可以通过搜索/dev所拥有的组tty和来找到这些dialout。那是 Debian 的事情。

  • 虚拟控制台
    • /dev/tty[0-9]*: 4
  • 真正的串口:
    • /dev/ttyS[0-9]+: 4
  • 伪终端:
    • /dev/pts/[0-9]+: 136
    • /dev/pts/ptmx: 5
  • FTDI USB 串口:
    • /dev/ttyUSB[0-9]+: 188
  • USB串口:(AVR嵌入式USB/Arduino Uno
    • /dev/ttyACM[0-9]+: 166

Linux 3.4.0 (Android 4.4.2 / Nexus 5)

注意:具有所有 linux 以及:

  • ttyACM(蜂窝调制解调器控制)
    • /dev显然没有条目):166
  • ttyHSL(蓝牙)
    • /dev/ttyHSL0: 247
  • ttyHS(蓝牙)
    • /dev/ttyHS99: 248

达尔文 13.1.0 (MacOS 10.9.2):

  • 真正的串口:
    • /dev/ttys[0-9a-f]: 4
  • 伪终端:
    • /dev/ttys[0-9]{3}: 16
  • FTDI USB 串口:
    • /dev/tty.usbserial.*: 18
  • USB串口:(AVR嵌入式USB/Arduino Uno
    • /dev/tty.usbmodem.*: 18

Solaris 10 x86/amd64:

  • 伪终端:

    • /dev/pty[p-r][0-9a-f] (pty 主): 25
    • /dev/tty[p-r][0-9a-f] (pty 奴隶): 26
    • /dev/pts/[0-9]+: 24
    • /dev/ptmx: 23
  • 串行设备:

    • /dev/tty[abc...]又名/dev/term/[abc...]/dev/tty0[012..](UART串行,也):106
    • 也一样,/dev/ttyd[012...]但具有不同的接口(拨号、调制解调器)也在 106 上,但未成年人。

OpenBSD 6.0

如评论中所述 /dev/MAKEDEV

  • PC/AT UART串口:
    • /dev/tty[0-7][0-9a-f]: 8
    • /dev/cua[0-7][0-9a-f]: 8
  • Cyclades 串口:
    • /dev/ttyc*: 38
    • /dev/cuac*: 38
  • Virtio 串口:
    • /dev/ttyVI*: 94
  • USB串口:
    • /dev/ttyU[0-3]: 66
    • /dev/cuaU[0-3]: 66
  • wscons 终端:
    • /dev/tty[C-J][0-b]: 12
  • 伪终端主从(非 UNIX 98)
    • /dev/pty[p-zP-T][0-9a-zA-Z]: 6
    • /dev/tty[p-zP-T][0-9a-zA-Z]: 5

FreeBSD 10.0 和 TrueOS

FreeBSD(及其衍生产品,例如 TrueOS)是您的想法显示出致命缺陷的地方。有没有FreeBSD中大+次设备号方案。

devfsFreeBSD 上的伪文件系统,通常安装在/dev,根本不使用主要+次要系统将设备分组为“主要”类。相反,设备的rdev与其在伪文件系统中的 i-node 编号相同,当设备节点生成时,i-node 只是按升序分配,这取决于当时手头机器上的确切硬件.

因此设备号不能用作isatty().