Framebuffer 驱动程序框架

描述

1. 怎么编写字符设备驱动程序

驱动程序

主设备号

构造 file_operations 结构体,填充 open/read/write 等成员函数

注册驱动:register_chrdev(major, name, &fops)

入口函数

出口函数

2. Framebuffer 驱动程序框架

分为上下两层:

fbmem.c:承上启下

实现、注册 file_operations 结构体

把 APP 的调用向下转发到具体的硬件驱动程序

xxx_fb.c:硬件相关的驱动程序

实现、注册 fb_info 结构体

实现硬件操作

调用关系:

例子1:
app:  open("/dev/fb0", ...)   主设备号: 29, 次设备号: 0
--------------------------------------------------------------
kernel:
   fb_open
    int fbidx = iminor(inode);
    struct fb_info *info = = registered_fb[0];


例子2:
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);
   src = (u32 __iomem *) (info->screen_base + p);
   dst = buffer;
   *dst++ = fb_readl(src++);
   copy_to_user(buf, buffer, c)          
 

3. 怎么编写 Framebuffer 驱动程序

核心结构体:

驱动程序

分配 fb_info

framebuffer_alloc

设置 fb_info

var

fbops

硬件相关操作

注册 fb_info

register_framebuffer

4. 阅读源码

阅读 Android 和 Linux kernel 源码:

http://aospxref.com/

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分