LCD液晶显示之fbmem.c(二)
本帖最后由 ぉ沙皮狗的忧伤 于 2020-9-14 15:33 编辑1、先分析init函数
proc_create创建一个proc虚拟文件系统,应用层通过读写该文件,即可实现与内核的交互
register_chrdev申请设备号,实现fb_fops
主设备号FB_MAJOR = 29
class_create创建类
2、分析fb_fops
**********************************************************************************
(1)open函数分析
①、从inode节点中获取次设备号
②、根据得到的次设备号获取info结构体
③、看看这个fb设备是否被调用
④、将获取到的info信息传入到file里面
**********************************************************************************
**********************************************************************************
(2)read函数分析
read函数参数
参数1--------flie要读取的文件
参数2--------buf读取数据的存储位置
参数3--------count读取的大小
参数4--------ppos文件描述符
判断底层传上来的info信息是否被修改,若被修改则无法读取
struct fb_info *info = file_fb_info(file);
根据不同的次设备号从结构数组中获取对应的info信息
与file->private_data比较,判断是否被修好,若显示屏的参数被修改,则不允许读写操作
判断是否存获取到info结构体和内存映射是否成功
查询info状态
判断底层有没有实现自己的读函数,没有就运行系统的
先从info结构体中获取内存大小
如果获取不到则从fix结构体中去寻找
**********************************************************************************
**********************************************************************************
(3)、ioctl
FBIOGET_VSCREENINFO 从底层获取var结构体信息
FBIOPUT_VSCREENINFO
FBIOGET_FSCREENINFO 从底层获取info结构体
FBIOPUTCMAP
FBIOGETCMAP 从底层获取cmap
FBIOPAN_DISPLAY
**********************************************************************************
**********************************************************************************(4)、fb_mmap
**********************************************************************************
更新中
页:
[1]