私のLinuxカーネルはパッチされていますか?

私のLinuxカーネルはパッチされていますか?

する予定です。パッチのインストール名前付きファイルの場合ワイヤレス互換私のWiFiチャンネルの問題を解決するには(存在しない-1チャンネルをロックします)Ubuntu Linux v12.04そしてカリLinux v1.0.9

しかし、まず、今回のパッチが正しいかどうかを知りたいです。すでにインストールされている(すでに持っているものをなぜ設置するのですか?)

私はいくつかの調査をしましたが、私のパッチがすでにあるかどうかを知る方法やインストールされたパッチを一覧表示する一般的な方法が見つかりませんでした。もしあるかもしれません。可能あるいは、Linuxを実行してそのような情報を取得しないでください。

どんなアイデアがありますか?

ベストアンサー1

私のLinuxカーネルはパッチされていますか?

パッチを適用するのに十分なLinuxに慣れている場合(質問の言葉のように)、パッチがすでにデフォルトのカーネルにあることを確認するのは比較的簡単です。ソースコードだけを確認してください。

ソースを使用して、ルーク!

以下は、質問者が要求したUbuntuを含むDebian GNU / Linuxから派生したすべてのディストリビューションに適用する必要があります。

apt source linux

これにより、Linuxソースコードがダウンロードされ、コンパイルされたディストリビューションとまったく同じ状態にパッチされます。 linux-xyzディレクトリには、パッチに記載されているファイルが含まれています。行番号を見て、マイナス記号のある行がなく、プラス記号のある行があることを確認してください。それはすべてです。

より詳細な答え

パッチは次のテキストファイルです。

Signed-off-by: Alexey Brodkin <[email protected]>
---
 drivers/usb/core/urb.c | 5 -----
 1 file changed, 5 deletions(-)

--- a/drivers/usb/core/urb.c
+++ b/drivers/usb/core/urb.c
@@ -321,9 +321,6 @@ EXPORT_SYMBOL_GPL(usb_unanchor_urb);
  */
 int usb_submit_urb(struct urb *urb, gfp_t mem_flags)
 {
-   static int          pipetypes[4] = {
-       PIPE_CONTROL, PIPE_ISOCHRONOUS, PIPE_BULK, PIPE_INTERRUPT
-   };
    int             xfertype, max;
    struct usb_device       *dev;
    struct usb_host_endpoint    *ep;
@@ -441,11 +438,6 @@ int usb_submit_urb(struct urb *urb, gfp_
     * cause problems in HCDs if they get it wrong.
     */

-   /* Check that the pipe's type matches the endpoint's type */
-   if (usb_pipetype(urb->pipe) != pipetypes[xfertype])
-       dev_WARN(&dev->dev, "BOGUS urb xfer, pipe %x != type %x\n",
-           usb_pipetype(urb->pipe), pipetypes[xfertype]);
-
    /* Check against a simple/standard policy */
    allowed = (URB_NO_TRANSFER_DMA_MAP | URB_NO_INTERRUPT | URB_DIR_MASK |
            URB_FREE_BUFFER);

一般に、人々はpatchこのプログラムを使用してコンパイルする前にソースコードにパッチファイルを適用しますが、この問題の場合は問題を引き起こす価値はありません。パッチファイルをすばやく参照し、上部でファイル名と行番号を確認してから、テキストエディタ(この場合emacs +321 drivers/usb/core/urb.c)を開くことができます。一目でわかります。 (マイナス記号は削除する行を示し、プラス記号は追加する行を示します。)

しかし、たぶん走るのは良い考えかもしれません。patch

一方、Linuxを再コンパイルする予定であれば、ディストリビューションのデフォルトカーネルで始まるのは悪くありません。この場合、実行を試みない理由はありませんpatch。プログラムはパッチが適用されたかどうかを認識し、オペレータにパッチをキャンセルするかどうかを尋ねるのに十分スマートです。

パッチの実行例(以前はパッチされていません)

以下は、デフォルトのカーネルにないパッチの例です。

$ patch -p1 < foo.patch
patching file drivers/usb/core/urb.c
Hunk #1 succeeded at 323 (offset 2 lines).
Hunk #2 succeeded at 440 (offset 2 lines).

成功すると、ディストリビューションのデフォルト設定はパッチされず、再コンパイルする必要があります。幸いなことに、現在パッチが適用されているLinuxソースコードが記載されています。

パッチの実行例(以前にパッチが適用された)

ディストリビューションのデフォルトカーネルがパッチされている場合、状況は次のとおりです。

$ patch -p1 < foo.patch
patching file drivers/usb/core/urb.c
Reversed (or previously applied) patch detected!  Assume -R? [n] 
Apply anyway? [n] 
Skipping patch.
2 out of 2 hunks ignored -- saving rejects to file drivers/usb/core/urb.c.rej

「反転または以前に適用」とは、デフォルトのカーネルがすでにパッチされているため、他の操作を実行する必要がないことを意味します。


脚注1悪い悪戯をしてすみません。しかし、私を非難しないでください。これは私がずっと前にUNIXの専門家から賢く学んだ励ましです。彼らはソースがあなたと一緒にいるとき、あなたはどんな独占プロバイダが想像していたよりも強力になると言います。

おすすめ記事