パッチを適用する方法は?

パッチを適用する方法は?

次のパッチを適用する必要があり、これまでのパッチを台無しにしたくありません。以下は、オンラインで見つけたコンテンツ全体を公開しています。これは私に似た質問に対する誰かの答えです。

2007年3月20日火曜日14:32 -0500で、James Bottomleyは次のように書きました。

MODULEは"n"に設定されていますか?何らかの理由でシンボルのエクスポートが保護されているようです #ifdef MODULE...その他は説明できません。

実際、それは間違いです...モジュラー構成はモジュールではなくモジュールです。これを試してみることはできますか?

---
diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
index 0949145..a67f315 100644
--- a/drivers/scsi/scsi_scan.c
+++ b/drivers/scsi/scsi_scan.c
@@ -181,10 +181,8 @@ int scsi_complete_async_scans(void)
        return 0;
 }

-#ifdef MODULE
 /* Only exported for the benefit of scsi_wait_scan */
 EXPORT_SYMBOL_GPL(scsi_complete_async_scans);
-#endif

 /**
  * scsi_unlock_floptical - unlock device via a special MODE SENSE command

私が経験している問題の解決策として、上記のコードをオンラインで見つけました。私は自分のカーネル用のモジュールを作成しようとしています。私の質問は上記のパッチを適用する方法です。私が見ることができるディレクトリになければならないと思います/drivers。次は何をすべきですか?

カーネルと関連デバイスドライバを構築するために「make module」を実行したときに発生するエラーは次のとおりです。

sansari@ubuntu:~/WORKING_DIRECTORY$ make modules
scripts/kconfig/conf --silentoldconfig Kconfig
sound/soc/codecs/audience/Kconfig:40:warning: type of 'SND_SOC_ES_SLIM' redefined from 'boolean' to 'tristate'
sound/soc/codecs/audience/Kconfig:43:warning: type of 'SND_SOC_ES_I2C' redefined from 'boolean' to 'tristate'
sound/soc/codecs/audience/Kconfig:44:warning: choice value used outside its choice group
sound/soc/codecs/audience/Kconfig:41:warning: choice value used outside its choice group
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
make[1]: `include/generated/mach-types.h' is up to date.
  CC      arch/arm/kernel/asm-offsets.s
  GEN     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
  CC [M]  drivers/scsi/scsi_wait_scan.o
  Building modules, stage 2.
  MODPOST 1 modules
ERROR: "__aeabi_unwind_cpp_pr0" [drivers/scsi/scsi_wait_scan.ko] undefined!
ERROR: "__aeabi_unwind_cpp_pr1" [drivers/scsi/scsi_wait_scan.ko] undefined!
ERROR: "scsi_complete_async_scans" [drivers/scsi/scsi_wait_scan.ko] undefined!
ERROR: "wait_for_device_probe" [drivers/scsi/scsi_wait_scan.ko] undefined!
make[1]: *** [__modpost] Error 1
make: *** [modules] Error 2

@faheem - ありがとうございます。この変更がどのファイルに適用されるかはまだわかりません。誰かが修正作業が何であるかを説明できますか?どのファイルがどのように更新されますか?パッチの私の理解は、それがファイルに追加されるということです。変更前後に複数行があります。プログラムはターゲットファイルの文字列を一致させ、変更を適用します。上記の修正がkconfigとscsi_scan.cを変更すると言うのは正しいですか?

答え1

コマンドを使用してパッチ1をpatch適用します。探しているディレクトリは、drivers/カーネルソースツリーの最上位レベルにあります。次のように適用します。

$ cd ~/linux
$ ls
arch           firmware  lib              README          usr
block          fs        MAINTAINERS      REPORTING-BUGS  virt
COPYING        include   Makefile         samples         vmlinux
CREDITS        init      mm               scripts         vmlinux-gdb.py
crypto         ipc       modules.builtin  security        vmlinux.o
debian         Kbuild    modules.order    sound
Documentation  Kconfig   Module.symvers   System.map
drivers        kernel    net              tools
$ patch -p1 < ~/path/patch-file.diff

これはls正しいディレクトリがどのように見えるかを示すためのものです。これらのファイルの一部はビルド後にのみ存在するため(vmlinuxなど)、欠落しても心配しないでください。-p1パッチでパス名の前の合計を無視する方法a/(何も無視せずに無視するなど)b/-p0-p2a/drivers

これがあなたの質問に対する答えになることを願っています。しかし、実際にロード可能なモジュールなしでカーネルを構築しない限り(そうしている場合はそうしなかった場合make modules)、見ているエラーを修正する可能性はほとんどありません。


脚注
1バージョン管理に使用している場合はgit適用できますが、そうではありません。

関連情報