dma-test.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include <stdlib.h>
  2. #include <unistd.h>
  3. #include <fcntl.h>
  4. #include <stdio.h>
  5. #include <errno.h>
  6. #include <errno.h>
  7. #include <string.h>
  8. #include <sys/ioctl.h>
  9. #include <sys/mman.h>
  10. #include <dmabuf_exporter.h>
  11. int main(int argc, char **argv)
  12. {
  13. int fd;
  14. int buff_fd;
  15. int nBuffs;
  16. unsigned long bufSize;
  17. int i;
  18. if (argc < 3) {
  19. printf("%s <# buffers> buffersize\n", argv[0]);
  20. return 1;
  21. }
  22. nBuffs = atoi(argv[1]);
  23. bufSize = atoi(argv[2]);
  24. for (i = 0; i < nBuffs; i++) {
  25. void *uptr;
  26. fd = open("/dev/dmabuf", O_RDWR);
  27. if (fd < 0) {
  28. perror("open");
  29. return 1;
  30. }
  31. if (ioctl(fd, DMABUF_IOCTL_CREATE, bufSize)) {
  32. perror("ioctl DMABUF_IOCTL_CREATE");
  33. return 1;
  34. }
  35. buff_fd = ioctl(fd, DMABUF_IOCTL_EXPORT, 0);
  36. if (buff_fd < 0) {
  37. printf("error exporting\n");
  38. return 1;
  39. }
  40. printf("export fd : %d\n", buff_fd);
  41. uptr = mmap(NULL, bufSize, PROT_READ | PROT_WRITE, MAP_SHARED, buff_fd, 0);
  42. if (uptr == MAP_FAILED) {
  43. perror("mmap");
  44. return 1;
  45. }
  46. printf("mapped to %p\n", uptr);
  47. }
  48. sleep(5);
  49. return 0;
  50. }