參考資訊:
https://www.kernel.org/doc/html/v4.15/gpu/drm-kms.html
https://github.com/grate-driver/libdrm/blob/master/xf86drmMode.h
main.c
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <xf86drm.h> #include <xf86drmMode.h> int main(int argc, char *argv[]) { int i = 0; int j = 0; int fd = -1; drmModeRes *res = NULL; fd = open("/dev/dri/card0", O_RDWR | O_CLOEXEC); res = drmModeGetResources(fd); for (i = 0; i < res->count_connectors; i++) { drmModeConnector *conn = drmModeGetConnector(fd, res->connectors[i]); if (conn) { if ((conn->connection == DRM_MODE_CONNECTED) && conn->count_modes) { printf("conn[%d]=%d\n", i, conn->connector_id); for (j = 0; j < conn->count_modes; j++) { drmModeModeInfo *mode = &conn->modes[j]; printf("conn[%d].mode[%d]=%s (%dx%dx%d)\n", i, j, mode->name, mode->hdisplay, mode->vdisplay, mode->vrefresh); } } drmModeFreeConnector(conn); } } drmModeFreeResources(res); close(fd); return 0; }
編譯、執行
$ /opt/mini/bin/arm-linux-gnueabihf-gcc main.c -o main -I/opt/mini/arm-buildroot-linux-gnueabihf/sysroot/usr/include/drm -ldrm -lEGL -lGLESv2 -lgbm root@rg351mp:/# kill -STOP `pidof emulationstation` root@rg351mp:/# ./main conn[0]=66 conn[0].mode[0]=640x480 (640x480x107)