Dlaczego polecenie file mówi, że pliki binarne ELF są dla Linuksa 2.6.9?

18

Ilekroć uruchamiam plik na pliku binarnym ELF, otrzymuję ten wynik:

[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

Zastanawiam się tylko, co zmieniło się w Linuksie 2.6.9, że ten plik binarny nie mógł działać na 2.6.8? Czy w systemie Linux 2.0 nie dodano obsługi ELF?

jonescb
źródło

Odpowiedzi:

23

glibcma opcję konfiguracyjną o nazwie, --enable-kernelktóra pozwala określić minimalną obsługiwaną wersję jądra. Kiedy pliki obiektowe są połączone z tą kompilacją glibc, linker dodaje sekcję SHT_NOTE do wynikowego pliku wykonywalnego o nazwie, .note.ABI-tagktóry zawiera tę minimalną wersję jądra. Dokładny format jest zdefiniowany w LSB i filewie, jak szukać tej sekcji i jak ją interpretować.

Powód, dla którego twój glibc został zbudowany, aby wymagał 2.6.9, zależy od tego, kto go zbudował. Tak samo jest w moim systemie (Gentoo); komentarz w ebuildu glibc mówi, że określa 2.6.9, ponieważ jest to minimum wymagane dla NPTL , więc prawdopodobnie jest to powszechny wybór. Kolejnym, który wydaje się pojawiać, jest 2.4.1, ponieważ było to minimum wymagane dla LinuxThreads , pakietu używanego przed NPTL

Michał Mrożek
źródło
Czy zyskujesz poprawę wydajności przy zwiększaniu minimalnej wymaganej wersji jądra? Jakie są z tego korzyści?
Aaron Franke
Tutaj (Fedora 31, x86_64) /lib/libc-2.30. Wymaga więc jądra 3.20 (aktualna wersja jądra to 5.3.12-300)
vonbrand