Unix 기본 TTY 번호는 무엇입니까?

Unix 기본 TTY 번호는 무엇입니까?

저는 현재 시스템의 직렬 포트에 대한 정보를 얻기 위해 이미 특수 프레임워크를 사용하는 직렬 포트 라이브러리를 개발 중입니다. 직렬 포트는 Unix의 기본 설계이지만 대답은 다음과 같습니다.이것증명 - 파일이 직렬 포트인지 테스트하는 좋은 방법은 문자 장치의 기본 모드를 테스트하고 이것이 실제로 직렬 포트인지 확인하는 것입니다 TTY.

TTY인터넷을 검색해 보면 유니스의 주요 패턴에 대한 문서를 찾을 수 없습니다 . 글쎄, ptmx에 메이저 모드 5가 있다는 내용이 나와 있는 Linux 매뉴얼 페이지는 단 하나뿐입니다.

tty 기반 문자 장치의 구현 세부 사항에 대해 문의했지만이 스택은 오버플로됩니다. 질문, Unix Stack Exchange 커뮤니티에 물어보면 알 수 있을 것 같았습니다.어떻게tty 값은 Unix 버전 전체에서 안정적입니다.

따라서 시스템에 있는 모든 tty 파일의 주요 모드에 대한 지식 기반을 구축하는 데 도움을 요청합니다. 즉: 주요 모드는 무엇입니까?

  • 실제 직렬 포트?
  • 의사 터미널( PTS) 포트?
  • FTDI USB직렬 포트?
  • 다른 USB직렬 포트?

문자 장치의 주요 모드 값을 얻으려면 다음을 사용해야 합니다.

