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

文章详细解析了libdrm中的资源释放过程,重点介绍了drmModeRmFB函数,它是与drmModeAddFB相对应的,用于销毁之前注册的framebufferobject。后续文章将继续讨论其他资源释放函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接前一篇文章: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);

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝天居士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值