5、linux下LCD驱动
2015-06-12 16:15
375 查看
1、 LCD驱动内核框架:
lcd驱动的核心层文件:/driver/vedio/fbmem.c, 提供了对LCD的所有抽象操作。
在这个文件的入口函数里面:register_chrdev(29,"fb",&fb_fops)。ls /dev/fb*时,可以知道主设备号就是29。因此,当我们调用open/read/write函数时,实际上会调用到这里的fb_fops里面的open/read/write。
2、app应用程序的访问lcd设备的流程:
app: open("/dev/fb0",...)
主设备号: 29, 次设备号: 0
--------------------------------------------------------------
kernel:
fb_open
int fbidx = iminor(inode);
struct fb_info *info = = registered_fb[0];
app: read()
---------------------------------------------------------------
kernel:
fb_read
intfbidx = iminor(inode);
struct fb_info *info = registered_fb[fbidx];
if(info->fbops->fb_read)
returninfo->fbops->fb_read(info, buf, count, ppos);
从上面的访问流程可以知道,当app访问一个lcd设备的时候,会根据次设备号,找到一个struct fb_info类型的变量,并调用该变量的成员。
3、lcd驱动程序的编写
(1)注册核心结构体fb_info static structfb_info *s3c_lcd = framebuffer_alloc(0,NULL);
(2)设置成员:设置固定参数(fb_fix_screeninfo)//参考内核源码
(3)设置成员:设置可变参数(fb_var_screeninfo)//参考内核源码
(4)硬件相关操作(主要是struct file_operations fb_fops) //参考内核源码
(5)注册 register_framebuffer(s3c_lcd):会把s3c_lcd放到registered_fb[minor],然后创建设备节点,次设备号为minor
lcd驱动的核心层文件:/driver/vedio/fbmem.c, 提供了对LCD的所有抽象操作。
在这个文件的入口函数里面:register_chrdev(29,"fb",&fb_fops)。ls /dev/fb*时,可以知道主设备号就是29。因此,当我们调用open/read/write函数时,实际上会调用到这里的fb_fops里面的open/read/write。
2、app应用程序的访问lcd设备的流程:
app: open("/dev/fb0",...)
主设备号: 29, 次设备号: 0
--------------------------------------------------------------
kernel:
fb_open
int fbidx = iminor(inode);
struct fb_info *info = = registered_fb[0];
app: read()
---------------------------------------------------------------
kernel:
fb_read
intfbidx = iminor(inode);
struct fb_info *info = registered_fb[fbidx];
if(info->fbops->fb_read)
returninfo->fbops->fb_read(info, buf, count, ppos);
从上面的访问流程可以知道,当app访问一个lcd设备的时候,会根据次设备号,找到一个struct fb_info类型的变量,并调用该变量的成员。
3、lcd驱动程序的编写
(1)注册核心结构体fb_info static structfb_info *s3c_lcd = framebuffer_alloc(0,NULL);
(2)设置成员:设置固定参数(fb_fix_screeninfo)//参考内核源码
(3)设置成员:设置可变参数(fb_var_screeninfo)//参考内核源码
(4)硬件相关操作(主要是struct file_operations fb_fops) //参考内核源码
(5)注册 register_framebuffer(s3c_lcd):会把s3c_lcd放到registered_fb[minor],然后创建设备节点,次设备号为minor
相关文章推荐
- CentOS 6.5添加/绑定IP
- linux svn环境搭建
- 我的Linux随笔目录
- Linux下查看和清空route cache
- linux命令6--cp命令
- linux黑屏报错,根目录属性只读问题处理
- 学习linux
- Linux开机启动
- linux 常用命令 ln/cat/echo/find/xargs/grep/ssh/scp
- linux下解决端口被占用问题
- Linux 下zip包的压缩与解压
- Linux多线程编程(一)
- mysql安装for linux(rpm包)
- linux php之脚本加速模块zend opcache
- mysql安装for linux(二进制)
- Linux 应用程序超过10秒未调度
- linux命令5--cmp命令
- Linux 3.14 待机流程分析
- linux 程序 打开 /dev/mem permission denied
- Linux-内核模块管理