參考資訊:
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/flip/bin/aarch64-linux-gcc main.c -o main -I/opt/flip/aarch64-flip-linux-gnu/sysroot/usr/include/libdrm -ldrm root@rk3566-buildroot:/mnt/SDCARD# ./main conn[1]=179 conn[1].mode[0]=640x480 (640x480x60)