第五章
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控制。