分析のLCDドライバレベル

キャラクタデバイスドライバの1.レビュー:

:一般的な手順を書かれた文字デバイスドライバ

1)メジャー番号

2)構造体の構造file_operations

  .open = XXXX

  .read = XXXXX

3)register_chrdev()

4)入口

5)輸出

どのように2、カーネルは、そのためのキャラクタデバイスドライバを書かれていますか?

カーネルはLCD用コアファイルfbmem.cを提供し、このファイルには、最終的に我々はfb_infoに頼る必要が根底にある構造を提供し、いくつかの一般的なものから出てくるだろう。

ドライバーフレームワーク:

 

分析:

アプリ:オープン( "DEV / FB0 "、....) メジャー番号29、マイナー番号0
____________________________________________________
カーネル:FB_OPEN int型= fbidx iminor(iノード); 構造体fb_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)硬件相关的操作

 

おすすめ

転載: www.cnblogs.com/-glb/p/11360399.html