キャラクタデバイスドライバの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)硬件相关的操作