«DRM_IOCTL_MODE_GETRESOURCES» не равно «0xA0», как определено в drm.h - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь использовать ioctl () в C ++ под Linux для инициализации KMS / DRM, но я сталкиваюсь с некоторыми проблемами с DRM_IOCTL_MODE_GETRESOURCES. Этот макрос определяется следующим образом в /usr/include/libdrm/drm.h:

#define DRM_IOCTL_MODE_GETRESOURCES DRM_IOWR(0xA0, struct drm_mode_card_res)

Однако, когда я пытаюсь заменить DRM_IOCTL_MODE_GETRESOURCES на «0xa0» или «0xA0», я не получаютот же вывод!

Это мой код:

#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, поэтому мне нужноАргументы для системного вызова! :()

Я использую g ++, но я попробовал тот же системный вызов со сборкой (nasm), и я получил тот же результат (значение = 0)

Спасибомного за вашу помощь!

...