framebuffer裝置驅動的幾個連線關鍵點

2021-09-11 16:27:09 字數 2424 閱讀 5011

framebuffer的架構

見到的宋寶華老師總結的乙個圖表,覺得很清晰,直接移過來了

關鍵點點析

例項**

檔案drivers/video/mxc/mxc_ipuv3_fb.c

static struct fb_ops mxcfb_ops = ;

......

static struct fb_info *mxcfb_init_fbinfo(struct device *dev, struct fb_ops *ops) /* 333333333 */

......

static int mxcfb_probe(struct platform_device *pdev)

檔案driver/video/fbmem.c

int

register_framebuffer(struct fb_info *fb_info)

static int do_register_framebuffer(struct fb_info *fb_info)

else

fb_init_device(fb_info); /* 裡面構建所有的屬性檔案,賦予使用者空間操作 */

if (fb_info->pixmap.addr == null)

} fb_info->pixmap.offset = 0;

if (!fb_info->pixmap.blit_x)

fb_info->pixmap.blit_x = ~(u32)0;

if (!fb_info->pixmap.blit_y)

fb_info->pixmap.blit_y = ~(u32)0;

if (!fb_info->modelist.prev || !fb_info->modelist.next)

init_list_head(&fb_info->modelist);

if (fb_info->skip_vt_switch)

pm_vt_switch_required(fb_info->dev, false);

else

pm_vt_switch_required(fb_info->dev, true);

fb_var_to_videomode(&mode, &fb_info->var);

fb_add_videomode(&mode, &fb_info->modelist);

registered_fb[i] = fb_info; /**************** 連線關鍵點,下面的圍繞它來找出 fb_info中的操作 和

file_operation 中的操作的連線關係 ***********/

event.info = fb_info;

if (!lock_fb_info(fb_info))

return -enodev;

console_lock();

fb_notifier_call_chain(fb_event_fb_registered, &event);

console_unlock();

unlock_fb_info(fb_info);

return 0;

}extern struct fb_info *registered_fb[fb_max]; /********** 就是乙個陣列 (檔案include/linux/fb.h中)**********/

static const struct file_operations fb_fops = ;

static ssize_t

fb_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) /* 1111111111 */

static struct fb_info *file_fb_info(struct file *file) /* 222222222222 */

重要結構體

struct fb_info

struct fb_info ;
struct fb_ops

struct fb_ops ;
乙個簡單的驅動,重要的是摸清脈絡,搞清呼叫關係,這樣有問題或者想靈活操作(例如更改等)可以找準下手點。本文主要目的是弄清軟體流程,至於裡面的具體實施跟具體的晶元有關,例如本文提到的例子,用的fsl的**,而這裡面糅合了ipu來進行framebuffer來處理,它的ipu操作並沒有在這裡進行分析,做顯示的東西比較多,對他的ipu也有一定的了解,有時間會另外寫出來。本文留做快速回憶或者稍微幫大家理理,希望有用。

顯示裝置framebuffer

分配 設定 註冊dispopr結構體,由display manager.c通過鍊錶管理。dispopr結構體包含顯示裝置的屬性和操作函式。其中fbshowpixel主要用於顯示字型點陣,showpage主要用於視訊記憶體管理。typedef struct dispopr t dispopr,pt d...

framebuffer驅動全篇(三)

color map 剖析 在framebuffer驅動程式設計中,cmap這個東東太暈了。現在我要把他赤裸裸的剖析給大家 1.struct fb cmap 顏色對映表 struct fb cmap 該結構在fb.件中定義,在struct fb ops結構中有兩個成員函式與其相關 獲取顏色表 int ...

Linux下Framebuffer驅動簡介

version v0.1 time 09 06 2008 author green waste 163.com 最近接觸了一些關於linux下framebuffer方面的東西和lcd的framebuffer驅動,所以去了解了一些相關基礎知識。為了避免其他人走我走過的彎路,所以就把我的一些很少的心得,...