2012-07-08 11 views
7

पर एंड्रॉइड के लिए एआरएम बाइनरी चलाना लिनक्स (जैसे रास्पबेरी पीआई) वाले अन्य एआरएम उपकरणों पर एंड्रॉइड (.apk नहीं) के लिए निर्मित एआरएम बाइनरी चलाने के लिए संभव है? मैं एआरएम पर अपनी परियोजनाओं में से एक को बंद करने की कोशिश कर रहा हूं लेकिन मुझे एक बंद-स्रोत बाइनरी (सोपकास्ट) का उपयोग करने की आवश्यकता है जो केवल x86 (विंडोज़ और लिनक्स) और (हाल ही में) एंड्रॉइड डिवाइस के लिए उपलब्ध है। ELF 32-बिटलिनक्स एआरएम

रनिंग file sopclient शो LSB निष्पादन, एआरएम, संस्करण 1 (SysV), गतिशील रूप से जुड़े हुए (साझा का उपयोग करता है libs), छीन लेकिन sh sopclient कहते हैं बस बाइनरी फ़ाइल पर अमल नहीं कर सकते हैं (हाँ, मैं chmoded + x इससे पहले)।

क्या "क्लासिक" एआरएम लिनक्स कर्नेल और एंड्रॉइड-लिनक्स एक के बीच कोई उल्लेखनीय अंतर है?

+0

क्या आपने अभी इसे '।/Sopclient' के रूप में चलाने का प्रयास किया है? ऐसा लगता है कि आप इसे 'sh' के साथ चलाने की कोशिश कर रहे हैं, जो फ़ाइल को शेल स्क्रिप्ट (इसलिए त्रुटि) के रूप में समझने का प्रयास करेगा। – mdm

+0

'/ sopclient' के रूप में चल रहा है * -bash: ./sopclient: ऐसी कोई फ़ाइल या निर्देशिका * नहीं है। लेकिन sopclient वर्तमान निर्देशिका में है और निष्पादन योग्य – ov1d1u

+0

सिस्टम लाइब्रेरी समस्या के अतिरिक्त (जो आप/system/lib में/एंड्रॉइड लाइब्रेरीज़/सिस्टम/बिन में लिंकर के साथ ठीक करने में सक्षम हो सकते हैं), प्रोग्राम होने की संभावना नहीं है प्रयोग करने योग्य जब तक कि यह आने वाली और आउटगोइंग इंटरफेस न हो, आप डुप्लिकेट कर सकते हैं। आने वाली तरफ आपके पास मानक नेटवर्क एपीआई हो सकती हैं, लेकिन जब तक यह परिणाम को डूबने या आउटगोइंग पक्ष को चुनौती देने वाला नहीं है, तब तक चुनौतीपूर्ण नहीं होगा। –

उत्तर

12

ध्यान रखें कि एंड्रॉइड के bionic lib पर निर्भरता हो सकती है जो किसी अन्य लिनक्स एआरएम पर मौजूद नहीं हो सकती है?

आप देख सकते हैं कि एक readelf -Ss binary_name चलाकर प्रतीकों यदि कोई हो को देखने के लिए,

उदाहरण के लिए, का उपयोग कर readelf -Ss logwrapper

