Tty
framebuffer和tty的關係
幀緩衝區是允許簡化螢幕界面的設備文件。例如,在連接了 HDMI 顯示器的 RaspberryPi 上執行以下程式碼:
cat /dev/urandom > /dev/fb1
有一些命令 (
fbi
,fim
) 允許將完整圖像注入幀緩衝區。網際網路上有多種資源(ref1、ref2、ref3)試圖或多或少地成功解釋如何添加系統服務,這將導致螢幕上出現圖像。
這些資源中的一個共同點是
tty
與framebuffer
. (即兩者都fbi
可以fim
選擇傳遞 atty
)。我的假設是 a
tty
是與 a 分開的概念framebuffer
。使用tty
向framebuffer
使用者輸出內容,但幀緩衝區與tty
.
tty
a和 a背後是否存在隱藏的關係,framebuffer
這可以解釋為什麼將圖像列印到 a 的命令framebuffer
似乎依賴於 atty
?
“隱藏關係”與 Linux 支持多個虛擬終端有關,這意味著幀緩衝區可以被多個不同的終端使用。直接操作幀緩衝區的程序需要知道目前哪個終端擁有幀緩衝區:
- 當這樣的程序啟動時,它需要儲存目前的終端配置,然後告訴核心它想直接控制顯示器(它使用 切換到“圖形模式” )
KDSETMODE
ioctl
並根據需要設置幀緩衝區(例如fbi
,在平移)。它還需要告訴核心它想被告知虛擬終端開關(當使用者按下時)。Ctrl``Alt``F*n*
- 如果使用者切換終端,核心將告訴正在執行的程序;程序需要恢復終端設置並放棄對終端 (
VT_RELDISP
) 的控制,才能真正進行切換。- 如果使用者切換回執行基於幀緩衝區的程序的終端,核心會再次告知程序,程序會根據需要設置終端和幀緩衝區並恢復其顯示。
這在VT 切換的工作原理中有詳細描述。