LCD driver level of analysis

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)硬件相关的操作

 

Guess you like

Origin www.cnblogs.com/-glb/p/11360399.html