Symbol table '.dynsym' contains 47 entries: 
    Num: Value Size Type Bind Vis  Ndx Name 
    0: 00000000  0 NOTYPE LOCAL DEFAULT UND 
    1: 00000000  0 FUNC GLOBAL DEFAULT UND __aeabi_unwind_cpp_pr0 
    2: 00000000  0 FUNC GLOBAL DEFAULT UND strlen 
    3: 00000000  0 FUNC GLOBAL DEFAULT UND __errno 
    4: 00000000  0 FUNC GLOBAL DEFAULT UND open 
    5: 00000000  0 FUNC GLOBAL DEFAULT UND close 
    6: 00000000  0 FUNC GLOBAL DEFAULT UND __stack_chk_fail 
    7: 00000000  0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard 
    8: 00000000  0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock 
    9: 00000000  0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock 
    10: 00000000  0 FUNC GLOBAL DEFAULT UND read 
    11: 00000000  0 FUNC GLOBAL DEFAULT UND abort 
    12: 00000000  0 OBJECT GLOBAL DEFAULT UND __sF 
    13: 00000000  0 FUNC GLOBAL DEFAULT UND memcpy 
    14: 00000000  0 FUNC GLOBAL DEFAULT UND __libc_init 
    15: 00000000  0 FUNC GLOBAL DEFAULT UND exit 
    16: 0000a170  0 NOTYPE GLOBAL DEFAULT 19 __dso_handle 
    17: 0000a008  0 NOTYPE GLOBAL DEFAULT 13 __INIT_ARRAY__ 
    18: 0000a010  0 NOTYPE GLOBAL DEFAULT 14 __FINI_ARRAY__ 
    19: 00000000  0 FUNC GLOBAL DEFAULT UND setgid 
    20: 00000000  0 FUNC GLOBAL DEFAULT UND writev 
    21: 00000000  0 FUNC GLOBAL DEFAULT UND dup2 
    22: 00000000  0 FUNC GLOBAL DEFAULT UND access 
    23: 00000000  0 FUNC GLOBAL DEFAULT UND __aeabi_unwind_cpp_pr1 
    24: 00000000  0 FUNC GLOBAL DEFAULT UND memmove 
    25: 00000000  0 FUNC GLOBAL DEFAULT UND fork 
    26: 00000000  0 FUNC GLOBAL DEFAULT UND execvp 
    27: 00000000  0 FUNC GLOBAL DEFAULT UND strncmp 
    28: 00000000  0 FUNC GLOBAL DEFAULT UND strcmp 
    29: 00000000  0 FUNC GLOBAL DEFAULT UND ptsname 
    30: 00000000  0 FUNC GLOBAL DEFAULT UND setuid 
    31: 00000000  0 FUNC GLOBAL DEFAULT UND strerror 
    32: 00000000  0 FUNC GLOBAL DEFAULT UND vsnprintf 
    33: 00000000  0 FUNC GLOBAL DEFAULT UND unlockpt 
    34: 00000000  0 FUNC GLOBAL DEFAULT UND wait 
    35: 00000000  0 FUNC GLOBAL DEFAULT UND fputs 
    36: 00009318  0 NOTYPE GLOBAL DEFAULT ABS __exidx_start 
    37: 00009368  0 NOTYPE GLOBAL DEFAULT ABS __exidx_end 
    38: 0000a15c  0 NOTYPE GLOBAL DEFAULT 18 __data_start 
    39: 0000a170  0 NOTYPE GLOBAL DEFAULT ABS _edata 
    40: 0000a170  0 NOTYPE GLOBAL DEFAULT ABS __bss_start 
    41: 0000a170  0 NOTYPE GLOBAL DEFAULT ABS __bss_start__ 
    42: 0000a188  0 NOTYPE GLOBAL DEFAULT ABS _bss_end__ 
    43: 0000a188  0 NOTYPE GLOBAL DEFAULT ABS __bss_end__ 
    44: 0000a188  0 NOTYPE GLOBAL DEFAULT ABS __end__ 
    45: 0000a188  0 NOTYPE GLOBAL DEFAULT ABS _end 
    46: 00080000  0 NOTYPE GLOBAL DEFAULT ABS _stack 

सूचना प्रतीकों का प्रयोग किया, कि प्रतीकों की जांच करने के लिए अपने क्यू, अंत में मुद्दा है इस, readelf -d logwrapper

Dynamic section at offset 0x2020 contains 24 entries: 
    Tag  Type       Name/Value 
0x00000003 (PLTGOT)      0xa0e8 
0x00000002 (PLTRELSZ)     208 (bytes) 
0x00000017 (JMPREL)      0x875c 
0x00000014 (PLTREL)      REL 
0x00000011 (REL)      0x882c 
0x00000012 (RELSZ)      16 (bytes) 
0x00000013 (RELENT)      8 (bytes) 
0x00000015 (DEBUG)      0x0 
0x00000006 (SYMTAB)      0x8280 
0x0000000b (SYMENT)      16 (bytes) 
0x00000005 (STRTAB)      0x8570 
0x0000000a (STRSZ)      490 (bytes) 
0x00000004 (HASH)      0x8128 
0x00000001 (NEEDED)      Shared library: [libc.so] 
0x00000001 (NEEDED)      Shared library: [libstdc++.so] 
0x00000001 (NEEDED)      Shared library: [libm.so] 
0x00000020 (PREINIT_ARRAY)    0xa000 
0x00000021 (PREINIT_ARRAYSZ)   0x8 
0x00000019 (INIT_ARRAY)     0xa008 
0x0000001b (INIT_ARRAYSZ)    8 (bytes) 
0x0000001a (FINI_ARRAY)     0xa010 
0x0000001c (FINI_ARRAYSZ)    8 (bytes) 
0x0000001e (FLAGS)      
0x00000000 (NULL)      0x0 

वहाँ तीन पुस्तकालयों गतिशील रन-टाइम में में जुड़ा हुआ है, बात है, bionic लाइब्रेरी देशी सी और एंड्रॉइड परिप्रेक्ष्य से libc.so है, तो पहले उस पर दो बार जांचें!

अन्य एआरएम libc.so हैं जो ucLibC की आड़ में आ जाएंगे, इसलिए माइलेज भिन्न हो सकता है। देखने का एकमात्र तरीका यह है कि क्या होता है यह देखने के लिए लिनक्स एआरएम के तहत इसे चलाने के लिए है, अगर यह सेगमेंटेशन त्रुटियों या बस त्रुटियों के साथ बाहर निकलता है, तो आपको पता चलेगा।

संबंधित मुद्दे