5、linux下LCD驱动

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值