日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

ZYNQ LINUX开发笔记——内存直接访问

發布時間:2024/1/1 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ZYNQ LINUX开发笔记——内存直接访问 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

ZYNQ LINUX開發筆記——內存直接訪問

  • LINUX 腳本方式
  • C APP模式


LINUX 腳本方式

寫內存: devmem 0xFFFF1001 32 0x00000001 讀內存: devmem 0xFFFF1001 32 0x00000001 如果在C模塊中需要調用LINUX腳本則: system("devmem 0xFFFF1001 32 0x1")

C APP模式

/dev/mem是物理內存的全映像,可以用來訪問物理內存,一般用法是open(“/dev/mem”,O_RDWR|O_SYNC),然后mmap,接著就可以用mmap的地址來訪問物理內存,這實際上就是實現用戶空間驅動的一種方法。

關鍵代碼:#include <errno.h> #include <sys/mman.h>#define PAGE_SIZE ((size_t)getpagesize()) #define PAGE_MASK ((uint64_t)(long)~(PAGE_SIZE - 1)) #define COMM_BASE 0xFFFF9000int mmfd; volatile uint8_t *mm;/*******************共享內存建立映射關系******************/mmfd = open("/dev/mem", O_RDWR|O_SYNC);if (mmfd < 0) {fprintf(stderr, "open(/dev/mem) failed (%d)\n", errno);return 1;}mm = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, mmfd, COMM_BASE);if (mm == MAP_FAILED) {fprintf(stderr, "mmap64(0x%x@0x%x) failed (%d)\n",PAGE_SIZE, (uint32_t)(COMM_BASE), errno);return 1;}printf("mapbase=%x\n",(unsigned int)mm); /******************************************************/flag = *(volatile uint32_t *)(mm + COMM_TX_FLAG_OFFSET));*(volatile uint32_t *)(mm + COMM_TX_FLAG_OFFSET) = 0; munmap((void *)mm, PAGE_SIZE); close(fd);

總結

以上是生活随笔為你收集整理的ZYNQ LINUX开发笔记——内存直接访问的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。