/dev/tty , console, uart 의 상관관계 Embedded Linux

Q: TTY는 뭐하는 놈이냐.?

=== from kldp.org/node/28511===
글쓴이: Viz 작성 일시: 화, 2004/01/06 - 12:38오전

무엇을 하냐면...
(원격) 사용자와 시스템 사이를 중계하는 역할을 합니다. 다리 역할을 한다고 할까요? tty를 통해서 사용자는 시스템과 통신을 하게 됩니다. 사용자가 입력하는 키보드의 입력은 tty를 통해서 시스템에 전달되고 시스템에서 내보내는 출력 역시 tty을 통과해서 사용자에게 전달되죠. 예전에는 UNIX 시스템에 터미널이라는 장치를 통해 접근했고 그 터미널의 종류가 모두 달랐기 때문에 그 터미널을 추상화 하기 위해서도 사용됩니다.

ps. 중간에 터미널이 있기 때문에 console 접속이 아니면 C 표준 라이브러리 함수인 getc() getchar()등이 예상한대로 동작하지 않게되죠. ;)

라고도 하고

=== from http://www.iamroot.org/xe/?mid=QnA&page=9&listStyle=gallery&document_srl=7138 ===
모니터와 연결되는 가상 터미널들에 대한 디바이스 드라이버입니다

라고 한다.

그렇다면 tty를 통해서 시스템과 통신을 하게 되는데....

Q: 그럼 또 콘솔은 뭐야?

=== from http://www.faqs.org/docs/Linux-HOWTO/Keyboard-and-Console-HOWTO.html#s3 ===

when you output something to the console, it first undergoes the standard tty processing, and then is fed to the console driver.

라고하고

=== from http://minimonk.tistory.com/588 ===
/dev/console is a symbolic link to /dev/tty0, and the kernel regards /dev/tty0 as a synonym for the current VT
l
이렇다고 한다.

결국 콘솔은 tty이고 사용자는 콘솔을 통해 tty와 통신하도록 되어 있는 것이다.

그렇다면 내가 가진 드라이버에서 콘솔드라이버는 왜 만들어 주는것인가에 대해 생각해 볼수 있다.

내 콘솔인 tty가  나에게로 부터 정보를 받아야 하겠고, 이것이 내 BSP의 경우 UART 인 것이다.

근데 소스를 분석하다 보니 이상한 것이 있다.

왜 put 밖에 없는거냐..

내입력을 받으려면 get 해야 하는거 아닌가?



결론은 kernel/.config 파일에 있었다.

CONFIG_CMDLINE="console=ttySAC,115200n8"


커널이 부팅하면서 uart driver를 초기화 하고, uart와 연결된 tty를 console로 설정하는 line 때문에
uart 드라이버를 통해 들어온 데이터가 콘솔화면으로 뿌려지는 것이다.

내 소스상의 put만 있는 부분은 bootloader 단계에서만 쓰는 출력용 콘솔이였다.