1. Review of character device drivers:
Character device driver written general steps:
1) major number
2) structure body structure file_operations
.open = xxxx
.read = xxxxx
3)register_chrdev()
4) an inlet
5) export
How 2, the kernel is written character device driver for it?
The kernel provides a core file fbmem.c for the lcd, this file will come out of some general things, ultimately we need to rely on a fb_info provided the underlying structure.
Driver Framework:
analysis:
app: open ( "dev / fb0 ", ....) the major number 29, minor number 0
____________________________________________________
Kernel: FB_OPEN int = fbidx iminor (the inode); struct fb_info * info = registered_fb [IDX] ; // seq device number subscript removed from an array
app: read()
____________________________________________________
kernel: fb_read()
int fbidx = iminor(inode);
struct fb_info *info = registered_fb[fbidx];
if (info->fbops->fb_read)
return info->fbops->fb_read(info, buf, count, ppos);
else
src = (u8 __iomem *) (info->screen_base + p);
fb_memcpy_fromfb(dst, src, c);
dst = buffer;
dst += c;
src += c;
copy_to_user(buf, buffer, c)
问1、registered_fb[]在哪里被设置?
fbmem.c提供的是一些抽象出来的东西,它最终会依赖于registered_fb[]这个结构体。
register_framebuffer
问2、怎样写lcd的驱动程序?
1)分配一个fb_info结构体:framebuffer_alloc
2)设置
3)注册:register_framebuffer
4)硬件相关的操作