Makefile 内核驱动程序外部模块未完全构建
我正在为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”模块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位上进行交叉编译 不
你知道是什么让这个过程以“.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"