目标与目标模式不匹配

Posted

技术标签:

【中文标题】目标与目标模式不匹配【英文标题】:target doesn't match the target pattern 【发布时间】:2020-07-12 22:21:32 【问题描述】:

我正在编译(和链接)我的 Linux 驱动程序代码,并在模块链接时收到以下错误。我试图检查我的 Makefile 是否有任何潜在的错误(制表符、空格等)。但是,它几乎用于我的其他内核模块编程并且工作正常。任何类型的poi

模块源代码:

生成文件:

obj-m += static_waitqueue_driver.c

KDIR = /lib/modules/$(shell uname -r)/build

全部: 制作 -C $(KDIR) M=$(shell pwd) 模块

干净: 使 -C $(KDIR) M=$(shell pwd) 干净

错误:

用户:sudhanshu 主机:UbuntuVirtualBox 日期:Wed Apr 01 时间:13:23:36 24 ~/tmp/01_linux_learning/10_wait_queue $ make make -C /lib/modules/5.3.0-28-generic/build M=/home/sudhanshu/tmp/01_linux_learning/10_wait_queue 模块make[1]: 进入目录'/usr/src/linux-headers-5.3.0-28-generic' 构建模块,第 2 阶段。scripts/Makefile.modpost:113: target '/home/sudhanshu/tmp/01_linux_learning/10_wait_queue/static_waitqueue_driver.c' 与目标模式脚本/Makefile.modpost:114 不匹配: 警告:覆盖目标的配方 '/home/sudhanshu/tmp/01_linux_learning/10_wait_queue/static_waitqueue_driver.c' 脚本/Makefile.modpost:101:警告:忽略目标的旧配方 '/home/sudhanshu/tmp/01_linux_learning/10_wait_queue/static_waitqueue_driver.c' 脚本/Makefile.modpost:128:目标 '/home/sudhanshu/tmp/01_linux_learning/10_wait_queue/static_waitqueue_driver.c' 与目标模式脚本/Makefile.modpost:129 不匹配: 警告:覆盖目标的配方 '/home/sudhanshu/tmp/01_linux_learning/10_wait_queue/static_waitqueue_driver.c' 脚本/Makefile.modpost:114:警告:忽略目标的旧配方 '/home/sudhanshu/tmp/01_linux_learning/10_wait_queue/static_waitqueue_driver.c' MODPOST 1 模块 LD [M] /home/sudhanshu/tmp/01_linux_learning/10_wait_queue/static_waitqueue_driver.c ld:没有输入文件脚本/Makefile.modpost:129:目标配方 '/home/sudhanshu/tmp/01_linux_learning/10_wait_queue/static_waitqueue_driver.c' 制造失败 [2]: * [/home/sudhanshu/tmp/01_linux_learning/10_wait_queue/static_waitqueue_driver.c] 错误 1 ​​Makefile:1658: 目标“模块”的配方失败 make[1]: * [模块] 错误 2 make[1]: 离开目录 '/usr/src/linux-headers-5.3.0-28-generic' Makefile:6: 配方 目标 'all' 失败 make: *** [all] 错误 2

【问题讨论】:

【参考方案1】:

将此行更改为:

obj-m += static_waitqueue_driver.c

收件人:

obj-m += static_waitqueue_driver.o

【讨论】:

【参考方案2】:

我修复了这个错误。我觉得 Makefile 中有一些不可见的字符或缺失的“\n(newline char)”导致了问题。

但是当我创建一个新文件并手动输入(之前我是复制粘贴)时,一切正常。

解决方案:确保您的 makefile 中没有任何特殊(不可见)字符。

最新的 Makefile(从控制台复制粘贴):

1 obj-m += static_waitqueue_driver.o 2 KDIR = /lib/modules/$(shell uname -r)/build 3全部: 4 make -C $(KDIR) M=$(shell pwd) 模块 5 清洁: 6 使 -C $(KDIR) M=$(shell pwd) 干净

【讨论】:

以上是关于目标与目标模式不匹配的主要内容,如果未能解决你的问题,请参考以下文章

模式匹配算法

串的模式匹配

对象与目标类型不匹配

C# DllImport“调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配 ”

对象与目标类型不匹配

Cloudkit:“提供的 ZoneId 与目标区域不匹配”