如何解决来自Linux驱动程序的32字节PCIe事务
我想在Linux驱动程序内与PCIe设备进行32字节事务处理。 Compiling Intel AVX instrinsics for Linux Device Driver with GCC
代码:
base_4 = ioremap(bar_data->bar_paddr[4],bar_data->bar_len[4]);
test_ptr = kmalloc(128,GFP_KERNEL);
if (!test_ptr) {
printk("test_ptr : kmalloc failed \n");
return -ENOMEM;
}
memset (test_ptr,1,128);
kernel_fpu_begin();
_mm256_storeu_si256((__m256i*)base_4,*(((__m256i*)test_ptr) + 0));
_mm_mfence();
kernel_fpu_end();
生成文件会出现错误:
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/mm_malloc.h:27:20: fatal error: stdlib.h: No such file or directory
#include <stdlib.h>
^
compilation terminated.
Makefile:
obj-m += memsule.o
ccflags-y := -mavx -mmmx -msse -mpreferred-stack-boundary=4
KDIR = /lib/modules/$(shell uname -r)/build
all:
make -C $(KDIR) M=$(shell pwd) modules
clean:
make -C $(KDIR) M=$(shell pwd) clean
还有其他方法如何使用汇编指令vmovdqa m256,ymm
?
我尝试过这种方式
asm volatile("vmovdqa base_4,test_ptr");
但出现错误:
Error: too many memory references for `vmovdqa'
如何在C语言中正确使用汇编代码?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。