2016-09-23 17 views
1

我读过几个Q &如同这里有关OpenSSL尝试使用不同指令来测试cpu是否支持它们的原因,这会导致SIGILL。但是这些答案通常表明OP在gdb下运行应用程序,但我不是。所以每当我打电话给OpenSSL库时,OpenWrt MIPS路由器上的应用程序在使用OpenSSL时都会崩溃。这次事故是illegal instruction。我其实没有回溯,尽管我的应用程序是一个调试版本。它在Ubuntu和MacOS上运行良好。 我确保我的可执行文件和ssl库都具有相同的CPU架构。修复了由于OpenSSL中的SIGILL导致的崩溃

cat /proc/cpuinfo结果:

system type    : Atheros AR9330 rev 1 
machine     : 8devices Carambola2 board 
processor    : 0 
cpu model    : MIPS 24Kc V7.4 
BogoMIPS    : 265.42 
wait instruction  : yes 
microsecond timers  : yes 
tlb_entries    : 16 
extra interrupt vector : yes 
hardware watchpoint  : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb] 
isa      : mips1 mips2 mips32r1 mips32r2 
ASEs implemented  : mips16 
shadow register sets : 1 
kscratch registers  : 0 
package     : 0 
core     : 0 
VCED exceptions   : not available 
VCEI exceptions   : not available 

我担心的是,工具链toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11在其名称中提到34kc。我不知道用这个工具链构建24 Kc cpu是否可行。尽管除openssl之外的其他所有内容都可以正常工作

那么你可以请回答我的解决方案是什么?

+0

我对MIPS了解不多,但是我建议不同的CPU型号(24Kc和34Kc)支持不同的指令(特别是34Kc可能支持24Kc不支持的指令)的可能性很大。 – davmac

+0

从经验谈起,Debian/Ubuntu交叉编译器在我不惜一切代价避免它们的时候被打破了。 Cavium是否有可用的交叉编译器?应该安装一个'SIGILL'处理程序。我猜(1)交叉编译的代码是坏的,'SIGILL'与OpenSSL(它进入了应用程序启动代码)无关,(2)OpenWRT是一个问题,信号没有正确处理,或者(3)OpenSSL配置和构建不好。在这一点上真的很难说。 – jww

+0

@jww感谢您的意见。我通过日志追踪到ssl调用,所以没有ssl调用 - 事情工作正常。我被赋予了这个工具链来编译应用程序,而且由于工具链中的openssl lib不能正常工作,我认为工具链不是官方的。所以,当我用正式版本(板载供应商的版本)替换openssl库时,问题就没有了。但我会记住你所说的 – rightaway717

回答

0

我不知道问题是什么,但该应用程序无法与工具链中提供的openssl库一起使用并复制到目标板。当libopenssl通过opkg从官方carambola2回购安装时,问题消失了。所以它一定是有些不相容的。