x window研究筆記(5)
顯示裝置曾一度是效能的瓶頸,儘管有些顯示標準存在,但各廠家為了提高市場競爭力,增強顯示裝置的效能,加入了各種加速功能和其它一些專有特性,各os提供的介面也各不相同,x window為了保持可移植性,又要充分發揮硬體特性,所以顯示裝置驅動介面看起來有點複雜。幸運的是,對tinyx來說,這塊相對比較簡單。
顯示裝置初始化過程。
x server在初始化時會呼叫initoutput函式初始化顯示裝置。
initoutput呼叫kdinitoutput完成tinyx顯示裝置的初始化。
在kdinitoutput中:首先呼叫initcard把所有card放到乙個鍊錶中,對於fbdev來說,就是呼叫kdcardinfoadd把fbdevfuncs註冊到kdcardinfo裡。再為最後乙個card增加乙個kdscreeninfo,並初始化它(實際上tinyx假設的是單card和單screen)。
在kdinitoutput中:接下來呼叫card->cfuncs->cardinit初始化鍊錶中的card,呼叫kdinitscreen初始化card中的kdscreeninfo。
最後通過kdinitscreen,再經過addscreen把所有card中的所有screen加入到screeninfo.screens的全域性的陣列中,完成顯示裝置的初始化。
kdscreeninit是真正初始化screen(不是前面的screeninfo)的函式,初始化完成之後dix看到的是screenptr這樣的抽象物件。
kdcardfuncs的結構描述
kdcardfuncs fbdevfuncs
=...
; fbdevcardinit 建立fbdevpriv結構,開啟/dev/fb0裝置檔案,獲取framebuffer資訊,並對映視訊記憶體到使用者空間。
fbdevscreeninit 根據framebuffer的資訊初始化screeninfo。
fbdevinitscreen 初始化screen的資訊和虛函式表。
fbdevpreserve 空函式。
fbdevenable 啟用framebuffer並設定調色盤。
fbdevdpms 顯示器電源管理,通過ioctl控制framebuffer的電源模式。
fbdevdisable 空函式。
fbdevrestore 空函式。
fbdevscreenfini 空函式。
fbdevcardfini unmap視訊記憶體,並關閉framebuffer裝置檔案。
fbdevgetcolors 得到調色盤資訊。
fbdevputcolors 設定調色盤資訊。
screen的初始化並不是在tinyx/fbdev中完成的,原因是framebuffer的操作是公共的,非tinyx下也可以使用,所以這些函式的實現是放在xserver/fb中,由fbsetupscreen來初始化的。
(待續)
X Window研究筆記 5
x window研究筆記 5 顯示裝置曾一度是效能的瓶頸,儘管有些顯示標準存在,但各廠家為了提高市場競爭力,增強顯示裝置的效能,加入了各種加速功能和其它一些專有特性,各os提供的介面也各不相同,x window為了保持可移植性,又要充分發揮硬體特性,所以顯示裝置驅動介面看起來有點複雜。幸運的是,對t...
X Window研究筆記 14
x window研究筆記 14 驅動程式對不同硬體和平台上的實現有很多差異,x window框架部分並不會直接與驅動程式關聯起來,也是採用的註冊機制。前面已經有關於這方面的介紹了,這裡不再驁述了。實現指定的介面 儘管大多數與平台相關的函式都可以採用註冊機制,x window框架部分通過函式指標去呼叫...
X Window研究筆記 16
x window研究筆記 16 伺服器端字型的配置 指定字型搜尋路徑 預設的路徑 包括 usr x11r6 lib x11 fonts目錄下的幾個子目錄。在配置檔案中指定 tinyx不需要配置檔案。在命令列引數中指定。用fp選項設定字型路徑。用fn設定預設的字型。用fc設定預設的游標字型。預設的字型...