カーネルにパッチを適用する正しい方法は何ですか?

カーネルにパッチを適用する正しい方法は何ですか?

私は以下の指示に従っていますここサーバーをセットアップします。マシンにダウンロードしたパッチを適用する必要があると書かれています。私の質問は、記事には次のコマンドを使用するように書かれていることです。

/usr/src/linux # patch -p1 < file.diff //note I replace file.diff w/ routes-2.6.36.16.diff

結果は次のようになります:

-bash: /usr/src/linux: No such file or directory

これを実際の Linux カーネル バージョン/ディレクトリに置き換える必要があると想定します/linux #。次のコマンドを使用してこれを試しました。

/usr/src/linux-headers-2.6.35.22 patch -p1 < file.diff

同じ結果が返されます。/usr/src の内容を表示すると、ディレクトリが 2 つしかないlinux-headers-2.6.35.22ため、linux-headers-2.6.35.22-generic-paeカーネルにパッチを適用する正しい方法についてのガイダンスが必要です。

編集

を実行すると、/usr/src/linux-headers-2.6.35.22/ patch -p1 file.diffという結果になります-bash: /usr/src/linux-headers-2.6.35.22: is a directory。ここでパッチを適用する必要がある特定のファイルを見つける方法を知る必要があります...

答え1

ソースをダウンロードする必要があります。apt-src経由でダウンロードすることもできますが、私は(個人的には)最新のものを以下から入手します。カーネル.orgそれを解凍し、パッチを当てます(デスクトップのようなローカルパスを使用するだけで、/usr/srcに隠す必要はありません!)そして、「昔ながらの方法」コンパイルするための手順。

一部のパッチはカーネルの特定のバージョン(ポイント リリースを含む)のみを対象としていることに注意してください。そのため、パッチをコンパイルするのに 20 ~ 30 分を費やす前に、パッチがソース バージョンで動作することを確認してください。

しかし、あなたの具体的な問題は、パッチを適用するディレクトリにいる必要があることです。あなたの場合:

cd /usr/src/linux-headers-2.6.35.22/
patch -p1 < /path/to/file.diff

当然のことながら、パッチへのパスを変更します (または同じディレクトリに貼り付けます)。ソース ファイルが root によって所有されている場合は、sudoパッチ コマンドの前に を付ける、または実行して、sudo suこれを行うときに root になります。

答え2

フラストレーションを避けるために、一般的には Ubuntu の方法でそのようなことを実行する必要があります。公式パッケージを使用した完全な手順は、こちらで確認できます:

https://help.ubuntu.com/community/Kernel/コンパイル

カスタム カーネルを起動して実行するための依存関係のリストとステップバイステップのコマンドを提供します。

この手順に従うと、カスタム カーネルを含むアンインストール不可能なパッケージが作成されます。つまり、将来必要に応じて公式カーネルに戻すことができるようになります。

答え3

あなたが従っている手順では、コマンド ライン プロンプトが表示されています/usr/src/linux #が、これはコマンドの一部として入力するものではありません。パッチを適用するコマンドは から始まりpatch、そこから続きます。

関連情報