Makefile 内核驱动程序外部模块未完全构建

Makefile 内核驱动程序外部模块未完全构建,makefile,kernel-module,Makefile,Kernel Module,我正在为android姜饼内核添加一个外部驱动程序模块(工作原理类似于Linux)。我以前做过,但这次我遇到了一个问题。我遵循O'Reilly“Linux设备驱动程序第三版”中的配方,即: 在本地Makefile中,添加以下语句: 在人类语言中,它意味着从GobiUSBNet.c+QMIDevice.c+QMI.c为我构建一个GobiNet.ko 这适用于在构建整个内核时调用makefile的情况。我正在为ARM-EABI系统(Cortex-A8)在Ubuntu x86-64位上进行交叉编译 不

我正在为android姜饼内核添加一个外部驱动程序模块(工作原理类似于Linux)。我以前做过,但这次我遇到了一个问题。我遵循O'Reilly“Linux设备驱动程序第三版”中的配方,即:

在本地Makefile中,添加以下语句:

在人类语言中,它意味着从GobiUSBNet.c+QMIDevice.c+QMI.c为我构建一个GobiNet.ko

这适用于在构建整个内核时调用makefile的情况。我正在为ARM-EABI系统(Cortex-A8)在Ubuntu x86-64位上进行交叉编译

不知何故,构建系统理解我想要什么,因为它在编译时说:

它还生成典型的“GobiNet.mod.c”和“GobiNet.o”,这是在您希望驱动程序作为模块时生成的,但它没有完成我所期望的“GobiNet.ko”。我在home目录中运行了一个“find-name*.ko”,而“GobiNet.ko”则无处可寻

我还查看了WEB和kernel/documentation/kbuild/*.txt。有三种方法可以做到这一点。我选择了上面描述的一个,因为所有环境变量都在顶级构建脚本中设置,我不编译本机,而是交叉编译。无论如何,内核树中的另一个“.ko”是生成的,因此构建脚本应该适合生成“.ko”模块


你知道是什么让这个过程以“.ko”文件开始而不是结束吗?

我找到了解决方案。我真的误解了错误消息以及“.ko”模块如何与内核交互。外部模块在编译/链接时而不是在运行时解析外部(至少部分)。这就是我得到4个“错误”的原因

也就是说,我的“GobiNet”正在寻找内核设置中不存在的外部符号。几个快速的greps让我找到了它所需要的“drivers/net/usb/usbnet.c”。这需要在“.CONFIG”文件中设置CONFIG_USBNET=y(通过“make xconfig”设置)。希望它能帮助别人

编辑:回答关于“几个快速greps”的问题。我的意思是搜索所有包含丢失名称的源文件。它会告诉我是什么文件定义了这个符号。然后,我可以找到应该设置为“y”的变量以将其包含在编译中。以下是一个例子:

grep -r --include="*.c" "usbnet_probe"

您可以在终端中从要递归搜索的文件夹(-r选项)执行该操作。grep对于在大量文件中查找文本非常有用。我经常记不起具体的搜索结果,但快速的谷歌搜索会让你知道如何执行一些非常棘手的搜索,你从来没有想过会这么容易完成

我有一些错误:aml_unregister_fe_drv ite9133_fe.ko unfinedc您能解释一下“几个快速grep”是什么意思吗?你是否遵循了一个系统,或者你是如何决定去哪里搜索的?
/home/sylvain/Projects/android_gingerbread_realv210_ver_1_0/kernel  
   CHK     include/linux/version.h  
   CHK     include/generated/utsrelease.h  
make[1]: `include/generated/mach-types.h' is up to date.  
   CALL    scripts/checksyscalls.sh  
   CHK     include/generated/compile.h  
   LD      drivers/cell/OptionGobiNet/built-in.o  
   CC [M]  drivers/cell/OptionGobiNet/GobiUSBNet.o  
   CC [M]  drivers/cell/OptionGobiNet/QMIDevice.o  
   CC [M]  drivers/cell/OptionGobiNet/QMI.o  
   LD [M]  drivers/cell/OptionGobiNet/GobiNet.o  
   Kernel: arch/arm/boot/Image is ready  
   SHIPPED arch/arm/boot/compressed/lib1funcs.S  
   AS      arch/arm/boot/compressed/lib1funcs.o  
   LD      arch/arm/boot/compressed/vmlinux  
   OBJCOPY arch/arm/boot/zImage  
   Kernel: arch/arm/boot/zImage is ready       
   Building modules, stage 2.  
   MODPOST 5 modules  
ERROR: "usbnet_suspend" [drivers/cell/OptionGobiNet/GobiNet.ko] undefined!  
ERROR: "usbnet_resume" [drivers/cell/OptionGobiNet/GobiNet.ko] undefined!  
ERROR: "usbnet_disconnect" [drivers/cell/OptionGobiNet/GobiNet.ko] undefined!  
ERROR: "usbnet_probe" [drivers/cell/OptionGobiNet/GobiNet.ko] undefined!  
make[1]: *** [__modpost] Error 1  
make: *** [modules] Error 2   
grep -r --include="*.c" "usbnet_probe"