内核升级后CONFIG_DRM_GEM_CMA_HELPER缺失及drm_ioctl问题咨询
关于内核升级到6.1.55后DRM驱动适配的两个问题解答
问题1:CONFIG_DRM_GEM_CMA_HELPER配置项及头文件消失
内核5.19版本开始,CONFIG_DRM_GEM_CMA_HELPER配置项被正式移除,对应的CMA GEM helper功能整合到CONFIG_DRM_GEM_DMA_HELPER中,原drm_gem_cma_helper.h头文件也合并进drm_gem_dma_helper.h。适配步骤如下:
- 内核配置替换:将原启用的
CONFIG_DRM_GEM_CMA_HELPER=y改为启用CONFIG_DRM_GEM_DMA_HELPER=y。 - 代码头文件替换:把驱动中
#include <drm/drm_gem_cma_helper.h>替换为#include <drm/drm_gem_dma_helper.h>。 - API名称适配:原CMA相关API(如
drm_gem_cma_create、drm_gem_cma_free等)已统一重命名为DMA前缀的版本(如drm_gem_dma_create、drm_gem_dma_free),需同步修改驱动中的调用代码。
问题2:drm_ioctl未声明的错误
内核6.1版本中,drm_ioctl已从对外导出的公共接口改为DRM Core内部私有函数,不再允许外部驱动直接调用,因此编译会报未声明错误。适配方案:
- 若驱动需要实现自定义ioctl逻辑,应使用
drm_ioctl_add()接口注册ioctl处理函数,替代原直接调用drm_ioctl的写法。 - 确保内核配置中已启用
CONFIG_DRM=y(基础DRM框架支持是所有DRM相关功能的前提)。 - 参考内核源码中其他现代DRM驱动的实现,适配新的ioctl注册与处理流程。
内容的提问来源于stack exchange,提问作者dxyzhou-tiger
相关产品推荐
相关产品推荐

