码迷,mamicode.com
首页 > 其他好文 > 详细

LCD驱动程序之层次分析

时间:2019-08-18 15:56:31      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:open   http   编写   microsoft   gis   str   ros   else   node   

1、回顾字符设备驱动程序:

技术图片

字符设备驱动编写的一般步骤:

1)主设备号

2)构造file_operations结构体体

  .open = xxxx

  .read = xxxxx

3)register_chrdev()

4)入口

5)出口

2、内核中是如何写字符设备驱动程序的呢?

内核中为lcd提供了一个核心文件fbmem.c,这个文件将一些通用的东西抽出来,最终还需要依赖底层提供的一个fb_info结构体。

驱动框架:

技术图片

 

分析:

app: open("dev/fb0",....)主设备号29,次设备号0
____________________________________________________
kernel: fb_open
    int fbidx = iminor(inode);
    struct fb_info *info = registered_fb[idx];//以次设备号为下标从数组中取出一项

 

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

 

LCD驱动程序之层次分析

标签:open   http   编写   microsoft   gis   str   ros   else   node   

原文地址:https://www.cnblogs.com/-glb/p/11360399.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!