2012-07-08 27 views
7

Linux için (diğer bir deyişle Raspberry Pi olan) diğer ARM cihazlarında Android için yerleşik bir ARM ikili değil (.apk değil) çalıştırmak mümkün müdür? Projelerimden biri olan ARM ile bağlantı kurmaya çalışıyorum ama sadece x86 (Windows ve Linux) ve (son zamanlarda) Android cihazlarda kullanılabilen kapalı kaynak bir ikili (SopCast) kullanmam gerekiyor.Linux ARM için Android işletim sisteminde çalışan ARM

file sopclient gösterir Running ELF 32 bit LSB çalıştırılabilir, ARM, sürüm 1 (sysv), dinamik bağlantılı (paylaşılan kullanır kütüphaneleri), evet, CHMOD değeri ( elimden ancak sh sopclient sadece ikili dosyasını yürütemediğinden diyor + x Önce).

Bir "klasik" ARM Linux çekirdeği ile bir Android Linux arasında bir fark var mı?

+0

Bunu "./Sopclient" olarak çalıştırmayı denediniz mi? Dosyayı bir kabuk betiği olarak yorumlamaya çalışan 'sh' ile çalıştırmaya çalışıyorsunuz (bu nedenle hata). – mdm

+0

./Sopclient olarak çalışılıyor diyor * -bash: ./sopclient: Böyle bir dosya veya dizin yok *. Ama sopclient geçerli dizinde ve çalıştırılabilir – ov1d1u

+0

Sistem kütüphanesi problemine ek olarak (/ system/lib içinde ve/system/bin'deki/veya linkerdeki android kütüphaneleriyle de çözebilirsiniz), programın olması muhtemel değildir. Gelen ve giden arayüzler kopyalayamadıkça kullanılabilir. Gelen tarafta standart ağ API'leriniz olabilir, ancak dökümler sonuçlanmadıkça, giden taraf zorlayıcı olacaktır. –

cevap

12

Başka bir Linux ARM'de bulunmayan Android'in bionic lib bağımlılıklarının olabileceğini unutmayın. semboller kullanılır 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 

Bildirimi kullanarak

Bir readelf -Ss binary_name çalıştırarak semboller herhangi olmadığını görmek için kontrol edebilirsiniz, Örneğin

, bu semboller kontrol etmek için işaret, nihayet konu Bu, dinamik çalışma anında bağlantılı üç kütüphaneler, şeydir var 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 kütüphanesi, yerel C ve Android perspektifinden libc.so, yani önce bunu kontrol edin!

ucLibC klavyesi altında gelecek olan ARM libc.so diğer milleri vardır, bu yüzden kilometre değişebilir. Görmenin tek yolu, ne olacağını görmek için Linux ARM'nin altından çalıştırmaktır, eğer bölümleme hataları veya veri yolu hatalarıyla bombalanırsa, o zaman bunu bileceksiniz.

İlgili konular