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

libdrm全解析三十九 —— 源码全解析(36)

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

本文参考以下博文:

DRM 驱动程序开发(VKMS)

特此致谢!

前一篇文章讲解完了资源的释放流程中的drmModeRmFB(),本回讲解munmap()和drmIoctl(DRM_IOCTL_MODE_DESTROY_DUMB)。

  • munmap()

先来看munmap()。它与mmap()是一对。

实例代码片段如下:

    ……//通过offset找到对应的显存(framebuffer)并映射到用户空间uint32_t *vaddr = mmap(0, create.size, PROT_READ | PROT_WRITE,MAP_SHARED, fd, map.offset);	……munmap(vaddr, create_size);……

munmap函数的作用一目了然,取消之前通过mmap()实现的显存和用户空间的映射。

  • drmIoctl(DRM_IOCTL_MODE_DESTROY_DUMB)

drmIoctl(DRM_IOCTL_MODE_DESTROY_DUMB)与

drmIoctl(DRM_IOCTL_MODE_CREATE_DUMB)是一对。

80. DRM_IOCTL_MODE_DESTROY_DUMB

第80个宏是DRM_IOCTL_MODE_DESTROY_DUMB,相应代码如下:

#define DRM_IOCTL_MODE_DESTROY_DUMB    DRM_IOWR(0xB4, struct drm_mode_destroy_dumb)

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

#define DRM_IOCTL_MODE_DESTROY_DUMB        ( ((3)  << 30) | (('d') << 8) | ((0xB4)   << 0) | ((sizeof(struct drm_mode_destroy_dumb)) << 16) )

struct drm_mode_destroy_dumb在同文件(include/drm/drm.h)中定义,代码如下:

struct drm_mode_destroy_dumb {__u32 handle;
};

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

drm_public int
drmModeDestroyDumbBuffer(int fd, uint32_t handle)
{struct drm_mode_destroy_dumb destroy = {.handle = handle,};return DRM_IOCTL(fd, DRM_IOCTL_MODE_DESTROY_DUMB, &destroy);
}

函数的作用是将销毁一个 dumb buffer 对象。

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

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

相关文章:

  • 【Interaction交互模块】AngularJointDrive角度关节驱动
  • 菜鸟教程《Python 3 教程》笔记 EX 01:命令行参数
  • NLP(六十六)使用HuggingFace中的Trainer进行BERT模型微调
  • Rabbitmq消息积压问题如何解决以及如何进行限流
  • Lambda方法引用
  • TCP协议报文
  • C# 如何将使用的Dll嵌入到.exe应用程序中?
  • 【LeetCode】剑指 Offer Ⅱ 第5章:哈希表(6道题) -- Java Version
  • x86 汇编手册快速入门
  • WPF C# Binding绑定不上的解决情况
  • 【UE 材质】实现方形渐变、中心渐变材质
  • PHP旅游管理系统Dreamweaver开发mysql数据库web结构php编程计算机网页
  • java内存模型讨论及案例分析
  • 对战ChatGPT,创邻科技的Graph+AI会更胜一筹吗?
  • 9月2日,每日信息差
  • uni-app之android项目云打包
  • C++的智能指针和可变参数模板详解
  • Docker及常用数据库安装
  • 前端使用 JavaScript 检测用户是否在线的6种方法
  • Windows下Redis的安装
  • SpringBoot第45讲:SpringBoot定时任务 - Timer实现方式
  • 01背包(换汤不换药)
  • c++ folly::baton
  • 05.sqlite3学习——DML(数据管理:插入、更新、删除)
  • Netty-ChannelPipeline
  • 从入门到精通,30天带你学会C++【第六天:与或非三兄弟和If判断语句(博主目前最长文章,2514字)】(学不会你找我)
  • 如何快速找出占用空间最大的文件?
  • 算法:分治思想处理归并递归问题
  • 小白学Go 基础02-了解Go语言的诞生与演进
  • python中如何将十进制转成二进制