【IMX6ULL驱动开发学习】24.关于mmap为什么能直接操作LCD显示

news/2024/11/19 19:39:34/

记录今天面试中遇到的一个提问,当时没有答上来
感谢面试官(弓总)的提问,让我认识到了目前的不足,下午又深入的学习了一下,在这里做一下补充

mmap为什么能直接操作LCD显示

  • 首先在内核空间申请一段或多段内存作为显存,即Framebuffer
  • 然后使用mmap把这段内存的物理地址映射到应用程序的地址空间
  • 相当于应用中也有一块内存,这两块内存的虚拟地址不一样(一个虚拟地址是内核空间的,一个是用户空间的),但是对应同一块物理地址(既真实的内存地址 – 例如DDR)
  • framebuffer帧缓冲(简称fb)是linux内核中虚拟出的一个设备(/dev/fbn — n=0,1,2…)

  • 另外有个叫 LCD控制器 的东西已经集成在了芯片内,我们需要告诉LCD控制器Framebuffer的地址、图像的尺寸信息、像素大小等等
  • LCD控制器就会自动将Framebuffer的数据搬到LCD上显示出来
  • 在用户空间对mmap返回的指针进行操作,实际上就直接操作到了内核中的Framebuffer
  • 但是Framebuffer只存在于内核的 虚拟地址 中,那又是如何将数据写到真实的显存物理地址上的呢?
  • 这就是 MMU(内存管理单元) 的干的事情了,MMU 负责将这些虚拟地址转换为物理地址,从而使得内核能够正确地访问到显存。
  • 然后再有 LCD控制器 的帮助,就可以直接在应用程序中操作指针,修改LCD的显示内容了
  • 优点: 减少了内核态与用户态的切换,加快了速度。

PS:以上是个人看了一些教程和博客后的理解,如有描述不当的地方,还请大佬们指出


http://www.ppmy.cn/news/1103701.html

相关文章

常见面试题记录

记录下java的常见面试题 文章目录 记录如下 记录如下 记录如下 hashmap原理lock原理synchronized锁优化过程线程状态以及创建方式线程池(执行过程,参数,淘汰策略)jvm(gc优化和OOM)volatile(可见…

无损压缩算法

无损压缩算法是一种压缩数据的方法,可以在不丢失任何信息的情况下减小文件的大小。这种算法通常通过消除冗余或者利用统计特性来实现压缩效果。 以下是几种常见的无损压缩算法: 哈夫曼编码:哈夫曼编码是一种基于字符出现频率的压缩算法。它通…

详细介绍mysql表格id清零的方法

文章目录 方法一:利用TRUNCATE TABLE语句清空表格并重置id方法二:利用ALTER TABLE语句修改自增长id的初始值方法三:利用DELETE语句删除表格中的数据并重置id总结 MySQL是一种关系型数据库管理系统,被广泛应用于各种应用程序中。在…

python强制停止线程学习

参考: Python进阶之路 - Timeout | 超时中断 - 知乎 (zhihu.com) 写的很棒。 这里只记录我摘取的封装的一个class: #!/usr/bin/env python # -*- coding: utf-8 -*-import ctypes import threadingclass ThreadKillOver(RuntimeError):"""线程杀…

IllegalArgumentException

Caused by: java.lang.IllegalArgumentException:Invalid pulsar service : persistent 参数非法异常 这个异常是由于使用了无效的 Pulsar 服务类型导致的。Pulsar 支持不同的服务类型,例如 persistent、non-persistent 等。 当你在配置 Pulsar 相关的参数时&…

C++之生成key-value键值三种方式(一百九十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

FreeSWITCH recod_session跟静音处理有关的设置

<action application"set" data"record_waste_resourcestrue"/> <action application"set" data"record_fill_cngtrue"/>

C#__线程的优先级和状态控制

线程的优先级&#xff1a; 一个CPU同一时刻只能做一件事情&#xff0c;哪个线程优先级高哪个先运行&#xff0c;优先级相同看调度算法。 在Thread类中的Priority属性&#xff08;Highest,Above,Normal,BelowNormal,Lowest&#xff09;可以影响线程的优先级 关于…