เหตุใดคำสั่ง file จึงบอกว่า ELF ไบนารีมีไว้สำหรับ Linux 2.6.9


18

เมื่อใดก็ตามที่ฉันเรียกใช้ไฟล์บนไบนารี ELF ฉันจะได้รับผลลัพธ์นี้:

[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

ฉันแค่สงสัยว่ามีการเปลี่ยนแปลงอะไรใน Linux 2.6.9 ที่ไบนารีนี้ไม่สามารถทำงานบน 2.6.8 ได้? ไม่รองรับ ELF ใน Linux 2.0 หรือไม่

คำตอบ:


23

glibcมีตัวเลือกการกำหนดค่าที่เรียก--enable-kernelว่าช่วยให้คุณระบุรุ่นเคอร์เนลที่รองรับขั้นต่ำ เมื่อไฟล์อ็อบเจ็กต์ถูกลิงก์กับการสร้าง glibc ตัวลิงก์จะเพิ่มส่วน SHT_NOTE ไปยังไฟล์เรียกทำงานที่เป็นผลลัพธ์ซึ่งมีชื่อ.note.ABI-tagเวอร์ชันเคอร์เนลขั้นต่ำนั้น รูปแบบที่แน่นอนถูกกำหนดไว้ในLSBและfileรู้วิธีค้นหาส่วนนั้นและวิธีตีความ

เหตุผลที่ glibc เฉพาะของคุณถูกสร้างขึ้นเพื่อต้องการ 2.6.9 ขึ้นอยู่กับว่าใครสร้างมันขึ้นมา มันเหมือนกันในระบบของฉัน (Gentoo); ความคิดเห็นใน glibc ebuild บอกว่ามันระบุ 2.6.9 เพราะมันเป็นขั้นต่ำที่จำเป็นสำหรับNPTLดังนั้นจึงน่าจะเป็นทางเลือกทั่วไป อีกอันหนึ่งที่ดูเหมือนว่าจะเกิดขึ้นคือ 2.4.1 เนื่องจากเป็นขั้นต่ำที่จำเป็นสำหรับLinuxThreadsแพ็กเกจที่ใช้ก่อน NPTL


คุณได้รับการปรับปรุงประสิทธิภาพเมื่อเพิ่มเคอร์เนลเวอร์ชันต่ำสุดที่ต้องการหรือไม่ การทำเช่นนั้นมีประโยชน์อะไรบ้าง?
Aaron Franke

ที่นี่ (Fedora 31, x86_64) /lib/libc-2.30.so ต้องการเคอร์เนล 3.20 (เวอร์ชั่นเคอร์เนลปัจจุบันคือ 5.3.12-300)
vonbrand
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.