次のパッチを適用する必要があり、これまでのパッチを台無しにしたくありません。以下は、オンラインで見つけたコンテンツ全体を公開しています。これは私に似た質問に対する誰かの答えです。
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
-p2
a/drivers
これがあなたの質問に対する答えになることを願っています。しかし、実際にロード可能なモジュールなしでカーネルを構築しない限り(そうしている場合はそうしなかった場合make modules
)、見ているエラーを修正する可能性はほとんどありません。
脚注
1バージョン管理に使用している場合はgit
適用できますが、そうではありません。