6

Fedora Core 11 でコンパイルされた「version」という実行可能ファイルで次のコマンドを実行すると、次の出力が得られます。

ファイルのバージョン

バージョン: ELF 32 ビット LSB 実行可能ファイル、Intel 80386、バージョン 1 (SYSV)、動的にリンク (共有ライブラリを使用)、GNU/Linux 2.6.18 用、削除されていない

最後にある2.6.18 という数字にはどのような意味がありますか? また、顧客がダウンロードする必要があるソフトウェアのバージョンを区別するのに役立ちますか?

私がこれまで見てきたことから、この数字は間違いなくそうではありません

  1. カーネルのバージョン
  2. libc バージョン
  3. lsb_release に関することなら何でも

顧客がどのバイナリ リリースをダウンロードする必要があるかを知ることができるように、簡単な識別子を取得したいと思います。理想的には、コマンド (uname -a など) を入力して識別できるようにする必要があります。 )。

ありがとう

4

1 に答える 1

7

これは、バイナリがコンパイルされたマシンのカーネル バージョンです。ディストリビューションからプリコンパイルされたバイナリを使用する場合、それはディストリビューション ベンダーのマシンのカーネル バージョンであり、おそらくそのコンパイル ファームにあります。

たとえば、システムコールを検討する場合に関連します。バイナリがsyscall noを使用しているとします。まだサポートしていないか、さらに悪いことにシステムコール番号が割り当てられてXいないカーネルを使用しています。別のシステムコールに。XX

バニラ Linux カーネル ユーザー API は安定しています。つまり、Linux バージョンで利用可能なすべての syscall は、Linux バージョンAで利用可能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
[...]
于 2010-01-25T16:40:10.947 に答える