如上图所示,除了上层的图形应用程序外,和Kernel空间有关的包括Linux FB设备层以及和具体HW相关的驱动层,对应的源文件分别是fb_mem.c、msm_fb.c、mddi_toshiba.c。下面会一一介绍。

fb_mem.c 函数和数据结构介绍

这个文件包含了Linux Fb设备的所有接口,主要函数接口和数据结构如下:

A、Fb设备的文件操作接口

B、3个重要的数据结构

FrameBuffer中有3个重要的结构体,fb.h中定义,如下:

1) 、frame_var_screeninfo

该结构体定义了显卡的一些可变的特性,这些特性在程序运行期间可以由应用程序动态改变,比较典型的如xrex和yres表示在显示屏上显示的真实分辨率、显示的bit数等,该结构体user space可以访问。

2) 、frame_fix_screeninfo

该结构体定义了显卡的一些固定的特性,这些特性在硬件初始化时就被定义了以后不可以更改。其中最重要的成员就是smem_len和

smem_start,前者指示显存的大小(目前程序中定义的显存大小为整屏数据RGB565大小的2倍),后者给出了显存的物理地址。该结构体user

space可以访问。

Note:smem_start是显存的物理地址,应用程序是不可以直接访问的,必须通过fb_ops中的mmp函数映射成虚拟地址后,应用程序方可访问。

3) 、fb_info

FrameBuffer中最重要的结构体,它只能在内核空间内访问。内部定义了fb_ops结构体(包含一系列FrameBuffer的操作函数,Open/read/write、地址映射等).

C、其他

1)、一个重要的全局变量

struct fb_info *registered_fb[FB_MAX];

这变量记录了所有fb_info 结构的实例,fb_info 结构描述显卡的当前状态,所有设备对应的fb_info

结构都保存在这个数组中,当一个FrameBuffer设备驱动向系统注册自己时,其对应的fb_info

结构就会添加到这个结构中,同时num_registered_fb 为自动加1。

2)、注册framebuffer函数

register_framebuffer(struct fb_info *fb_info);

unregister_framebuffer(struct fb_info *fb_info);

这两个是提供给下层FrameBuffer设备驱动的接口,设备驱动通过这两函数向系统注册或注销自己。几乎底层设备驱动所要做的所有事情就是填充fb_info结构然后向系统注册或注销它

android内核函数,Android display架构分析三-Kernel Space Display架构介绍相关推荐

  1. android emulator虚拟设备之qemu pipe分析(三)

    一.概述 qemu pipe也是一个虚拟设备,是一个通用的虚拟设备,用于提供guest os和emulator通信的功能,类似于一个抽象的通信层,这样就不用写很多虚拟设备了. 之前在guest os中 ...

  2. dart string 转 bool_Dart语法篇之集合操作符函数与源码分析(三)

    简述: 在上一篇文章中,我们全面地分析了常用集合的使用以及集合部分源码的分析.那么这一节讲点更实用的内容,绝对可以提高你的Flutter开发效率的函数,那就是集合中常用的操作符函数.这次说的内容的比较 ...

  3. ion android 内核,关于Android中ION的libion

    在高通的OpenCL SDK中,其Android.mk文件中,有判断当前kernel的版本,如果大于4.12,那么就使用libion.so,否则则使用ion kernle uapi: # Tries ...

  4. android 退出函数,android – 关闭应用程序与退出按钮

    下面使用main.xml文件 android:orientation="vertical" android:layout_width="fill_parent" ...

  5. 企业架构(三)——联邦企业架构框架(FEAF)

    文章目录 一.FEAF 1.FEAF的出现 2.FEAF构成 (1)Level 1 (2)Level 2 (3)Level 3--架构模型细化 (4)Level 4--业务架构模型细化(EAP方法) ...

  6. Android系统10 RK3399 init进程启动(三十五) 属性文件介绍和生成过程

    配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask 说明 系统:Android10.0 设备: FireFly RK3399 (ROC-RK3399-PC-PLUS) 前言 ini ...

  7. android录音函数,Android - 实现录音变声播放

    变声功能大家都接触过,比如qq中发送一段变声消息,网络视频中演员经过处理的声音.其实这个功能实现起来并不复杂,因为声音处理的算法有大神已经帮我们写好,拿来用就行. 代码是用c写的,我们来稍微处理一下 ...

  8. android dbinfo函数,android SQLiteDatabase中的update函数用法?

    创建数据库 Android 不自动提供数据库.在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表.索引,填充数据.Android 提供了 SQLiteOpenHelper ...

  9. android 回退函数,android浏览器研究-回退和前进

    浏览器探究--回退和前进 前进: 在菜单中点击前进功能主线程会执行BrowserActivity.onOptionsItemSelected,它会调用Controller.onOptionsItemS ...

  10. android 响铃函数,android – 铃声一遍又一遍地播放(无限循环播放)

    我遇到了类似的问题.事实证明,当播放铃声时,它将无限重复直到停止,而当播放通知声音时,它将只播放一次.所以我的猜测是,你的情况的区别在于是否在someFunctionToLookupAValidNot ...

最新文章

  1. Python SimpleHTTPServer 简单开发
  2. lucene集成IK实现中文分词检索
  3. CDN监控系统(三 业务架构)
  4. 算法与数据结构(冒泡排序,选择排序和插入排序的总结)
  5. 【推荐系统】基于用户的协同过滤算法
  6. BZOJXXXX: [IOI2000]邮局——四边形不等式优化初探
  7. SAP Spartacus用户登录的实现
  8. 数字三角形——递归、递推、记忆化搜索
  9. 阿里巴巴宣布架构调整;英伟达放大招!重磅发布 ​TensorRT 7 ,支持超千种计算变换;苹果、谷歌和亚马逊罕见结盟……...
  10. Metaspace泄漏排查
  11. 手机发布日期为什么保密?罗永浩这么说...
  12. python实现excel的覆盖写入和追加
  13. Atitit 减少财政支出之减少通讯支出 解决方案attilax总结
  14. 国美易卡设置cookie域,国美易卡匹配domain
  15. 如何申请CSDN博客?
  16. 春节攻防战即将打响,想要弯道超车的商家们,准备好了吗?
  17. Python编程:从入门到实践+爬虫开发与项目实战+网络编程基础+项目开发实战
  18. 云媒易:做好小红书推广的6个关键点
  19. matlab中区分fplot和plot,以及作图时sin(1./x)需要点除而不是除
  20. STC12C5A60S2单片机-双串口通信

热门文章

  1. Android 9 低内存应用程序保活
  2. 365天口才训练计划
  3. 小闹乎谈新手必备的撸猫手册
  4. gitlab提交代码到develop分支
  5. DHTMLET-Cascading Style Sheet 2.0 中文手册
  6. dede标签云(TAG)随机颜色及大小的实现方法
  7. C++面向对象程序设计:银行储蓄管理系统
  8. 大学生程序设计邀请赛(华东师范大学)A
  9. 我从冯·诺依曼计算机体系,追溯到了JVM,原来一切如此
  10. 《预训练周刊》第52期:屏蔽视觉预训练、目标导向对话