4
我試圖通過PCI總線將VME地址空間映射到用戶空間,以便我可以在內存上執行常規讀/寫操作。 我有這樣的另一個PCI設備做到了這一點: -mmap通過PCI將VME總線疊加到用戶空間內存中?
unsigned long *mapArea(unsigned int barAddr, unsigned int mapSize, int *fd)
{
unsigned long *mem;
*fd = open("/dev/mem", O_RDWR);
if (*fd<0) {
printf("Cannot open /dev/vme_mem\n");
exit(-1);
}
unsigned long *mem = (unsigned long*) mmap (0, mapSize, PROT_READ | PROT_WRITE, MAP_FILE | MAP_SHARED, *fd, barAddr);
if ((mem == NULL) || (mem == (unsigned long*)-1)) {
printf ("Cannot map memory, error is %s\n", strerror(errno));
exit(-1);
}
return mem;
}
volatile unsigned long *bar = (volatile unsigned long *)mapArea(barAddr, mapSize, &fd);
然後在「酒吧」可以正常讀使用/寫。
所以要VME,並與苔原宇宙II PCI-VME橋接芯片: -
我應該打開 「的/ dev/vme_m0」 我在哪裏地圖從我的吧? lspci -vv:「Region 1:Memory at 80020000」
此外VME總線內的地址偏移0x20000000,那麼如何訪問/映射它呢?!
(使用Linux 2.6.18-128.el5#1 SMP) (需要新的標籤 「VME」!)
「/ dev/vme_m0」來自「mknod vme_m0 c 221 0」。 – 2009-12-07 10:57:29