web-dev-qa-db-ja.com

カーネルモジュールを作成する代わりに、なぜLinuxカーネルを変更するのですか?

古いバージョンのLinuxがインストールされている開発ボードがあります。ベンダーは、大幅に変更されたLinuxカーネル、いくつかのロード可能なカーネルモジュール、およびいくつかのサンプルソフトウェアを備えたデバイスのイメージを提供しています。

新しいバージョンのLinuxカーネルをデバイスにインストールしたいのですが、変更されたLinuxカーネルは古いカーネルバージョンに基づいているため、ベンダーはこれをサポートしていません。

私が理解していないのは、ドライバーをカーネルモジュールとして作成することで、カーネルを実行中のデバイスと互換性を持たせることができるのに、なぜLinuxカーネルをハッキングし始めるのかということです。問題なく、どのカーネルバージョンでも簡単に再コンパイルできます。このように、ベンダーが特定のカーネルバージョンのみをサポートしている場合、あなたは「行き詰まっています」:(

しかし、多くのプロジェクトがカーネルの一部のバージョンを取得し、ボードに合うように大幅に変更するというこのアプローチを使用しているので、私が見逃している理由があるに違いありません。私が興味を持っているのは、次のとおりです。

  1. カーネルモジュールを作成する代わりに、なぜLinuxカーネルを変更するのですか?
  2. 新しいカーネルを実行する必要があるが、ベンダーからのサポートが得られない場合はどうすればよいですか(デバイスドライバーは新しいバージョンのカーネルで動作するはずです...)
4

この質問には多くの仮定があります。

ここにいくつかの理由があります。

カーネルインターフェイスはnot安定しているため、あるバージョンのモジュールが別のバージョンにコンパイルされない場合があります。

カーネルが必要な機能を公開していない可能性があります。

カーネルは必要な機能を公開する場合がありますが、許容できる方法ではありません。たとえば、モジュールに特定のライセンスが必要です。

コードを書いている人々は、この方法でコードを書く方が速いことに気づきました。

新しいカーネルが必要な場合のオプションについて。

  1. すでにコードを移植している他の誰かを見つける
  2. 自分で移植する
  3. それを移植するために他の誰かにお金を払ってください(お金、ビール、お世辞と好奇心がうまくいくかもしれません)。
3
icarus