Tty

framebuffer和tty的關係

  • May 31, 2022

幀緩衝區是允許簡化螢幕界面的設備文件。例如,在連接了 HDMI 顯示器的 RaspberryPi 上執行以下程式碼:

cat /dev/urandom > /dev/fb1

有一些命令 ( fbi, fim) 允許將完整圖像注入幀緩衝區。

網際網路上有多種資源(ref1ref2ref3)試圖或多或少地成功解釋如何添加系統服務,這將導致螢幕上出現圖像。

這些資源中的一個共同點是ttyframebuffer. (即兩者都fbi可以fim選擇傳遞 a tty)。


我的假設是 atty是與 a 分開的概念framebuffer。使用ttyframebuffer使用者輸出內容,但幀緩衝區與tty.

ttya和 a背後是否存在隱藏的關係,framebuffer這可以解釋為什麼將圖像列印到 a 的命令framebuffer似乎依賴於 a tty

“隱藏關係”與 Linux 支持多個虛擬終端有關,這意味著幀緩衝區可以被多個不同的終端使用。直接操作幀緩衝區的程序需要知道目前哪個終端擁有幀緩衝區:

  • 當這樣的程序啟動時,它需要儲存目前的終端配置,然後告訴核心它想直接控制顯示器(它使用 切換到“圖形模式” KDSETMODE ioctl並根據需要設置幀緩衝區(例如fbi,在平移)。它還需要告訴核心它想被告知虛擬終端開關(當使用者按下時)。Ctrl``Alt``F*n*
  • 如果使用者切換終端,核心將告訴正在執行的程序;程序需要恢復終端設置並放棄對終端 ( VT_RELDISP) 的控制,才能真正進行切換。
  • 如果使用者切換回執行基於幀緩衝區的程序的終端,核心會再次告知程序,程序會根據需要設置終端和幀緩衝區並恢復其顯示。

這在VT 切換的工作原理中有詳細描述。

引用自:https://unix.stackexchange.com/questions/704485