Framebuffer 驅動學習總結(一) ---- 總體架構及關鍵結構體
一、Framebuffer 裝置驅動總體架構
幀緩衝裝置為標準的字元型裝置,在Linux中主裝置號29,定義在/include/linux/major.h中的FB_MAJOR,次裝置號定義幀緩衝的個數,最大允許有32個FrameBuffer,定義在/include/linux/fb.h中的FB_MAX,對應於檔案系統下/dev/fb%d裝置檔案。
我們從上面這幅圖看,幀緩衝裝置在Linux中也可以看做是一個完整的子系統,大體由fbmem.c和xxxfb.c組成。向上給應用程式提供完善的裝置檔案操作介面(即對FrameBuffer裝置進行read、write、ioctl等操作),介面在Linux提供的fbmem.c檔案中實現;向下提供了硬體操作的介面,只是這些介面Linux並沒有提供實現,因為這要根據具體的LCD控制器硬體進行設定,所以這就是我們要做的事情了(即xxxfb.c部分的實現)。
二 、Framebuffer 相關的重要資料結構:
1、從Framebuffer裝置驅動程式結構看,該驅動主要跟fb_info結構體有關,該結構體記錄了Framebuffer裝置的全部資訊,包括裝置的設定引數、狀態以及對底層硬體操作的函式指標。在Linux中,每一個Framebuffer裝置都必須對應一個fb_info,fb_info在/linux/fb.h中的定義如下:(只列出重要的一些)
1 struct fb_info { 2 atomic_t count; 3 int node; ///次裝置號 4 int flags; 5 struct mutex lock; //用於open、release、ioctrl功能的鎖 6 struct mutex mm_lock; /* Lock for fb_mmap and smem_* fields */ 7 struct fb_var_screeninfo var; //LCD 可變引數 8 struct fb_fix_screeninfo fix; //LCD 固定引數 9 struct fb_monspecs monspecs; /* Current Monitor specs *///LCD 顯示器標準 10 struct work_struct queue; //幀緩衝事件佇列 11 struct fb_pixmap pixmap; ///影象硬體 mapper 12 struct fb_pixmap sprite; //游標硬體 mapper 13 struct fb_cmap cmap; //當前顏色表 14 struct list_head modelist; //模式列表 15 struct fb_videomode *mode; //當前的顯示模式 16 17 #ifdef CONFIG_FB_BACKLIGHT 18 /* assigned backlight device */ 19 /* set before framebuffer registration, 20 remove after unregister */ 21 struct backlight_device *bl_dev;///對應的背光裝置 22 23 /* Backlight level curve */ 24 struct mutex bl_curve_mutex; 25 u8 bl_curve[FB_BACKLIGHT_LEVELS];///背光調整 26 #endif 27 #ifdef CONFIG_FB_DEFERRED_IO 28 struct delayed_work deferred_work; 29 struct fb_deferred_io *fbdefio; 30 #endif 31 32 struct fb_ops *fbops;///---->對底層硬體裝置操作的函式指標 33 struct device *device; /* This is the parent *////父裝置節點 34 struct device *dev; /* This is this fb device *////當前的幀緩衝裝置 35 int class_flag; /* private sysfs flags */ 36 #ifdef CONFIG_FB_TILEBLITTING 37 struct fb_tile_ops *tileops; /* Tile Blitting *///圖塊Blitting ? 38 #endif 39 char __iomem *screen_base; /* Virtual address *///虛擬地址 40 unsigned long screen_size; /* Amount of ioremapped VRAM or 0 */ ///LCD IO對映的虛擬記憶體大小 41 void *pseudo_palette; /* Fake palette of 16 colors *///偽16色 顏色表 42 #define FBINFO_STATE_RUNNING 0 43 #define FBINFO_STATE_SUSPENDED 1 44 u32 state; /* Hardware state i.e suspend *////LCD 掛起或復位的狀態 45 void *fbcon_par; /* fbcon use-only private area */ 46 /* From here on everything is device dependent */ 47 void *par; 48 /* we need the PCI or similar aperture base/size not 49 smem_start/size as smem_start may just be an object 50 allocated inside the aperture so may not actually overlap */ 51 struct apertures_struct { 52 unsigned int count; 53 struct aperture { 54 resource_size_t base; 55 resource_size_t size; 56 } ranges[0]; 57 } *apertures; 58 59 bool skip_vt_switch; /* no VT switch on suspend/resume required */ 60 };
其中,fb_var_screeninfo和fb_fix_screeninfo兩個結構體跟LCD硬體屬性相關,fb_var_screeninfo代表可修改的LCD顯示引數,如解析度和畫素位元數;fb_fix_screeninfo代表不可修改的LCD屬性引數,如顯示記憶體的實體地址和長度等。另外一個非常重要的成員是fb_ops,其是LCD底層硬體操作介面集。
fb_ops硬體操作介面集包含很多介面,如設定可變引數fb_set_par、設定顏色暫存器fb_setcolreg、清屏介面fb_blank、畫點陣圖介面fb_imageblit、記憶體對映fb_mmap等等。
fb_info結構體在呼叫register_framebuffer之前完成初始化。一般來說,LCD裝置屬於平臺裝置,其初始化是在平臺裝置驅動的probe介面完成。而LCD裝置所涉及的硬體初始化則在平臺裝置初始化中完成。
2、fb_fix_screeninfo結構體主要記錄使用者不可以修改的控制器的引數,該結構體的定義如下:
1 struct fb_fix_screeninfo { 2 char id[16]; //字串形式的識別符號 3 unsigned long smem_start; /fb 快取的開始位置 4 /* (physical address) */ 5 __u32 smem_len; /* Length of frame buffer mem *///fb 快取的長度 6 __u32 type; /* see FB_TYPE_* *////看FB_TYPE_* --> 7 __u32 type_aux; /* Interleave for interleaved Planes *///分界 8 __u32 visual; ///看FB_VISUAL_* --> 9 __u16 xpanstep; //如果沒有硬體panning就賦值為0 10 __u16 ypanstep; //如果沒有硬體panning就賦值為0 11 __u16 ywrapstep; //如果沒有硬體ywrap就賦值為0 12 __u32 line_length; //一行的位元組數 13 unsigned long mmio_start; //記憶體對映 IO的開始位置 14 /* (physical address) */ 15 __u32 mmio_len; //記憶體對映 IO的長度 16 __u32 accel; /* Indicate to driver which */ 17 /* specific chip/card we have */ 18 __u16 capabilities; /* see FB_CAP_* *///功能 ---FB_CAP_FOURCC--- Device supports FOURCC-based formats 19 __u16 reserved[2]; //為以後的相容性保留 20 };
3、fb_var_screeninfo結構體主要記錄使用者可以修改的控制器的引數,比如螢幕的解析度和每個畫素的位元數等,該結構體定義如下:
1 struct fb_var_screeninfo { ///顯示屏資訊 2 __u32 xres; /* visible resolution*//可視區域,一行有多少個畫素點 3 __u32 yres; ///可視區域,一列有多少個畫素點 4 __u32 xres_virtual; /* virtual resolution*//虛擬區域,一行有多少個畫素點,簡單的意思就是記憶體中定義的區間是比較大的 5 __u32 yres_virtual;////虛擬區域,一列有多少個畫素點 6 __u32 xoffset; //虛擬到可見螢幕之間的行偏移 7 __u32 yoffset; /* resolution *//虛擬到可見螢幕之間的列偏移 8 9 __u32 bits_per_pixel; /* guess what*/ 每個畫素的 bit 數,這個引數不需要自己配置,而是通過上層在呼叫 checkvar 函式傳遞 bpp 的時候賦值的 10 __u32 grayscale; /* 0 = color, 1 = grayscale,*////等於零就成黑白 (灰度) 11 /* >1 = FOURCC */ 12 // 通過 pixel per bpp 來設定 red green 和 blue 的位置; pixel per bpp 可以通過 ioctl 設定 13 struct fb_bitfield red; //fb快取的R位域 14 struct fb_bitfield green; /* else only length is significant *//fb快取的G位域 15 struct fb_bitfield blue; //fb快取的B位域 16 struct fb_bitfield transp; /* transparency *//透明度 17 18 __u32 nonstd; /* != 0 Non standard pixel format *///如果nonstd 不等於0,非標準的畫素格式 19 20 __u32 activate; /* see FB_ACTIVATE_* */ 21 22 __u32 height; //記憶體中的影象高度 23 __u32 width; //記憶體中的影象寬度 24 25 __u32 accel_flags; /* (OBSOLETE) see fb_info.flags *////加速標誌 26 27 /* Timing: All values in pixclocks, except pixclock (of course) */ 28 ///時序,這些部分就是顯示器的顯示方法了,和具體的液晶顯示屏有關,在驅動中一般放在 具體液晶屏的配置檔案 29 __u32 pixclock; /* pixel clock in ps (pico seconds) *///畫素時鐘 30 __u32 left_margin; /* time from sync to picture *////行切換,從同步到繪圖之間的延遲 31 __u32 right_margin; /* time from picture to sync *///行切換,從繪圖到同步之間的延遲 32 __u32 upper_margin; /* time from sync to picture *///幀切換,從同步到繪圖之間的延遲 33 __u32 lower_margin; ////幀切換,從繪圖到同步之間的延遲 34 __u32 hsync_len; /* length of horizontal sync */ //水平同步的長度 35 __u32 vsync_len; /* length of vertical sync */ //垂直同步的長度 36 __u32 sync; /* see FB_SYNC_* *////---->看 FB_SYNC_* 37 __u32 vmode; /* see FB_VMODE_* *////---->看 FB_VMODE_* 38 __u32 rotate; /* angle we rotate counter clockwise */ 39 __u32 colorspace; /* colorspace for FOURCC-based modes */ 40 __u32 reserved[4]; /* Reserved for future compatibility */ 41 };
通過下圖可以對fb_var_screeninfo中涉及的時序理解更清楚一些:
4、fb_ops結構體是對底層硬體操作的函式指標,該結構體中定義了對硬體的操作有:
注: fb_ops結構與file_operations 結構不同,fb_ops是底層操作的抽象,而file_operations是提供給上層系統呼叫的介面,可以直接呼叫.
1 struct fb_ops { 2 /* open/release and usage marking */ 3 struct module *owner; 4 int (*fb_open)(struct fb_info *info, int user); 5 int (*fb_release)(struct fb_info *info, int user); /*對於非線性佈局的/常規記憶體對映無法工作的幀緩衝裝置需要*/ 10 ssize_t (*fb_read)(struct fb_info *info, char __user *buf, 11 size_t count, loff_t *ppos); 12 ssize_t (*fb_write)(struct fb_info *info, const char __user *buf, 13 size_t count, loff_t *ppos); 15 /* checks var and eventually tweaks it to something supported, 16 * DO NOT MODIFY PAR */ 17 int (*fb_check_var)(struct fb_var_screeninfo *var, struct fb_info *info);///檢查可變引數並進行設定 19 /* set the video mode according to info->var */ 20 int (*fb_set_par)(struct fb_info *info);///根據設定的值進行更新,使之有效 22 /* set color register */ 23 int (*fb_setcolreg)(unsigned regno, unsigned red, unsigned green, ////設定顏色暫存器 24 unsigned blue, unsigned transp, struct fb_info *info); 26 /* set color registers in batch */ 27 int (*fb_setcmap)(struct fb_cmap *cmap, struct fb_info *info); 29 30 int (*fb_blank)(int blank, struct fb_info *info);///顯示空白 32 /*pan顯示*/ 33 int (*fb_pan_display)(struct fb_var_screeninfo *var, struct fb_info *info); 36 void (*fb_fillrect) (struct fb_info *info, const struct fb_fillrect *rect);///矩形填充 38 void (*fb_copyarea) (struct fb_info *info, const struct fb_copyarea *region);///複製資料 40 void (*fb_imageblit) (struct fb_info *info, const struct fb_image *image);///圖形填充 42 /* 繪製游標 */ 43 int (*fb_cursor) (struct fb_info *info, struct fb_cursor *cursor); 45 /* 旋轉顯示 */ 46 void (*fb_rotate)(struct fb_info *info, int angle); 48 /* 等待blit空閒 */ 49 int (*fb_sync)(struct fb_info *info); 51 /* fb 特定的 ioctl */ 52 int (*fb_ioctl)(struct fb_info *info, unsigned int cmd, 53 unsigned long arg); 55 /* 處理32bit compat ioctl (optional) */ 56 int (*fb_compat_ioctl)(struct fb_info *info, unsigned cmd, 57 unsigned long arg); 59 /* fb 特定的 mmap */ 60 int (*fb_mmap)(struct fb_info *info, struct vm_area_struct *vma); 62 /* get capability given var */ 63 void (*fb_get_caps)(struct fb_info *info, struct fb_blit_caps *caps, 64 struct fb_var_screeninfo *var); 66 /* teardown any resources to do with this framebuffer */ 67 void (*fb_destroy)(struct fb_info *info); 69 /* called at KDB enter and leave time to prepare the console */ 70 int (*fb_debug_enter)(struct fb_info *info); 71 int (*fb_debug_leave)(struct fb_info *info); 72 };
5、fb_cmap:裝置獨立的 colormap 資訊,可以通過 ioctl 的 FBIOGETCMAP 和 FBIOPUTCMAP 命令設定 colormap;
struct fb_cmap { //顏色對映表 __u32 start; /* First entry *////第一個入口 __u32 len; /* Number of entries *///入口的數字 __u16 *red; /* Red values *///紅色 __u16 *green; ///綠色 __u16 *blue; ///藍色 __u16 *transp; //透明度,允許為空 };
這些結構相互之間的關係如下所示:
標籤:
一、Framebuffer 裝置驅動總體架構
幀緩衝裝置為標準的字元型裝置,在Linux中主裝置號29,定義在/include/ attr 總結 技術分享 dir target get gre round 管理 用了很久的MEF框架來做依賴註入,最近想把它的原理和機構總結一下,主要包括如下幾個方面:
1. 總體架構
2. .Net Composition Primitive
3. Attribu tor lint 沒有 script app 對數 數據交換格式 object 什麽 七月第一周,從學校畢業回來上班的第一周。離開一段時候後,再次回來重新工作,有了很多新的認識,不再是實習時那麽混混沌沌了。每天我自己該做什麽,怎麽做,做到什麽程度更清晰了。除了要去完成我負責 encode 什麽 code 解決 new span att 面向對象 反斜杠 》PHP 面向對象
使用parent訪問父類的構造方法(__construct)時一定要為當前類繼承要訪問的構造方法
類的構造方法(__construct)在實例化時直接被加載,靜態方法 file flush writer directory 創建 str java 資源 tab 一、File 類
Java中不管文件還是目錄都可以使用File類操作,File能新建、刪除、重命名文件和目錄,但是不能訪問文件內容本身,訪問文件內容需要使用輸入輸出流。
Fi 展示 cat 一起 time server 資源 type div simple 一、JSP的介紹與項目部署
JSP,全稱 Java server page是由Sun公司開發的一種動態生成網頁資源的技術。JSP技術使用java語言作為腳本語言,可以將html元素和java代 產生 java虛擬機 右鍵 分布式系 jdk 問題 功能 地址 輸出 一、Java是什麽?
Java 是由 Sun Microsystems 在 1995 年首先發布的編程語言和計算平臺。Java 是一項用於開發應用程序的技術,可以讓 Web 變得更有意思和更實用。有許多應 color 學習總結 oot 遠程訪問服務 分享圖片 watermark 需要 mage 磁盤大小 1.在這裏我先簡單介紹下虛擬化技術,就是我們通過軟件虛擬化出來一個硬件環境,然後就可以在系統裏面安裝子系統,以來我們避免了裝linux,windos雙系統的麻煩,二來我們可以 IT strong 資源 fire 求和 log AC service服務 為什麽 一、WebService是什麽?
基於Web的服務:服務器端整出一些資源讓客戶端應用訪問(獲取數據)
一個跨語言、跨平臺的規範(抽象)
多個跨平臺、跨語言的應用間通信整合的方案(實際)
1.0 其中 表示 只需要 第一篇 否則 info fin pojo Spring 是一個開源的設計層面的輕量級框架,Spring 的好處網上有太多,這裏就不在贅述。
IoC 控制反轉和 AOP 面向切面編程是 Spring 的兩個重要特性。
IoC(Inver 程序代碼 spa 編碼 結構 編輯 下載地址 utf 修改編碼 general 1. python是一種解釋性,編譯型,互動型的語言,面向對象,動態數據類型的高級程序設計語言。
1.1 交互式:意味著可以在一個提示符直接交互執行你寫的程序。
1.2 解釋型:意味著開發過程中 管理 stat prim aot 驅動 單元測試 build sta 環境
目錄
一、ORM
1.1、ORM簡介
1.2、ORM的概念
1.3、ORM的優缺點
二、MyBatis
2.1、MyBatis的特點
2.2、MyBatis工作流程 用py也很久了,很多東西只知道拿來用,並沒有深究,感覺這樣是不夠的。
我決定寫這麼一篇總結,把很多遺忘的東西拾起來,把很多沒搞懂的東西搞清楚。
1.eval函式
用法:eval(expression, globals=None, locals=None)
解釋:將字串str當成有效的表
在學習用dubbo進行分散式遠端呼叫之前,先來看一個簡單的有關訪問網路上的天氣預報介面的遠端呼叫例項。
1.先建立一個java專案,建立過程這裡不詳細講述,只附上一張截圖供入門級選手參考:
2.建立好一個java專案後,接下來就是建立一個Weather實體類(這裡可以使用lombok的@Da
http使用面向連線的TCP作為傳輸層協議。http本身無連線。
請求報文
CRLF是回車換行
方法為GET的請求報文
方法為POST的請求報文
&n
一、程序和執行緒的定義
程序:程序是資源(CPU、記憶體等)分配的基本單位,它是程式執行時的一個例項。程式執行時系統就會建立一個程序,併為它分配資源,然後把該程序放入程序就緒佇列,程序排程器選中它的時候就會為它分配CPU時間,程式開始真正執行。
執行緒:執行緒是程式執行時的最小單位,它是程序
javaweb學習總結(十)——HttpServletRequest物件(一)
一、HttpServletRequest介紹
HttpServletRequest物件代表客戶端的請求,當客戶端通過HTTP協議訪問伺服器時,HTTP請求頭中的所有資訊都封裝在這個物件中,通過這個物件提供的方
(宣告:並非原創,只是一個簡單總結)
一、執行緒和程序的概念:
程序:程序是處於執行過程中的程式,並且具有一定的對功能,是系統進行資源分配和排程的一個獨立單位。
git的安裝:
在這裡,因為網上有了很多詳盡的教程,我就不贅述了。git安裝教程
然後你需要申請一個GitHub賬號:點選申請GitHub賬號
申請GitHub賬號的時候要繫結一個郵箱,繫結QQ郵箱即可。
下面將你電腦上的git繫結GitHub賬號:
開啟Git
入口類和@SpringBootApplication
SpringBoot通常有一個名為*Application的入口類,入口類裡有一個main方法,這個main方法是一個標準的java應用的入口方法。在main方法中使用SpringApplication.run(*App 相關推薦
Framebuffer 驅動學習總結(一) ---- 總體架構及關鍵結構體
MEF學習總結(1)---總體架構
JSON必知必會學習總結(一)
PHP學習總結(一)
Java IO學習總結(一)
JSP學習總結(一)
JAVA學習總結(一)
Linux學習總結(一) windos環境vmware安裝centos7
webservice學習總結(一)-- WebService相關概念介紹
【Java】 Spring 框架初步學習總結(一)簡單實現 IoC 和 AOP
python學習總結(一),第一個python程序的編寫
MyBatis學習總結(一)——ORM概要與MyBatis快速起步
[學習總結] python語言學習總結 (一)
Dubbo的學習總結(一)——遠端呼叫
Http學習總結(一)
多執行緒學習總結(一)
JavaWeb學習總結(一)---httpservletrequest物件(一)
java執行緒學習總結(一)
Git學習總結(一)git的安裝和配置
Spring Boot 學習總結 (一)---入口類和@SpringBootApplication