欢迎来到 DPDK交流社区 ,有什么问题可以尽管在这里提问,您将会收到社区其他成员的回答;也可以将您的总结写在这里,为社区其他成员提供帮助。 (QQ交流群:127163755)

dpdk在目的机(atom)平台运行失败的问题

0 投票

因为我们采用的是裁剪过的linux系统,所以采用交叉编译链的方式进行编译,在编译的时候,设置了dpdk的全局变量,并且编译的库和内核ko都已经正确了。可是在运行例子程序的时候,出现了指令错误的提示。

[18617.753055] traps: helloworld[570] trap invalid opcode ip:4275fb sp:7ffd52747b50 error:0 in helloworld[400000+1d0000]

Illegal instruction

跟进去调试,发现

rte_cpu_get_flag_enabled 在这个函数中,做的右移操作引起了程序的挂死。

return (regs[feat->reg] >> feat->bit) & 1;

根据反汇编查看,其实这里的内容就是取出cpuid,判断cpu的类型。也怀疑过cpu是否不支持指令集。cpu用的是atom 但是在atom机器上,装上完整linux系统,在用dpdk包编译是可以运行的。所以现在定位到是不是交叉工具链的问题,如果是交叉工具链,请教大牛,怎么设置交叉编译。CROSS这些变量我都设置了。我们这里用的是buildroot 做的文件系统,内核,和gcc。

希望得到高手解答

 

最新提问 11月 15, 2016 分类:默认分类 | 用户: huangyao (140 分)

2 个回答

0 投票
dpdk在高端CPU的编译环境中编译,在低端设备上运行,就会有这种问题。而在低端CPU编译环境中编译,在高端设备上运行就没问题。

以前老的版本其实还是可以选择程序运行的目标CPU架构的,现在似乎不行了。

所以估计你需要在代码中把一些CPU特性禁掉,可以修改Makefile或其他代码禁掉一些高级指令,或者直接在较低端一些的编译环境中编译。
最新回答 11月 16, 2016 用户: sysight (12,100 分)
0 投票
修改你dpdk的编译参数
修改

dpdk-16.07/mk/machine/native/rte.vars.mk

MACHINE_CFLAGS = -march=native -》MACHINE_CFLAGS = -march=atom

我的blog,会不定期更新 dpdk相关文章 http://stdname.space
最新回答 11月 17, 2016 用户: bestboyxie (300 分)
感谢回复!
也欢迎你把DPDK相关文章或经验共享到本社区,让更多的人看到
谢谢~~平台后面会的~~
...