UISRC工程师学习站

标题: LCD液晶显示之fbmem.c(二) [打印本页]

作者: ぉ沙皮狗的忧伤    时间: 2020-9-11 16:44
标题: LCD液晶显示之fbmem.c(二)
本帖最后由 ぉ沙皮狗的忧伤 于 2020-9-14 15:33 编辑

(, 下载次数: 257)



1、先分析init函数
(, 下载次数: 244)

proc_create创建一个proc虚拟文件系统,应用层通过读写该文件,即可实现与内核的交互

register_chrdev申请设备号,实现fb_fops
   主设备号FB_MAJOR = 29

class_create创建类


2、分析fb_fops
(, 下载次数: 252)
**********************************************************************************
(1)open函数分析
(, 下载次数: 240)
①、从inode节点中获取次设备号
(, 下载次数: 246)
②、根据得到的次设备号获取info结构体
    (, 下载次数: 243) ③、看看这个fb设备是否被调用
   (, 下载次数: 250)

④、将获取到的info信息传入到file里面
   (, 下载次数: 243)

**********************************************************************************


**********************************************************************************
(2)read函数分析
(, 下载次数: 250)
read函数参数
参数1--------flie要读取的文件
参数2--------buf读取数据的存储位置
参数3--------count读取的大小
参数4--------ppos文件描述符

判断底层传上来的info信息是否被修改,若被修改则无法读取
struct fb_info *info = file_fb_info(file);
(, 下载次数: 244)

根据不同的次设备号从结构数组中获取对应的info信息
(, 下载次数: 253)

与file->private_data比较,判断是否被修好,若显示屏的参数被修改,则不允许读写操作
(, 下载次数: 243) 判断是否存获取到info结构体和内存映射是否成功
(, 下载次数: 243)
查询info状态
(, 下载次数: 241)
判断底层有没有实现自己的读函数,没有就运行系统的
(, 下载次数: 242)

先从info结构体中获取内存大小
(, 下载次数: 244)
如果获取不到则从fix结构体中去寻找
(, 下载次数: 237)

(, 下载次数: 249)
(, 下载次数: 247)
**********************************************************************************
**********************************************************************************
(3)、ioctl
(, 下载次数: 242)


FBIOGET_VSCREENINFO      从底层获取var结构体信息
FBIOPUT_VSCREENINFO
FBIOGET_FSCREENINFO       从底层获取info结构体
FBIOPUTCMAP
FBIOGETCMAP            从底层获取cmap
FBIOPAN_DISPLAY
**********************************************************************************

**********************************************************************************(4)、fb_mmap

(, 下载次数: 243)

(, 下载次数: 238)

(, 下载次数: 249)

(, 下载次数: 251)
**********************************************************************************

(, 下载次数: 246)

(, 下载次数: 240)

(, 下载次数: 244)

(, 下载次数: 247)

(, 下载次数: 248)
更新中















欢迎光临 UISRC工程师学习站 (https://www.uisrc.com/) Powered by Discuz! X3.5