ぉ沙皮狗的忧伤 发表于 2020-9-11 16:44:22

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]
查看完整版本: LCD液晶显示之fbmem.c(二)