如何應用更新檔?
我需要應用以下更新檔,並且我不想弄亂我到目前為止所擁有的東西。下面我把我在網上找到的完整內容貼出來了,這是有人對和我類似的問題的回答。
在 2007 年 3 月 20 日星期二 14:32 -0500 時,James Bottomley 寫道:
> > MODULE 是否設置為“n”?看起來符號導出 >
#ifdef MODULE
出於某種原因受到保護……除此之外,我無法解釋這一點。 > > >事實上,這就是錯誤……模組化配置是 MODULES 而不是 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 modules”來建構我的核心和相關設備驅動程序時遇到的錯誤:
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 。
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/
and的方法(不會忽略任何一個,會忽略,等等)b/``-p0``-p2``a/drivers
這有望回答您的問題,但除非您實際上建構了不帶可載入模組的核心(如果您正在這樣做,您還沒有
make modules
),它不太可能修復您看到的錯誤。腳註
1如果您將其用於版本控制,您也可以
git
應用它們,但我猜您不是。