用户空间接收5.15.32版本内核drm示例代码
时间: 2023-09-04 17:08:55 浏览: 102
drm_info.rar_V2
以下是一个简单的用户空间程序,用于接收5.15.32版本内核上报的vblank事件。该程序使用DRM库中提供的函数来实现。
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <drm/drm.h>
#include <drm/drm_mode.h>
int main()
{
int fd;
struct drm_event_vblank event;
fd_set fds;
int ret;
fd = open("/dev/dri/card0", O_RDWR);
if (fd < 0) {
perror("open");
exit(1);
}
// 等待第一个vblank事件
ret = drmWaitVBlank(fd, &event);
if (ret < 0) {
perror("drmWaitVBlank");
exit(1);
}
// 将事件句柄与vblank事件关联
ret = drmHandleEvent(fd, &event.sequence, &event);
if (ret < 0) {
perror("drmHandleEvent");
exit(1);
}
while (1) {
FD_ZERO(&fds);
FD_SET(fd, &fds);
// 等待事件的发生
ret = select(fd + 1, &fds, NULL, NULL, NULL);
if (ret < 0) {
perror("select");
exit(1);
}
// 读取事件数据
ret = read(fd, &event, sizeof(event));
if (ret < 0) {
perror("read");
exit(1);
}
// 处理事件
printf("Got vblank event %d\n", event.sequence);
// 再次将事件句柄与vblank事件关联
ret = drmHandleEvent(fd, &event.sequence, &event);
if (ret < 0) {
perror("drmHandleEvent");
exit(1);
}
}
close(fd);
return 0;
}
```
这个程序会不断等待vblank事件的发生,并在事件发生时打印事件序列号。可以使用Ctrl+C来停止程序的运行。需要注意的是,这个程序只是一个演示,实际应用中需要根据具体需求进行修改。
阅读全文