Udv,
A szepnevu SEGGER ceg mikrokontroller debug eszkozeihez ad Linux-os szoftvereket is (http://www.segger.com/jlink-software.html).
Mi tobb, ARM-ra is leteznek ezen programok. Sajnos "This package comes without any support."
Az ARM verziot szertnem hasznalni egy Raspberry Pi-on, de sajnos nem megy.
A problema az, hogy amig a PC-s verzio jol mukodik addig az ARM eseten a futtathato allomanyok inditasakor az alabbi uzenetet kapom: "bash: ./JLinkGDBServer: No such file or directory"
Megprobaltam egy strace-t is:
# strace ./JLinkGDBServer
execve("./JLinkGDBServer", ["./JLinkGDBServer"], [/* 16 vars */]) = -1 ENOENT (No such file or directory)
dup(2) = 3
fcntl64(3, F_GETFL) = 0x20002 (flags O_RDWR|O_LARGEFILE)
fstat64(3, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 0), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f51000
_llseek(3, 0, 0xbeb59880, SEEK_CUR) = -1 ESPIPE (Illegal seek)
write(3, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory
) = 40
close(3) = 0
munmap(0xb6f51000, 4096) = 0
exit_group(1) = ?
Ugy erzem elegge lama kerdes, de mire mondja, hogy nem talalja a file-t? A JLinkGDBServer hianyozna a bash-nek? Az nem nagyon lehet, hiszen ott van a konyvtarban.
Koszi,
/sza2
- 3345 megtekintés
Hozzászólások
Asszem akkor szokott mondani ilyet, amikor a kernel által nem futtatható a bináris, pl. architektúra-eltérés miatt. readelf(1) (vagy esetleg file(1)) mit mond?
- A hozzászóláshoz be kell jelentkezni
A readelf -a olyan hosszu, hogy http://pastebin.com/3yCzNBaQ
A file:
JLinkGDBServer: ELF 32-bit LSB executable, ARM, version 1, dynamically linked (uses shared libs), stripped
Sajnos en nem talalok benne olyat, ami elorebb vinne :-(
Ez az architektura kulonbseg bennem is felotlott, de nem tudom hogyan tudnam kideriteni. Vagy esetleg meg little/big endian kulonbseg, bar talan mind a Raspbian mind a JLink little endian.
/sza2
- A hozzászóláshoz be kell jelentkezni
strace -eopen -f
Így próbáld, kicsit kevesebb lesz a "zaj" és a subprocess-ek is megjelennek az outputban.
Még az sem zárható ki, hogy elvileg támogatott az architektúrád, de dinamikusan linkelt a binárisod és olyan könyvtárat keres ami még/már nincs a rendszeredben.
- A hozzászóláshoz be kell jelentkezni
# strace -e open -f ./JLinkGDBServer
strace: exec: No such file or directory
Azt hiszem a futtahato allomanyok statikusan linkeltek:
# ldd ./JLinkGDBServer
not a dynamic executable
/sza2
- A hozzászóláshoz be kell jelentkezni
> JLinkGDBServer: ELF 32-bit LSB executable, ARM, version 1, dynamically linked (uses shared libs), stripped
Hasonlítsd kérlek össze más, működő binárisok kimenetével...
A "uses shared libs" még érdekes lehet. ldd mit mond? Megvan minden szükséges lib?
- A hozzászóláshoz be kell jelentkezni
A hello world-om ezt irja:
# file hello
hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0x94bf7fb48b2cc0de890cb4736b63ab8519e0cfbc, not stripped
A csomagnak (.tgz) resze egy libjlinkarm.so.4.84.6 (meg egy symlink libjlinkarm.so.4), probalkoztam LD-PRELOAD-dal, illetve utana betettem ezt a ket file-t a "/usr/local/lib"-be, elvileg elerheto is:
# ldconfig -v | grep libjlinkarm.so.4.84.6
ldconfig: Path `/lib/arm-linux-gnueabihf' given more than once
ldconfig: Path `/usr/lib/arm-linux-gnueabihf' given more than once
libjlinkarm.so.4 -> libjlinkarm.so.4.84.6
Ami az ldd-t illeti:
# ldd ./JLinkGDBServer
not a dynamic executable
Azt gondolnam, ebben, ha hasznalni szeretne a libjlinkarm-ot, akkor benne kellene lenni. De lehet, hogy teljesen statikus a futtathato allomany, es a .so csak azert van, hogy lehessen csinalni sajat programokat, amik hasznalhatjak a shared object fuggvenyeit.
/sza2
- A hozzászóláshoz be kell jelentkezni
Tudom, triviális, így bocs a kérdésért... Van futtatási joga a file-ra annak, aki futtatni próbálja?
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Igen, termeszetesen van, minden 755, egyelore root-kent probalom futtatni.
/sza2
- A hozzászóláshoz be kell jelentkezni
A readelf kimenetebol:
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
PHDR 0x000034 0x00008034 0x00008034 0x000c0 0x000c0 R E 0x4
INTERP 0x0000f4 0x000080f4 0x000080f4 0x00014 0x00014 R 0x1
[Requesting program interpreter: /lib/ld-uClibc.so.0]
LOAD 0x000000 0x00008000 0x00008000 0x59904 0x59904 R E 0x8000
LOAD 0x059904 0x00069904 0x00069904 0x032ac 0x32108 RW 0x8000
DYNAMIC 0x05a1e8 0x0006a1e8 0x0006a1e8 0x000f0 0x000f0 RW 0x4
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RWE 0x4
A piros resz nem lehet gond?
/sza2
- A hozzászóláshoz be kell jelentkezni
Szerintem csak akkor, ha nincs olyanod. ;)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Arra gondolok, hogy a Raspberry nem uClibc-s, ez a program meg lehet, hogy igen. Csak nem tudom, hogy ez, ha gond, athidalhato-e.
/sza2
- A hozzászóláshoz be kell jelentkezni
Lehet osszefugges, mert felganyoltam egy libuclibc0_0.9.9-cvs20020221-2_arm.deb csomagot, mostmar ez a hibauzenet:
# ./JLinkGDBServer
./JLinkGDBServer: can't load library 'librt.so.0'
/sza2
- A hozzászóláshoz be kell jelentkezni