2010-01-25 3 views
6

Wenn ich den folgenden Befehl auf meiner ausführbaren Datei kann als „Version“, zusammengestellt auf Fedora Core 11, bekomme ich diese AusgabeWas die Versionsnummer Feld in der Ausgabe des Befehls linux-Datei ist

Dateiversion

Version: ELF 32-Bit-LSB ausführbare Datei, Intel 80386, Version 1 (SYSV), dynamisch gelinkt (verwendet libs gemeinsam), für GNU/Linux 2.6.18, nicht

gestrippt

Was die Bedeutung der 2.6 ist .18 Nummer gegen Ende, und ist es irgendeine Verwendung in DIS Welche Software sollte sie herunterladen?

Von dem, was ich bisher betrachtet haben, ist diese Zahl auf jeden Fall nicht

  1. Die Kernel-Version
  2. Die libc Version
  3. Alles, was mit dem lsb_release

ich zu tun Ich möchte einen einfachen Bezeichner erhalten, damit Kunden wissen können, welche Binärversion sie herunterladen sollen, die sie idealerweise durch Eingabe eines Befehls (wie uname -a) identifizieren können, obwohl das offensichtlich ist nicht der eine in diesem Fall).

Dank

Antwort

7

Es ist die Kernel-Version der Maschine der binären auf kompiliert wurde. Wenn Sie vorkompilierte Binärdateien aus Ihrer Distribution verwenden, handelt es sich um die Kernelversion eines Computers des Vertriebsherstellers, wahrscheinlich in der Kompilierfarm.

Es ist z.B. wenn man syscalls betrachtet. Angenommen, Ihre Binärdatei verwendet die syscall-Nr. X und Sie verwenden einen Kernel, der X noch nicht unterstützt oder schlechter syscall zugewiesen hat. X zu einem anderen Systemaufruf.

Die Vanille Linux Kernel User API ist stabil. Das bedeutet, dass jeder in der Linux-Version A verfügbare Syscall in der Linux-Version B, wenn A <=B, verfügbar ist. Es kann jedoch vorkommen, dass ein Entwickler eine eigene Entwicklungsversion von Linux (etwa linux-2.6.18-xy) veröffentlicht und einen neuen Syscall implementiert. Wenn er nun eine Binärdatei mit dieser Kernel-Version kompiliert, wird die Binärdatei mit dieser Version markiert. So können Sie später wissen, dass es funktioniert oder nicht.

Btw, enthält /usr/include/asm/unistd_32.h syscall Zahlen, Auszug:

[...] 
#define __NR_restart_syscall  0 
#define __NR_exit   1 
#define __NR_fork   2 
#define __NR_read   3 
#define __NR_write  4 
#define __NR_open   5 
[...] 
+0

Dank - so effektiv, die minimale Kernel-Version, die mit der ausführbaren Binär-Kompatibilität hat? Ich habe zunächst eine Kernel-Version diskontiert, da ein User-Space-Programm nur auf libc.so "hängt" (wie die ldd-Ausgabe), aber ich kann den Link dort sehen. –

+0

Das könnte man so sagen. Die wirkliche Wahrheit ist ein bisschen subtiler: Nicht jede Kernel-Version bringt neue syscalls UND in normalen Programmen verwenden Sie syscall Wrapper von libc. Die Zahlen sind also nicht im Programm selbst festgeschrieben, sondern in libc. Aber wenn ein Kernel einen neuen Syscall erfunden hat, hängt Ihr Programm davon ab, Sie können das Programm nicht auf einem älteren Kernel ausführen ... –

+0

Ja - das ist, was ich dachte - als ein Userspace Programm interessiert mich das nicht kernel - nur libc. Aber natürlich muss sich libc um den Kernel kümmern, da er den Userspace mit dem Kernel überbrückt.Also, wirklich, die Nummer ist die Kernel-Version, gegen die libc kompiliert wurde, die vom Hersteller kommt (Fedora in diesem Fall). Danke für Ihre Zeit –

Verwandte Themen