Каково поле номера версии в выходных данных команды файла linux - PullRequest
6 голосов
/ 25 января 2010

Если я выполняю следующую команду на моем исполняемом файле с именем «version», скомпилированном в Fedora Core 11, я получаю этот вывод

версия файла

версия: ELF 32-битный исполняемый файл LSBIntel 80386, версия 1 (SYSV), динамически связанная (использует разделяемые библиотеки), для GNU / Linux 2.6.18 , без разборки

В чем смысл 2.6.18 номер к концу, и имеет ли смысл различать клиентам, какую версию какого-либо программного обеспечения они должны загрузить?

Из того, что я видел до сих пор, это число определенно не

  1. Версия ядра
  2. Версия libc
  3. Какое-то отношение к lsb_release

Я хотел бы получить несколько простых идентификаторов, чтобы разрешитьклиенты должны знать, какой двоичный выпуск они должны загрузить, и в идеале они должны быть в состоянии определить, набрав команду (например, uname -a, хотя в данном случае это явно не тот случай).

Спасибо

1 Ответ

7 голосов
/ 25 января 2010

Это версия ядра компьютера, на котором скомпилирован . Если вы используете предварительно скомпилированные двоичные файлы из своего дистрибутива, это версия ядра компьютера поставщика дистрибутива, возможно, в его ферме компиляции.

Это актуально, например, при рассмотрении системных вызовов. Скажем, ваш бинарный файл использует системный вызов no. X и вы используете ядро, которое еще не поддерживает X или, что еще хуже, назначило системный вызов no. X на другой системный вызов.

Ванильный пользовательский API ядра Linux стабилен. Это означает, что каждый системный вызов, доступный в версии Linux A, доступен в версии Linux B, если A <=B. Но может случиться так, что какой-то разработчик выпускает свою собственную версию Linux для разработки (что-то вроде linux-2.6.18-xy), и он / она реализует новый системный вызов. Если он / она теперь компилирует двоичный файл, используя эту версию ядра, двоичный файл будет помечен этой версией. Итак, позже вы сможете узнать, что это может или не может работать.

Кстати, /usr/include/asm/unistd_32.h содержит номера системных вызовов, выдержка:

[...]
#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
[...]
...