之前看過很多書籍和網上資料,了解了linux中framebuffer的框架和一些結構體以及必備的硬體知識。但令本人深感"痛恨"的是,這些資料無不是點到為止(有些深入一些有些只介紹大概),貼**的時候總是省略了很多內容,難道就不能有一本書或一篇文章將整個framebuffer**全部講完嗎?在這裡我想"挑戰"一下。
本篇文章基於核心版本linux3.0.x,雖然已經不是很新,但驅動中的機制是萬變不離其宗的,因此版本顯得不是那麼重要了。
linux中framebuffer驅動動能主要涉及以下兩個檔案:
1.kernel源**/include/linux/fb.h: framebuffer驅動的標頭檔案;
2.kernel源**/drivers/video/fbmem.c: framebuffer驅動的核心實現檔案。
剛上手的人都迫不及待地想直接看源**,我當初上手時這種願望尤其強烈,因此在這裡先跳過頭檔案,直接看原始檔中的**。
先看入口函式,在fbmem.c中:
/**
* fbmem_init - init frame buffer subsystem
** initialize the frame buffer subsystem.
** note: this function is _only_ to be called by drivers/char/mem.c.
**/
static int __init
fbmem_init(void)
return 0;
}
#ifdef module
module_init(fbmem_init);
static void __exit
fbmem_exit(void)
module_exit(fbmem_exit);
module_license("gpl");
module_description("framebuffer base");
#else
subsys_initcall(fbmem_init);
#endif
這段**即是framebuffer的入口點,一切從這裡開始.
#ifdef自不必多說,學過c語言的都知道這是預編譯指令,這裡不想多說,看到核心驅動級**的人不會連這個都不知道.這段**的意思是如果framebuffer驅動作為模組載入,則執行以下這段:
static int __init
fbmem_init(void)
return 0;
}
module_init(fbmem_init);
static void __exit
fbmem_exit(void)
module_exit(fbmem_exit);
module_license("gpl");
module_description("framebuffer base");
如果不是作為模組載入,而是直接編譯進核心,則執行以下這句:
subsys_initcall(fbmem_init);
其中:kernel源**/include/linux/init.h中:
#define module_init(x)__initcall(x);
#define __initcall(fn) device_initcall(fn)
#define device_initcall(fn) __define_initcall("6",fn,6)
#define subsys_initcall(fn)__define_initcall("4",fn,4)
具體意義這裡不作過多解釋,後續我會專門發文章介紹。只要記住乙個是模組初始化,乙個是子系統初始化。
module_init()或subsys_initcall()中呼叫了fbmem_init(),module_exit()中呼叫了fbmem_exit(),此外還有一些結構體和一些呼叫函式。這些都是什麼意思?
要弄清楚這些內容,且聽下回分解。
Linux中許可權
當你在linux下用命令ll 或者ls la的時候會看到這些字眼,這些字眼表示為不同使用者組的許可權 r read就是讀許可權 數字4表示 w write就是寫許可權 數字2表示 x excute就是執行許可權 數字1表示 讀 寫 執行三項許可權可以用數字表示,就是r 4,w 2,x 1。所以,rw...
Linux中控制代碼
1.控制代碼就是乙個識別符號,只要獲得物件的控制代碼,我們就可以對物件進行任意的操作。2.控制代碼不一定是指標。作業系統用控制代碼可以找到一塊記憶體,這個控制代碼可能是識別符號,例如map的key,也可能是指標,看作業系統怎麼處理的了。fd算是在某種程度上替代控制代碼吧 linux 有相應機制,但沒...
Linux中的時鐘概念Linux中的時鐘概念
linux的時鐘中斷中涉及至二個全域性變數乙個是xtime,另乙個則是jiffies。有乙個與時間有關的時鐘 實時時鐘 rtc 這是乙個硬體時鐘,用來持久存放系統時間,系統關閉後靠主機板上的微型電池保持計時。系統啟動時,核心 通過讀取rtc來初始化wall time,並存放在xtime變數中,即xt...