Mengapa perintah file mengatakan bahwa binari ELF adalah untuk Linux 2.6.9?

18

Setiap kali saya menjalankan file pada biner ELF saya mendapatkan output ini:

[jonescb@localhost ~]$ file a.out
a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for
GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, 
not stripped

Saya hanya ingin tahu apa yang berubah di Linux 2.6.9 yang tidak dapat dijalankan oleh biner ini pada 2.6.8? Bukankah dukungan ELF ditambahkan di Linux 2.0?

jonescb
sumber

Jawaban:

23

glibcmemiliki opsi configure yang disebut --enable-kernelyang memungkinkan Anda menentukan versi kernel minimum yang didukung. Ketika file objek ditautkan dengan glibc build itu, linker menambahkan bagian SHT_NOTE ke nama executable yang dihasilkan .note.ABI-tagyang menyertakan versi kernel minimum itu. Format yang tepat didefinisikan dalam LSB , dan filetahu untuk mencari bagian itu dan bagaimana menafsirkannya.

Alasan glibc khusus Anda dibuat membutuhkan 2.6.9 tergantung pada siapa yang membuatnya. Sama di sistem saya (Gentoo); sebuah komentar di ebuild glibc mengatakan bahwa ia menetapkan 2.6.9 karena ini adalah minimum yang diperlukan untuk NPTL , jadi itu kemungkinan merupakan pilihan umum. Satu lagi yang tampaknya muncul adalah 2.4.1, karena itu adalah persyaratan minimum untuk LinuxThreads , paket yang digunakan sebelum NPTL

Michael Mrozek
sumber
Apakah Anda mendapatkan peningkatan kinerja saat meningkatkan versi kernel minimum yang disyaratkan? Apa manfaatnya melakukannya?
Aaron Franke
Di sini (Fedora 31, x86_64) /lib/libc-2.30.so memerlukan kernel 3.20 (versi kernel saat ini 5.3.12-300)
vonbrand