第五章
flash硬件方案比較,nor,nand。基於flash的文件系統有jffs2(日誌文件系統,主要用於nor,基於mtd驅動層),yaffs(主要用於nand),cramfs(使用時解壓縮到ram,因此寫操作困難,它是隻讀的),romfs(只讀,順序)。
ramdisk是劃分一塊內存作分區使用,不是一個實際的FS,而是將實際FS裝入內存的一種策略。
第六章 LCD驅動程序移植
struct fb_info 記錄幀緩衝的全部信息,參數,狀態,操作函數指針等。唯一內核可見。
struct fb_info{
struct fb_var_screeninfo var;//當前可變參數
struct fb_fix_screeninfo fix;//當前固定參數
struct fb_monspecs monspecs;//當前的顯示器模式
struct work_struct queue;//事件隊列
...
struct fb_ops *fbops;//一些操作集指針
struct device *device;//指向 struct platform_device 中的dev成員
...
struct __iomem *screen_base;
...
};
fb_var_screeninfo 屏幕的分辨率,每像素比特數,時序變量等。
strcut fb_var_screeninfo{
__u32 xres;//實際分辨率
__u32 xres_virtual;//虛擬分辨率
__u32 xoffset;//虛擬分辨率到實際分辨率的偏移
__u32 bits_per_pixel;//BPP
__u32 height;//圖像高度
//一些時序
__u32 pixclock;//像素時鐘
__u32 left_margin;//幀同步時鐘
__u32 hsync_len;//一行的像素數
__u32 vsync_len;//一幀的行數
...
};
fb_fix_screeninfo {
char id[16];//驅動中定義的設備名字
unsigned long smem_start;//frame buffer 的開始地址,這是物理地址
...
};
fbmem.c爲上層提供調用,爲下層提供接口。
struct fb_ops{
struct module *owner;
int (*fb_open)(struct fb_info *info, int user);
//設備屬性的設置和獲取
...};
註冊註銷:register_framebuffer(struct fb_info *fb_info);
瞭解LCD驅動結構,參考已有代碼,修改。
初始化函數(初始化寄存器,分配顯示緩衝)和fb_info的填充。
編寫成員函數:讀寫,映射,IO控制。