Linuxカーネルパッチ

Linuxカーネルパッチ

私はPeter Jay Salzmanの「Linux Kernel Moduleのプログラミング」を読んでいます。

sys_call_table は 2.6.x カーネルにエクスポートされなくなりました。この危険なモジュールを本当に試したい場合は、提供されているパッチを現在のカーネルに適用して再コンパイルする必要があります。

「パッチ」が何を意味するのか、そしてカーネルを再コンパイルすることが何を意味するのかを説明できる人はいますか?

ベストアンサー1

「パッチ」は、他のファイルへの変更を記述するファイルです(ファイルはソースコードを含む何でも構いません)。パッチを作成して使用する最も簡単な方法の1つは、diffおよびを使用することですpatch

次のファイルに単純なhello worldプログラムがあるとしますhello1.c

#include <stdio.h>

int main(void)
{
  printf("Hello world!\n");
  return 0;
}

それでは、文字列を"Hello world!\n"次に変更し"Hi world!\n"て新しいプログラムを呼び出してみましょうhello2.c

#include <stdio.h>

int main(void)
{
  printf("Hi world!\n");
  return 0;
}

次に、端末で次のコマンドを実行します。

diff -u hello1.c hello2.c > hello-patch

出力パッチファイルの内容はcat hello-patch次のとおりです。

--- hello1.c    2019-03-18 13:29:35.897546888 -0500
+++ hello2.c    2019-03-18 13:30:02.866456737 -0500
@@ -2,6 +2,6 @@

 int main(void)
 {
-  printf("Hello world!\n");
+  printf("Hi world!\n");
   return 0;
 }

この記事では、hello1.cとの間の変更について説明しますhello2.c

hello1.cそれでは、ソースコードを友達に配布したと想像してください。このhello-patchパッチファイルは、友達がpatchコマンドを使用して変更できますhello1.c。パッチと同じディレクトリにあるhello2.c場合、このコマンドは次のようになります。hello1.c

patch < hello-patch

その後、「パッチを適用hello1.c」します。完了すると、hello1.c更新が行われ、今hello2.c

だからパッチはただファイル(またはファイルセット)の変更リスト、これらのパッチを使用すると、誰かがパッチを適用してファイルを選択的に更新できます。

diffpatch小さなパッチではコマンドがうまく機能します。大規模で複雑な作業には工業用ツールが必要です。 Linuxのgit使い方ヘルプgitシステムはとても良いです。たとえば、git help -aすべてのgitヘルプトピックを一覧表示し、git help format-patch「電子メールを送信するためのパッチの準備」方法について詳しく説明します。

Linux 開発は電子メールで行われ、次のアドレスで Linux 開発者から送信された電子メールアーカイブを表示できます。lmll.orgkernelnewbies.orgLinuxカーネル開発を学ぶための良い出発点です。あなたが引用した本は2009年に出版されたように見えるので、ここに含まれる技術的な詳細のいくつかは最新のものではないかもしれません。

ここで「再コンパイル」とは、単にソースにパッチを適用して再コンパイルすることを意味します。これはgcc hello1.c -o hello、ソースファイルを実行可能コードにコンパイルするなどのタスクを実行するときと同じです。このガイドでは、Linuxの構築について説明します。この資料では、Debian ディストリビューションで使用できるビルド プロセスといくつかの手順について説明します。

Linux開発者Greg Kroah-Hartmanによる2016年の講演では、Linux開発の概要を提供します。

おすすめ記事