EN JA
LINUX(4)
LINUX(4) FreeBSD Kernel Interfaces Manual LINUX(4)

名称

linuxLinux ABI サポート

書式

この ABI のサポートを i386 カーネルにコンパイルするためには、次の行を利用者のカーネル設定ファイルに置きます:

options COMPAT_LINUX

amd64 カーネルについては、次を使用します:

options COMPAT_LINUX32

もう一つの方法として、ブート時にモジュールとして ABI をロードするためには、次の行を loader.conf(5) に置きます:

linux_load="YES"

解説

linux モジュールはユーザランドアプリケーションのために制限された Linux ABI (アプリケーションバイナリインタフェース) を提供します。モジュールは次の重要な機能を提供します:
  • 正しいブランドの elf(5) 実行可能なイメージのためのイメージ駆動機能
  • 駆動イメージのための特別なシグナル処理
  • Linux からネイティブのシステムコール変換

エミュレータを通して提供されなかった Linux ABI のサポートに注意することは重要です。むしろ、(制限されていますが) 本当の ABI 実装を提供します。

次の sysctl(8) 調整変数が利用可能です:

compat.linux.osname
Linux カーネルオペレーティングシステム名。
compat.linux.osrelease
Linux カーネルオペレーティングシステムリリース。それが Linux プログラムが動作する方法を変更するかもしれないので、これを他の何かに変更することは、非開発システムでお勧めできません。 GNU libc の最近のバージョンは、この sysctl の値に依存する異なった syscall を使用することが知られています。
compat.linux.oss_version
Linux オープンサウンドシステムバージョン。

linux モジュールは COMPAT_LINUX カーネル設定オプションで静的にカーネルにリンクするか、または必要に応じてロードすることができます。カーネルにリンクされず、またモジュールとして既にロードされていないなら、次のコマンドはモジュールをロードします:

if ! kldstat -v | grep -E 'linux(aout|elf)' > /dev/null; then 
 kldload linux > /dev/null 2>&1 
fi

ダイナミックにリンクされた Linux 実行形式は /compat/linux に適切な環境を必要とすることに注意してください。特に、Linux ランタイム (実行時) リンカのヒントファイルは正しく初期化されるべきです。このため、正しく Linux 実行形式を実行するためのシステムを準備する次のコマンドを実行することは一般的です:

if [ -x /compat/linux/sbin/ldconfig ]; then 
 /compat/linux/sbin/ldconfig -r /compat/linux 
fi

システム起動時に自動的に linux カーネルローダブルモジュールをロードする情報については、 rc.conf(5) を参照してください。この情報は、 linux モジュールが静的にカーネルにリンクされるか、またはモジュールとしてロードされるかにかかわらず適用されます。

関連ファイル

/compat/linux
最小の Linux 実行時環境
/compat/linux/proc
制限された Linux プロセスファイルシステム
/compat/linux/sys
制限された Linux システムファイルシステム

歴史

Linux ABI サポートは FreeBSD 2.1 ではじめて登場しました。
February 8, 2010 FreeBSD