프레임버퍼와 tty의 관계

프레임버퍼와 tty의 관계

프레임버퍼는 단순화된 화면 인터페이스를 허용하는 장치 파일입니다. 예를 들어 HDMI 디스플레이가 연결된 RaspberryPi에서 다음 코드를 실행합니다.

cat /dev/urandom > /dev/fb1

프레임버퍼에 전체 이미지를 삽입할 수 있는 명령( fbi, ) 이 있습니다 .fim

인터넷에는 많은 자료가 있습니다(참고문헌 1,참고문헌 2,참고문헌 3)는 화면에 이미지를 생성하는 make systemd 서비스를 추가하는 방법을 설명하기 위해 어느 정도 성공적으로 시도했습니다.

이러한 리소스 간의 공통 스레드는 tty와 함께 언급 된다는 것입니다 framebuffer. (즉, fbi둘 다 및 fim선택적으로 a 로 전달될 수 있습니다 tty).


내 가정은 a 가 ttya 와 별개의 개념이라는 것입니다 framebuffer. 사용자에게 콘텐츠를 tty출력하는 데 사용되지만 framebuffer프레임 버퍼는 tty.

ttyframebuffer이미지를 a에 인쇄하는 명령이 a framebuffer에 의존하는 것처럼 보이는 이유를 설명할 수 있는 a와 a 뒤에 숨겨진 관계가 있습니까 tty?

답변1

이 "숨겨진 관계"는 Linux의 다중 가상 터미널 지원과 관련이 있습니다. 즉, 프레임 버퍼가 여러 다른 터미널에서 사용될 수 있음을 의미합니다. 프레임 버퍼를 직접 조작하는 프로그램은 현재 프레임 버퍼를 소유하고 있는 터미널을 알아야 합니다.

  • 이러한 프로그램이 시작되면 현재 터미널 구성을 저장한 다음 디스플레이를 직접 제어하고 싶다고 커널에 알려야 합니다(다음을 사용하여 "그래픽 모드"로 전환).이것KDSETMODE ioctl) 필요에 따라 프레임 버퍼를 설정합니다(예를 들어에서 fbi번역을 구성합니다.) 또한 가상 터미널 스위치(사용자가 누를 때)에 대해 알고 싶다는 사실을 커널에 알려야 합니다.CtrlAltFn

  • 사용자가 터미널을 전환하면 커널은 실행 중인 프로그램에 터미널 설정을 복원하고 터미널 제어를 포기해야 함을 알립니다.VT_RELDISP) 실제로 전환하기 전에.

  • 사용자가 프레임 버퍼 기반 프로그램을 실행하는 터미널로 다시 전환하면 커널은 프로그램에 다시 알리고 프로그램은 필요에 따라 터미널과 프레임 버퍼를 설정하고 디스플레이를 다시 시작합니다.

이것은VT 전환 작동 방식.

관련 정보