zoukankan      html  css  js  c++  java
  • LCD驱动程序之层次分析

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

  • 相关阅读:
    WinForm容器内控件批量效验是否同意为空?设置是否仅仅读?设置是否可用等方法分享
    EF的CRUD
    SICP 习题 (1.41)解题总结
    陈光标挽救纽约穷人背后有何玄机?
    poj 1276 Cash Machine(多重背包)
    vue的生命周期
    vue mounted组件的使用
    babel-polyfill的几种使用方式
    可拖拽排序的vue组件
    import、export 和 export default
  • 原文地址:https://www.cnblogs.com/-glb/p/11360399.html
Copyright © 2011-2022 走看看