Kernel-Modules

如何應用更新檔?

  • May 2, 2015

我需要應用以下更新檔,並且我不想弄亂我到目前為止所擁有的東西。下面我把我在網上找到的完整內容貼出來了,這是有人對和我類似的問題的回答。

在 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應用它們,但我猜您不是。

引用自:https://unix.stackexchange.com/questions/199868