当前位置: 首页 > news >正文

libdrm全解析三十八 —— 源码全解析(35)

接前一篇文章:libdrm全解析三十七 —— 源码全解析(34)

本文参考以下博文:

DRM 驱动程序开发(VKMS)

特此致谢!

前一篇文章讲解完了drmModeSetCrtc(crtc_id, fb_id, connector_id, mode),DRM一般流程的也就讲完了。但是实际上还有一部分没有在一般流程中,但其也是很重要且必不可少的,这就是资源的释放。这其中包括了很多函数:drmModeRmFB()、munmap()、drmIoctl(DRM_IOCTL_MODE_DESTROY_DUMB)、drmModeFreeConnector()、drmModeFreeResources()。这些函数都是一般流程各步骤所调用函数的反函数。下边对于这些函数逐个来进行分析。

先来看drmModeRmFB函数。它与drmModeAddFB()是一对。

75. DRM_IOCTL_MODE_RMFB

第75个宏是DRM_IOCTL_MODE_RMFB,相应代码如下:

#define DRM_IOCTL_MODE_RMFB		DRM_IOWR(0xAF, unsigned int)

结合之前文章中的_IOWR(type,nr,size)的最终定义,得到如下代码:

#define DRM_IOCTL_MODE_RMFB        ( ((3)  << 30) | (('d') << 8) | ((0xAF)   << 0) | ((sizeof(unsigned int)) << 16) )

DRM_IOCTL_MODE_RMFB对应的Userspace API为:drmModeRMFB()。该函数在xf86drmMode.c中,代码如下:

drm_public int drmModeRmFB(int fd, uint32_t bufferId)
{return DRM_IOCTL(fd, DRM_IOCTL_MODE_RMFB, &bufferId);
}

函数的作用是销毁指定的framebuffer object(之前通过drmModeAddFB函数向DRM驱动注册的framebuffer object)。

实例代码片段如下:

uint32_t fb_id;
……
drmModeAddFB(fd, create.width, create.height, 24, 32, create.pitch,create.handle, &fb_id); 
……
drmModeRmFB(fd, fb_id);

资源释放流程中的其余函数将在后续文章中进行解析。

http://www.lryc.cn/news/151414.html

相关文章:

  • jar包和war包的区别
  • CloudCompare 二次开发(10)——点云投影到平面
  • 如何制作并运行 jar 程序
  • Hadoop MapReduce 调优参数
  • springboot 与 Redis整合
  • 如何高效地设计测试用例并评审
  • 基于python+Django知识图谱的医疗问答系统设计与实现
  • cuda编程常见问题
  • QTday3
  • docker镜像是如何导入的?
  • 四川大学874考研真题00-23
  • openGauss学习笔记-58 openGauss 高级特性-资源池化
  • centos升级cmake之相关问题解决
  • vcs仿真教程(查看断言)
  • 2023开学礼新疆石河子大学图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》许少辉新财经理工
  • javaee spring aop 切入点表达式
  • js 获得元素的offsetLeft
  • 【Spring面试题】IOC控制反转和DI依赖注入(详解)
  • LeetCode 2511. 最多可以摧毁的敌人城堡数目
  • bazel远程缓存(Remote Cache)
  • 算法竞赛入门经典习题2-6 排列(permutation)
  • 队列的链表实现 题目(难度1/10)
  • SpringMVC常用的三种获取请求参数的方式
  • 2023开学礼新疆理工学院图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》许少辉新财经理工
  • 数据结构----结构--线性结构--字符串
  • 数据工厂-生成接口通用用例
  • N 字形变换
  • STM32+RTThread配置以太网无法ping通,无法获取动态ip的问题
  • python编写MQTT订阅程序
  • mysql 中 cast 函数用法