2010-01-25 32 views
6

Nếu tôi lệnh sau trên thực thi của tôi được gọi là "phiên bản", được biên soạn trên Fedora Core 11, tôi nhận được kết quả nàylà gì lĩnh vực số phiên bản trong đầu ra của lệnh tập tin Linux

phiên bản tập tin

phiên bản: ELF 32-bit LSB thực thi, Intel 80386, phiên bản 1 (SYSV), liên kết động (sử dụng libs chia sẻ), cho GNU/Linux 2.6.18, chưa bóc

tầm quan trọng của 2,6 là gì .18 số vào cuối, và nó có sử dụng trong dis hay không phân biệt với khách hàng phiên bản phần mềm nào họ nên tải xuống?

Từ những gì tôi đã xem xét cho đến nay, con số này chắc chắn là không

  1. Phiên bản kernel
  2. Phiên bản libc
  3. Bất cứ điều gì để làm với lsb_release

tôi muốn nhận được một số định danh dễ dàng để cho phép khách hàng biết bản phát hành nhị phân nào họ nên tải xuống, lý tưởng nhất là họ có thể xác định bằng cách nhập lệnh (như uname -a, mặc dù rõ ràng là không phải là một trong trường hợp này).

Cảm ơn

Trả lời

7

Đó là phiên bản kernel của máy nhị phân là biên soạn trên. Nếu bạn sử dụng các tệp nhị phân được biên dịch sẵn từ bản phân phối của mình, đó là phiên bản hạt nhân của máy của nhà cung cấp phân phối, có thể trong trang trại biên dịch của nó.

Có liên quan, ví dụ: khi xem xét syscalls. Giả sử nhị phân của bạn sử dụng syscall no. X và bạn sử dụng hạt nhân không hỗ trợ X chưa hoặc tệ hơn đã gán syscall no. X đến một syscall khác.

API người dùng hạt nhân Linux vanilla ổn định. Điều đó có nghĩa là mọi syscall có sẵn trong phiên bản Linux A có sẵn trong phiên bản Linux B nếu A <=B. Nhưng nó có thể xảy ra rằng một số nhà phát triển phát hành/phiên bản phát triển của riêng mình của Linux (một cái gì đó như linux-2.6.18-xy) và s/ông thực hiện một syscall mới. Nếu s/anh ta bây giờ biên dịch một nhị phân bằng cách sử dụng phiên bản hạt nhân, nhị phân được gắn thẻ với phiên bản đó. Vì vậy, sau này bạn có thể biết rằng nó có thể hoặc có thể không hoạt động.

Btw, /usr/include/asm/unistd_32.h chứa số syscall, trích đoạn:

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

Cảm ơn - vì vậy có hiệu quả, phiên bản kernel tối thiểu mà có khả năng tương thích nhị phân với thực thi? Tôi đã giảm giá một phiên bản hạt nhân ban đầu như là một chương trình không gian người dùng chỉ "phụ thuộc" (như đầu ra ldd) trên libc.so, nhưng tôi có thể thấy liên kết ở đó. –

+0

Bạn có thể nói như vậy. Sự thật thực sự là một chút tinh tế hơn: Không phải mọi phiên bản hạt nhân mang lại syscalls mới VÀ trong các chương trình bình thường bạn sử dụng trình bao bọc syscall từ libc. Vì vậy, các con số không được mã hóa cứng trong chính chương trình nhưng trong libc. Nhưng NẾU một hạt nhân phát minh ra một syscall mới, chương trình của bạn phụ thuộc vào nó, bạn không thể thực hiện chương trình đó trên một hạt nhân cũ hơn ... –

+0

Vâng - đó là những gì tôi đã nghĩ - như một chương trình không gian người dùng, tôi không quan tâm đến hạt nhân - chỉ libc. Nhưng dĩ nhiên, libc phải quan tâm đến hạt nhân, vì nó kết nối không gian người dùng với hạt nhân.Vì vậy, thực sự, số là phiên bản hạt nhân libc đã được biên dịch chống lại, mà đến từ các nhà cung cấp (Fedora trong trường hợp này). Cảm ơn thời gian của bạn –

Các vấn đề liên quan