use*_*293 2 make patch kernel-modules
我需要应用以下补丁,而且我不想弄乱我目前拥有的东西。下面我把我在网上找到的完整内容贴出来,这是某人对与我类似的问题的回答。
在 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
Run Code Online (Sandbox Code Playgroud)
我在网上找到了上面的代码作为我遇到的问题的解决方案。我正在尝试为我自己的内核构建模块。我的问题是如何应用上述补丁?我想我必须在一个我可以看到的目录中/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
Run Code Online (Sandbox Code Playgroud)
@faheem - 谢谢。我仍然不清楚要将此更改应用于哪些文件。有人可以解释一下修复程序在做什么吗?它正在更新哪些文件以及如何更新?我对补丁的理解是将其添加到文件中。它在更改前后有几行。程序匹配目标文件中的字符串,然后应用更改。我说上述修复更改了 kconfig 和 scsi_scan.c 是否正确?
使用命令应用补丁1patch
。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
Run Code Online (Sandbox Code Playgroud)
那ls
在那里只是为了告诉你,你应该期待什么正确的目录中的样子。其中一些文件仅在构建后才存在(例如 vmlinux),因此如果它们丢失,请不要担心。该-p1
装置忽略a/
并b/
在贴剂中的路径名称的前面(-p0
不会忽略任何的它,-p2
将忽略a/drivers
等)
这有望回答您的问题,但除非您实际构建了没有可加载模块的内核(如果您正在这样做,您还没有make modules
),它不太可能修复您看到的错误。
脚注
1git
如果您将其用于版本控制,您也可以应用它们,但我猜您不是。