结合APP分析LCD驱动程序

Posted 韦东山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结合APP分析LCD驱动程序相关的知识,希望对你有一定的参考价值。

结合APP分析LCD驱动程序

本节视频对应源码在GIT仓库中,位置如下(这2个文件是完全一样的):

doc_and_source_for_drivers\\STM32MP157\\source\\A7\\03_LCD\\04_fb_test
或:
doc_and_source_for_drivers\\IMX6ULL\\source\\03_LCD\\04_fb_test

1. open

app:  open("/dev/fb0", ...)   主设备号: 29, 次设备号: 0
--------------------------------------------------------------
kernel:
         fb_open   // fbmem.c
         	struct fb_info *info;
         	info = get_fb_info(fbidx);
			
			if (info->fbops->fb_open) {
				res = info->fbops->fb_open(info,1);   // 硬件相关的驱动
				if (res)
					module_put(info->fbops->owner);
			}         	

2. 获得可变信息(含有分辨率等)

app:  	ioctl(fd, FBIOGET_VSCREENINFO, &fb_info->var);
-------------------------------------------------------------------------
kernel:
         fb_ioctl   // fbmem.c
         	struct fb_info *info = file_fb_info(file);

         	do_fb_ioctl(info, cmd, arg);
         		var = info->var;     // 硬件相关的驱动设置的
         		ret = copy_to_user(argp, &var, sizeof(var)) ? -EFAULT : 0;

3. 获得固定信息(含有显存信息)

app:  	ioctl(fd, FBIOGET_FSCREENINFO, &fb_info->fix);
-------------------------------------------------------------------------
kernel:
         fb_ioctl   // fbmem.c
         	struct fb_info *info = file_fb_info(file);

         	do_fb_ioctl(info, cmd, arg);
         		fix = info->fix;     // 硬件相关的驱动设置的
         		ret = copy_to_user(argp, &fix, sizeof(fix)) ? -EFAULT : 0;

4. mmap

app:void *ptr = mmap(0,
			fb_info->var.yres_virtual * fb_info->fix.line_length,
			PROT_WRITE | PROT_READ,
			MAP_SHARED, fd, 0);
-------------------------------------------------------------------------
kernel:
         fb_mmap   // fbmem.c
         	struct fb_info *info = file_fb_info(file);

         	start = info->fix.smem_start;
         	len = info->fix.smem_len;
         	return vm_iomap_memory(vma, start, len);

5. 绘制图片

以上是关于结合APP分析LCD驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

LCD驱动分析

LCD驱动端与设备端名称匹配过程分析(Tiny4412)

framebuffer的入门介绍-实现程序分析

LCD驱动分析时序分析

10. LCD驱动程序 ——框架分析

LCD驱动源码分析(s3cfb.c)