たとえば、FedoraのLinuxカーネルをFreeBSDのカーネルに置き換えるなど、カーネルを変更できるかどうかを知りたかったのです。
現在、すでにDebian GNU / kFreeBSDが存在しています。LinuxディストリビューションをカスタマイズしてBSDカーネルを含めることはできますか?
たとえば、FedoraのLinuxカーネルをFreeBSDのカーネルに置き換えるなど、カーネルを変更できるかどうかを知りたかったのです。
現在、すでにDebian GNU / kFreeBSDが存在しています。LinuxディストリビューションをカスタマイズしてBSDカーネルを含めることはできますか?
回答:
いいえ、各カーネルは独自の方法で独自の機能を実装しています。大量のPOSIX互換性がありますが、そこから抜け出した後は、実行可能ファイルをカーネルメカニズムを使用してコンパイルする必要があります。多くのプロジェクトには、FreeBSDまたはLinux用にコンパイルしていると明示的に言った場合にのみコンパイルされるソースコードが含まれています。それは基本的にkFreeBSDです。ツールはFreeBSDカーネルをサポートしていますが、そのためにコンパイルする必要があります。
たとえば、epoll_create
FreeBSDで使用しようとすると、期待どおりに動作しません。
もちろん、BSDシステムのLFSスタイルからツールをクロスコンパイルできますが、それは永遠にかかるでしょう。新しいカーネルをコンパイルするだけでは簡単ではありません。
FreeBSDはLinuxカーネルを使用しません-その名前が示すように、BSDカーネルを使用します。
Linuxカーネルを別のLinuxカーネル(自分で作成したカーネルまたはディストリビューションから抽出したカーネル)に置き換えることができます。ディストリビューション内のユーザー空間プログラムは、コンパイルされる特定のカーネル機能に依存している可能性があり、それらの機能なしでビルドされたカーネルで実行すると適切に動作しない可能性があることに注意してください。たとえば、systemdベースのディストリビューションでは、カーネルにcgroupが必要です。
あなたが言及した例では、はい、GNUディストリビューションはLinuxカーネルまたはBSDカーネル用にビルドできます。多くの場合、#ifdef
カーネルが同じABIをアドバタイズする場合でも、2つのためにコンパイルされたプログラム間にコンパイル時の違い(例:)があります。少なくとも、Cランタイムライブラリなどの低レベルライブラリは、異なるカーネルABIに対応する必要があります。
カーネルは独立した部分であり、オペレーティングシステムの更新中に定期的に交換されます。一部のプロプライエタリドライバー(NVIDIAなど)には、ドライバーをカーネルソースにパッチし、そのカーネルをビルドし、現在のカーネルをそれに置き換えるインストールスクリプトがあります。したがって、必要なすべての機能を実行できる独自のカーネルバージョンを開発する場合、それを植え付けて残りのオペレーティングシステムをそのままにしておくことは大きな問題にはなりません。ただし、ほとんどの場合、このような「新しいカーネル」は最近の公式バージョンから派生しています。
Solarisカーネルはある程度この方法で移植されており、OpenSolarisがGnome環境を実行しています。
それでも、インターフェイスをブリッジする必要があるため、まったく異なるカーネルを配置することは大きな努力です。これには、多くのCプログラミングが必要になる可能性が高く、ビルドスクリプトだけではありません。