在驱动程序file_ops中写了mmap,应用层通过mmap写内存。
char *p=NULL;
fd = open("/dev/mypcie",O_RDWR);
a.通过mmap映射到用户层,再使用memcpy/strcpy方式进行数据拷贝写入。
memcpy方式,仿真软件接收的数据每8个地址读取一次,只能读取8位中的前4位☞如图中的数据,vivado能抓到的是
adcb0000cdef0000
efgh0000ghij0000
ijkl0000klmn0000
mnop0000opqr0000
strcpy方式,仿真软件接收的数据每16个地址读取一次,只能读16位中的前4位☞如图所示的数据,Vivado收到:
abcd000000000000
efgh000000000000
ijkl000000000000
mnop000000000000
下图是srtcpy拷贝到内存空间的Vivado仿真图:
用memcpy 拷贝
char buf[] = "keji1234abcdAAAA2345BBBBefghCCCC3456DDDDijklEEEE4567"
Vivado抓出来的结果如图
。
请问这个抓包的结果与 突发传输模式和窄传输模式有关系么?
顺带咨询一下,PCIe驱动访问BAR空间,
1.通过mmap方式映射到用户空间直接拷贝的方式有没有问题。
2.通过驱动的ioremap映射后的虚拟地址访问BAR空间。具体如何应用到实例中 iowrite32每次只能写32位。