ARM executable: No such file or directory

Fórumok

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

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 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 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

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 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