2016-09-23 225 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回購安裝時,問題消失了。所以它一定是有些不相容的。