% stat -f " * %N: %Hr%n" /dev/tty* /dev/pts/*
 * /dev/ttys001: 16
                 ^^- major mode

또는 이전 것을 사용하십시오 ls.

% ls -l /dev/ttys001
crw--w----  1 <user>  tty   16,   1 Apr 30 03:25 /dev/ttys001
                major mode -^^   ^^- minor mode

정보를 자신의 답변에 추가하거나 추가 정보로 커뮤니티 위키 답변을 확장할 수 있습니다.

답변1

유닉스 버전 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

(아직 pty가 없습니다)

리눅스 3.2.0(데비안 헐떡임).

/dev참고: 그룹 소유 및 tty를 검색하여 찾을 수도 있습니다 dialout. 그것은 데비안의 일입니다.

  • 가상 콘솔
    • /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

리눅스 3.4.0(안드로이드 4.4.2/Nexus 5)

참고: 모든 Linux에 다음 기능이 포함되어 있습니다.

  • ttyACM(셀룰러 모뎀 제어)
    • ( /dev항목이 없는 것 같습니다): 166
  • ttyHSL(블루투스)
    • /dev/ttyHSL0: 247
  • ttyHS(블루투스)
    • /dev/ttyHS99: 248

다윈 13.1.0(맥OS 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

솔라리스 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]+:스물넷
    • /dev/ptmx:이십 삼
  • 직렬 장치:

    • /dev/tty[abc...]일명 /dev/term/[abc...]또는 /dev/tty0[012..](UART 직렬도): 106
    • 또한 /dev/ttyd[012...]다양한 인터페이스(전화 접속, 모뎀)가 있으며 106개이지만 높은 수준의 마이너가 있습니다.

오픈BSD 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의 메이저+마이너 장치 번호 지정 체계.

devfs/devFreeBSD의 의사 파일 시스템은 일반적으로 장치를 "기본" 클래스로 그룹화하기 위해 기본 + 보조 시스템을 전혀 사용하지 않는 시스템에 설치됩니다 . 반대로,연구개발 인력장치의 inode 번호는 의사 파일 시스템의 inode 번호와 동일하며, inode는 장치 노드가 생성될 때 당시 시스템의 정확한 하드웨어에 따라 오름차순으로 할당됩니다.

따라서 해당 장치 번호를 바로가기로 사용할 수 없습니다 isatty().

답변2

Linux 3.8.2 소스 트리에서:

$ cscope -dL1 '.*MAJOR' | grep -e TTY -e PTS -e PTY
drivers/s390/char/sclp_vt220.c .*MAJOR 31 #define SCLP_VT220_MAJOR TTY_MAJOR
drivers/staging/net/pc300_tty.c .*MAJOR 62 #define CPC_TTY_MAJOR CYCLADES_MAJOR
drivers/staging/sb105x/sb_pci_mp.h .*MAJOR 42 #define SB_TTY_MP_MAJOR 54
drivers/tty/rocket_int.h .*MAJOR 1168 #define TTY_ROCKET_MAJOR 46
drivers/tty/serial/apbuart.c .*MAJOR 38 #define SERIAL_APBUART_MAJOR TTY_MAJOR
drivers/tty/serial/atmel_serial.c .*MAJOR 79 #define SERIAL_ATMEL_MAJOR TTY_MAJOR
drivers/tty/serial/pmac_zilog.c .*MAJOR 93 #define PMACZILOG_MAJOR TTY_MAJOR
drivers/tty/serial/serial_txx9.c .*MAJOR 45 #define TXX9_TTY_MAJOR 204
drivers/tty/serial/serial_txx9.c .*MAJOR 50 #define TXX9_TTY_MAJOR TTY_MAJOR
drivers/usb/class/cdc-acm.h .*MAJOR 21 #define ACM_TTY_MAJOR 166
drivers/usb/serial/ipw.c .*MAJOR 55 #define IPW_TTY_MAJOR 240
include/linux/isdn.h .*MAJOR 41 #define ISDN_TTY_MAJOR 43
include/linux/isdn.h .*MAJOR 42 #define ISDN_TTYAUX_MAJOR 44
include/linux/usb/serial.h .*MAJOR 21 #define SERIAL_TTY_MAJOR 188
include/net/irda/ircomm_tty.h .*MAJOR 45 #define IRCOMM_TTY_MAJOR 161
include/uapi/linux/major.h .*MAJOR 13 #define PTY_MASTER_MAJOR 2
include/uapi/linux/major.h .*MAJOR 16 #define PTY_SLAVE_MAJOR 3
include/uapi/linux/major.h .*MAJOR 17 #define TTY_MAJOR 4
include/uapi/linux/major.h .*MAJOR 18 #define TTYAUX_MAJOR 5
include/uapi/linux/major.h .*MAJOR 144 #define UNIX98_PTY_MASTER_MAJOR 128
include/uapi/linux/major.h .*MAJOR 146 #define UNIX98_PTY_SLAVE_MAJOR (UNIX98_PTY_MASTER_MAJOR+UNIX98_PTY_MAJOR_COUNT)
include/uapi/linux/major.h .*MAJOR 169 #define IBM_TTY3270_MAJOR 227
net/bluetooth/rfcomm/tty.c .*MAJOR 40 #define RFCOMM_TTY_MAJOR 216

UNIX98_PTY_MAJOR_COUNT는 8이며 이는 pty-slave = 136을 제공하지만 달리 사용되지는 않는 것 같습니다.

마음에 떠오르는 또 다른 것은 다음과 같습니다.

drivers/tty/hvc/hvc_console.c .*MAJOR 48 #define HVC_MAJOR 229

(XEN 직렬 장치).

이제 동적으로 할당된 기본 번호가 있는 번호도 있습니다. 예를 들어:

    tty_drv->driver_name = "sdio_uart";
    tty_drv->name =   "ttySDIO";
    tty_drv->major = 0;  /* dynamically allocated */

tty_register_driver0 에 대한 모든 호출을 찾을 수 있습니다 driver->major.

일부는 메이저 번호를 커널/모듈 인수로 제공할 수도 있습니다. 예를 들어 hso.

따라서 Linux에서는 /proc/devices에서 메이저를 찾아 메이저 번호가 아닌 드라이버 이름을 기준으로 결정해야 하는 것처럼 들립니다.

관련 정보