在驱动程序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位。
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。