5.7.7.framebuffer驅動框架分析2

5.7.7.一、register_framebufferlinux

(1)fb驅動框架開放給驅動編寫着的註冊接口
linux提供了register_framebuffer和unregister_framebuffer函數分別註冊和註銷幀緩衝設備
數組

對於register_framebuffer而言,若是註冊的幀緩衝設備超過了FB_MAX(32),則返回-ENXIO,註冊成功則返回0緩存

(2)fb_check_foreignness
(3)remove_conflicting_framebuffers
(4)device_create
(5)fb_init_device



每一個從設備都須要傳遞一個fb_info的數據結構指針,其即表明單個顯示緩存設備。從中,能夠看到fb_info最終會存儲到全局數組struct fb_info * registered_fb[FB_MAX]中,FB_MAX是32,從這裏咱們能夠看出,framebuffer最多支持32個從設備。另外,每一個從設備還會在/sys/class/graphics/設備類中建立一個設備,最終有mdev在/dev目錄中生成對應的設備文件。假設M個從設備調用那個register_framebuffer接口,即會在/dev中生成M個設備文件,如/dev/fb0,/dev/fb一、/dev/fb2 等等。這M個設備的主設備號都是29,從設備則是0、一、2等等。
數據結構

每一個被註冊的幀緩衝硬件設備在/dev/graphics目錄下都有一個對應的設備文件fb 。minor表示從設備號。 例如,第一個被註冊的幀緩衝區硬件設備在/dev/graphics目錄下都有一個對應的設備文件fb0。用戶空間的應用程序就經過fb0設備文件操做幀緩衝區硬件設備,即將要顯示的畫面渲染到幀緩衝區硬件設備上去。
幀緩衝區控制檯在內核中對應的驅動程序模塊爲fbcon: (drivers\video\console\Fbcon.c)
初始化:

這個函數除了會調用函數device_create來建立一個類別爲graphics的設備fbcon以外,還會調用函數fb_register_client來監聽幀緩衝區硬件設備的註冊事件,這是由函數fbcon_event_notify來實現的,以下所示:

幀緩衝區硬件設備的註冊事件最終由函數fbcon_fb_register來處理的,它的實現以下:

函數fbcon_select_primary用來檢查當前註冊的幀緩衝區硬件設備是不是一個主幀緩衝區硬件設備。若是是的話,那麼久將它的信息記錄下來。這個函數只有當指定了 CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY編譯選項是纔有效,不然是一個空函數。
在linux內核中,每一個控制檯和每個幀緩衝區硬件設備都有一個從0開始的編號,它們的初始對應關係保存在con2fb_map_boot中。控制檯和幀緩衝區硬件設備的初始對應關係是能夠經過設置內核啓動參數來初始化的。在模塊fbcon中, 還有另一個全局數組con2fb_map,也是用來映射控制檯和幀緩衝區硬件設備的對應關係,不過它映射的是控制檯和幀緩衝區硬件設備的實際對應關係。
5.7.7.二、fb在sysfs中的接口
(1)device_attrs
(2)dev_set_drvdata和dev_get_drvdata,
框架

fb_init_device
dev_set_drvdata(&pdev->dev, dev); //把設備相關信息放到設備結構體裏最爲私有數據保存起來ide

相關文章
相關標籤/搜索