drm.h中定义的“ DRM_IOCTL_MODE_GETRESOURCES”不等于“ 0xA0”

时间:2019-10-25 23:05:10

标签: c++ linux g++ drm

我试图在Linux下的C ++中使用ioctl()初始化KMS / DRM,但是DRM_IOCTL_MODE_GETRESOURCES却遇到了一些问题。在/usr/include/libdrm/drm.h中,此宏的定义如下:

#define DRM_IOCTL_MODE_GETRESOURCES DRM_IOWR(0xA0, struct drm_mode_card_res)

但是,当我尝试用“ 0xa0”或“ 0xA0”替换DRM_IOCTL_MODE_GETRESOURCES时,却没有得到相同的输出!

这是我的代码:

#include <libdrm/drm_mode.h>
#include <libdrm/drm.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/ioctl.h>


int main()
{
  int dri_fd = open("/dev/dri/card0", O_RDWR);
  struct drm_mode_card_res res;
  ioctl(dri_fd, DRM_IOCTL_SET_MASTER, 0);

  // This is the problematic one:
  ioctl(dri_fd, DRM_IOCTL_MODE_GETRESOURCES, &res);

  printf("VALUE: %d", res.count_connectors);
  return(0);
}

这将输出:VALUE = 4

如果我将“ DRM_IOCTL_MODE_GETRESOURCES”更改为“ 0xa0”或“ 0xA0”,则会输出:VALUE = 0,这对我来说很奇怪。

(您可能会问为什么我不使用已定义的宏,问题是我试图在x86_64程序集中编写此代码,所以我需要syscall的参数!:()

我正在使用g ++,但是我已经尝试过使用汇编程序(nasm)进行相同的syscall,并且得到的结果相同(值= 0)

非常感谢您的帮助!

0 个答案:

没有答案