多个ko模块引用同一内核文件里的 EXPORT 函数出现 undefined 错误

时间:2021-09-15 23:34:29
大哥们好!
        今天编译驱动遇到如下问题,我简要说明如下:

        A.c 编译进内核 A.o
        B.c 和 C.c 都编译成模块 B.ko 和 C.ko

        B需要引用A的函数 a(), b1(),b2();
        C需要引用A的函数 a(),c1(),c2();

        当B或C只有一个编译成ko时(另外一个编译进内核),都可以编译通过;
        当B和C都编译成ko时,上述需引用A的函数全部提示undefined,编译失败。

       请大哥们指导,谢谢!!!

16 个解决方案

#1


两个模块一起编译试试, 也就是共用一个Makefile.

Makefile里:

obj-m += B.o
obj-m += C.o

...

#2


引用 1 楼 jklinux 的回复:
两个模块一起编译试试, 也就是共用一个Makefile.

Makefile里:

obj-m += B.o
obj-m += C.o

...
您好!目前三个文件都是在同一个Makefile里面的

#3


具体错误贴一下咯……

#4


引用 2 楼 u014485786 的回复:
Quote: 引用 1 楼 jklinux 的回复:

两个模块一起编译试试, 也就是共用一个Makefile.

Makefile里:

obj-m += B.o
obj-m += C.o

...
您好!目前三个文件都是在同一个Makefile里面的


这很神奇啊,具体怎样?

#5


引用 4 楼 jklinux 的回复:
Quote: 引用 2 楼 u014485786 的回复:

Quote: 引用 1 楼 jklinux 的回复:

两个模块一起编译试试, 也就是共用一个Makefile.

Makefile里:

obj-m += B.o
obj-m += C.o

...
您好!目前三个文件都是在同一个Makefile里面的


这很神奇啊,具体怎样?
错误类似:
ERROR: "XXXXXXX(函数名)" [drivers/xxxxxx/B.ko] undefined!
ERROR: "XXXXXXX(函数名)" [drivers/xxxxxx/B.ko] undefined!
ERROR: "XXXXXXX(函数名)" [drivers/xxxxxx/C.ko] undefined!

没有其他提示了

#6


代码里没extern声明函数吗?

确定是错误吗?,有警告是正常的

#7


引用 6 楼 jklinux 的回复:
代码里没extern声明函数吗?

确定是错误吗?,有警告是正常的
是错误来的,编译失败
A文件里的函数均已EXPORT,B,C文件需引用A的文件均已extern声明
而且单独编B或C成ko是可以的,就是一起变成ko不行

#8


makefile贴一下咯

#9


引用 8 楼 jklinux 的回复:
makefile贴一下咯
#
# Makefile for USB Host Controller Drivers
#

ccflags-$(CONFIG_USB_DEBUG) := -DDEBUG

isp1760-y := isp1760-hcd.o isp1760-if.o

fhci-y := fhci-hcd.o fhci-hub.o fhci-q.o
fhci-y += fhci-mem.o fhci-tds.o fhci-sched.o

fhci-$(CONFIG_FHCI_DEBUG) += fhci-dbg.o

xhci-hcd-y := xhci.o xhci-mem.o
xhci-hcd-y += xhci-ring.o xhci-hub.o xhci-dbg.o
xhci-hcd-$(CONFIG_PCI) += xhci-pci.o

ifneq ($(CONFIG_USB_XHCI_PLATFORM), )
xhci-hcd-y += xhci-plat.o
endif

obj-$(CONFIG_USB_WHCI_HCD) += whci/

obj-$(CONFIG_PCI) += pci-quirks.o

obj-$(CONFIG_USB_EHCI_HCD) += ehci-hcd.o
obj-$(CONFIG_USB_EHCI_PCI) += ehci-pci.o
obj-$(CONFIG_USB_EHCI_HCD_PLATFORM) += ehci-platform.o
obj-$(CONFIG_USB_EHCI_MXC) += ehci-mxc.o
obj-$(CONFIG_USB_EHCI_HCD_OMAP) += ehci-omap.o
obj-$(CONFIG_USB_EHCI_HCD_ORION) += ehci-orion.o
obj-$(CONFIG_USB_EHCI_HCD_SPEAR) += ehci-spear.o
obj-$(CONFIG_USB_EHCI_S5P) += ehci-s5p.o
obj-$(CONFIG_USB_EHCI_HCD_SYNOPSYS) += ehci-h20ahb.o
obj-$(CONFIG_USB_EHCI_HCD_AT91) += ehci-atmel.o
obj-$(CONFIG_USB_EHCI_MSM) += ehci-msm.o

obj-$(CONFIG_USB_OXU210HP_HCD) += oxu210hp-hcd.o
obj-$(CONFIG_USB_ISP116X_HCD) += isp116x-hcd.o
obj-$(CONFIG_USB_ISP1362_HCD) += isp1362-hcd.o
obj-$(CONFIG_USB_OHCI_HCD) += ohci-hcd.o
obj-$(CONFIG_USB_UHCI_HCD) += uhci-hcd.o
obj-$(CONFIG_USB_FHCI_HCD) += fhci.o
obj-$(CONFIG_USB_XHCI_HCD) += xhci-hcd.o
obj-$(CONFIG_USB_SL811_HCD) += sl811-hcd.o
obj-$(CONFIG_USB_SL811_CS) += sl811_cs.o
obj-$(CONFIG_USB_U132_HCD) += u132-hcd.o
obj-$(CONFIG_USB_R8A66597_HCD) += r8a66597-hcd.o
obj-$(CONFIG_USB_ISP1760_HCD) += isp1760.o
obj-$(CONFIG_USB_HWA_HCD) += hwa-hc.o
obj-$(CONFIG_USB_IMX21_HCD) += imx21-hcd.o
obj-$(CONFIG_USB_FSL_MPH_DR_OF) += fsl-mph-dr-of.o
obj-$(CONFIG_USB_OCTEON2_COMMON) += octeon2-common.o
obj-$(CONFIG_USB_HCD_BCMA) += bcma-hcd.o
obj-$(CONFIG_USB_HCD_SSB) += ssb-hcd.o
obj-$(CONFIG_USB_TEST) += usb_test.o

标红的是要编译成ko的B跟C,最后一个标蓝的是公共的A

#10


跟makefile有关系,贴出来看看吧。

#11


引用 9 楼 u014485786 的回复:
Quote: 引用 8 楼 jklinux 的回复:

makefile贴一下咯
#
# Makefile for USB Host Controller Drivers
#

ccflags-$(CONFIG_USB_DEBUG) := -DDEBUG

isp1760-y := isp1760-hcd.o isp1760-if.o

fhci-y := fhci-hcd.o fhci-hub.o fhci-q.o
fhci-y += fhci-mem.o fhci-tds.o fhci-sched.o

fhci-$(CONFIG_FHCI_DEBUG) += fhci-dbg.o

xhci-hcd-y := xhci.o xhci-mem.o
xhci-hcd-y += xhci-ring.o xhci-hub.o xhci-dbg.o
xhci-hcd-$(CONFIG_PCI) += xhci-pci.o

ifneq ($(CONFIG_USB_XHCI_PLATFORM), )
xhci-hcd-y += xhci-plat.o
endif

obj-$(CONFIG_USB_WHCI_HCD) += whci/

obj-$(CONFIG_PCI) += pci-quirks.o

obj-$(CONFIG_USB_EHCI_HCD) += ehci-hcd.o
obj-$(CONFIG_USB_EHCI_PCI) += ehci-pci.o
obj-$(CONFIG_USB_EHCI_HCD_PLATFORM) += ehci-platform.o
obj-$(CONFIG_USB_EHCI_MXC) += ehci-mxc.o
obj-$(CONFIG_USB_EHCI_HCD_OMAP) += ehci-omap.o
obj-$(CONFIG_USB_EHCI_HCD_ORION) += ehci-orion.o
obj-$(CONFIG_USB_EHCI_HCD_SPEAR) += ehci-spear.o
obj-$(CONFIG_USB_EHCI_S5P) += ehci-s5p.o
obj-$(CONFIG_USB_EHCI_HCD_SYNOPSYS) += ehci-h20ahb.o
obj-$(CONFIG_USB_EHCI_HCD_AT91) += ehci-atmel.o
obj-$(CONFIG_USB_EHCI_MSM) += ehci-msm.o

obj-$(CONFIG_USB_OXU210HP_HCD) += oxu210hp-hcd.o
obj-$(CONFIG_USB_ISP116X_HCD) += isp116x-hcd.o
obj-$(CONFIG_USB_ISP1362_HCD) += isp1362-hcd.o
obj-$(CONFIG_USB_OHCI_HCD) += ohci-hcd.o
obj-$(CONFIG_USB_UHCI_HCD) += uhci-hcd.o
obj-$(CONFIG_USB_FHCI_HCD) += fhci.o
obj-$(CONFIG_USB_XHCI_HCD) += xhci-hcd.o
obj-$(CONFIG_USB_SL811_HCD) += sl811-hcd.o
obj-$(CONFIG_USB_SL811_CS) += sl811_cs.o
obj-$(CONFIG_USB_U132_HCD) += u132-hcd.o
obj-$(CONFIG_USB_R8A66597_HCD) += r8a66597-hcd.o
obj-$(CONFIG_USB_ISP1760_HCD) += isp1760.o
obj-$(CONFIG_USB_HWA_HCD) += hwa-hc.o
obj-$(CONFIG_USB_IMX21_HCD) += imx21-hcd.o
obj-$(CONFIG_USB_FSL_MPH_DR_OF) += fsl-mph-dr-of.o
obj-$(CONFIG_USB_OCTEON2_COMMON) += octeon2-common.o
obj-$(CONFIG_USB_HCD_BCMA) += bcma-hcd.o
obj-$(CONFIG_USB_HCD_SSB) += ssb-hcd.o
obj-$(CONFIG_USB_TEST) += usb_test.o

标红的是要编译成ko的B跟C,最后一个标蓝的是公共的A


我晕,这些都是比较重要的文件好不好。

ehci-hcd.o  ohci-hcd.o都是关于usb控制器的驱好,一个版本是usb2.0, usb1.1

usb_test.o是要调用usb控制器驱动接口的usb设备驱动,前面的两个驱动肯定不会用到usb_test. 只有usb_test会调用到前面的驱动。

当前面两个控制器驱动都编成模块的话,可能usb_test也需要编成模块才行

#12


引用 11 楼 jklinux 的回复:
Quote: 引用 9 楼 u014485786 的回复:

Quote: 引用 8 楼 jklinux 的回复:

makefile贴一下咯
#
# Makefile for USB Host Controller Drivers
#

ccflags-$(CONFIG_USB_DEBUG) := -DDEBUG

isp1760-y := isp1760-hcd.o isp1760-if.o

fhci-y := fhci-hcd.o fhci-hub.o fhci-q.o
fhci-y += fhci-mem.o fhci-tds.o fhci-sched.o

fhci-$(CONFIG_FHCI_DEBUG) += fhci-dbg.o

xhci-hcd-y := xhci.o xhci-mem.o
xhci-hcd-y += xhci-ring.o xhci-hub.o xhci-dbg.o
xhci-hcd-$(CONFIG_PCI) += xhci-pci.o

ifneq ($(CONFIG_USB_XHCI_PLATFORM), )
xhci-hcd-y += xhci-plat.o
endif

obj-$(CONFIG_USB_WHCI_HCD) += whci/

obj-$(CONFIG_PCI) += pci-quirks.o

obj-$(CONFIG_USB_EHCI_HCD) += ehci-hcd.o
obj-$(CONFIG_USB_EHCI_PCI) += ehci-pci.o
obj-$(CONFIG_USB_EHCI_HCD_PLATFORM) += ehci-platform.o
obj-$(CONFIG_USB_EHCI_MXC) += ehci-mxc.o
obj-$(CONFIG_USB_EHCI_HCD_OMAP) += ehci-omap.o
obj-$(CONFIG_USB_EHCI_HCD_ORION) += ehci-orion.o
obj-$(CONFIG_USB_EHCI_HCD_SPEAR) += ehci-spear.o
obj-$(CONFIG_USB_EHCI_S5P) += ehci-s5p.o
obj-$(CONFIG_USB_EHCI_HCD_SYNOPSYS) += ehci-h20ahb.o
obj-$(CONFIG_USB_EHCI_HCD_AT91) += ehci-atmel.o
obj-$(CONFIG_USB_EHCI_MSM) += ehci-msm.o

obj-$(CONFIG_USB_OXU210HP_HCD) += oxu210hp-hcd.o
obj-$(CONFIG_USB_ISP116X_HCD) += isp116x-hcd.o
obj-$(CONFIG_USB_ISP1362_HCD) += isp1362-hcd.o
obj-$(CONFIG_USB_OHCI_HCD) += ohci-hcd.o
obj-$(CONFIG_USB_UHCI_HCD) += uhci-hcd.o
obj-$(CONFIG_USB_FHCI_HCD) += fhci.o
obj-$(CONFIG_USB_XHCI_HCD) += xhci-hcd.o
obj-$(CONFIG_USB_SL811_HCD) += sl811-hcd.o
obj-$(CONFIG_USB_SL811_CS) += sl811_cs.o
obj-$(CONFIG_USB_U132_HCD) += u132-hcd.o
obj-$(CONFIG_USB_R8A66597_HCD) += r8a66597-hcd.o
obj-$(CONFIG_USB_ISP1760_HCD) += isp1760.o
obj-$(CONFIG_USB_HWA_HCD) += hwa-hc.o
obj-$(CONFIG_USB_IMX21_HCD) += imx21-hcd.o
obj-$(CONFIG_USB_FSL_MPH_DR_OF) += fsl-mph-dr-of.o
obj-$(CONFIG_USB_OCTEON2_COMMON) += octeon2-common.o
obj-$(CONFIG_USB_HCD_BCMA) += bcma-hcd.o
obj-$(CONFIG_USB_HCD_SSB) += ssb-hcd.o
obj-$(CONFIG_USB_TEST) += usb_test.o

标红的是要编译成ko的B跟C,最后一个标蓝的是公共的A


我晕,这些都是比较重要的文件好不好。

ehci-hcd.o  ohci-hcd.o都是关于usb控制器的驱好,一个版本是usb2.0, usb1.1

usb_test.o是要调用usb控制器驱动接口的usb设备驱动,前面的两个驱动肯定不会用到usb_test. 只有usb_test会调用到前面的驱动。

当前面两个控制器驱动都编成模块的话,可能usb_test也需要编成模块才行[/quote大哥,我在做测试嘛,usb我懂,我是在usb_test里面加了一些调试接口给ehci和ohci调用的,现在只是编译不过而已,暂不用考虑代码逻辑吧

#13


引用 10 楼 falloutmx 的回复:
跟makefile有关系,贴出来看看吧。

大哥您好,makefile已经贴出来了,在你的上一楼就是

#14


你这是把驱动都放在内核驱动路径下了吧?
最后执行的时候是make uImage然后再make modules的吗?

#15


引用 14 楼 falloutmx 的回复:
你这是把驱动都放在内核驱动路径下了吧?
最后执行的时候是make uImage然后再make modules的吗?

你这是把驱动都放在内核驱动路径下了吧?
是的,放到drivers/usb/host/ 目录下

最后执行的时候是make uImage然后再make modules的吗?
是的,building kernel是ok的,building modules, stage 2 就出现上述错误

#16


确实是跟 Makefile 有关系,不过是需要修改上层目录的 Makefile,也就是 driver/usb/ 目录下的Makefile:

需要加上一行(标蓝):
#
# Makefile for the kernel USB device drivers.
#

# Object files in subdirectories

obj-$(CONFIG_USB) += core/
obj-$(CONFIG_USB_SUPPORT) += phy/

obj-$(CONFIG_USB_DWC3) += dwc3/
obj-$(CONFIG_USB_DWC2) += dwc2/
obj-$(CONFIG_USB_ISP1760) += isp1760/

obj-$(CONFIG_USB_MON) += mon/

obj-$(CONFIG_USB_TEST) += host/
obj-$(CONFIG_PCI) += host/
obj-$(CONFIG_USB_EHCI_HCD) += host/
obj-$(CONFIG_USB_ISP116X_HCD) += host/
obj-$(CONFIG_USB_OHCI_HCD) += host/
obj-$(CONFIG_USB_UHCI_HCD) += host/
obj-$(CONFIG_USB_FHCI_HCD) += host/
......
......
......
谢谢各位大哥指导!

#1


两个模块一起编译试试, 也就是共用一个Makefile.

Makefile里:

obj-m += B.o
obj-m += C.o

...

#2


引用 1 楼 jklinux 的回复:
两个模块一起编译试试, 也就是共用一个Makefile.

Makefile里:

obj-m += B.o
obj-m += C.o

...
您好!目前三个文件都是在同一个Makefile里面的

#3


具体错误贴一下咯……

#4


引用 2 楼 u014485786 的回复:
Quote: 引用 1 楼 jklinux 的回复:

两个模块一起编译试试, 也就是共用一个Makefile.

Makefile里:

obj-m += B.o
obj-m += C.o

...
您好!目前三个文件都是在同一个Makefile里面的


这很神奇啊,具体怎样?

#5


引用 4 楼 jklinux 的回复:
Quote: 引用 2 楼 u014485786 的回复:

Quote: 引用 1 楼 jklinux 的回复:

两个模块一起编译试试, 也就是共用一个Makefile.

Makefile里:

obj-m += B.o
obj-m += C.o

...
您好!目前三个文件都是在同一个Makefile里面的


这很神奇啊,具体怎样?
错误类似:
ERROR: "XXXXXXX(函数名)" [drivers/xxxxxx/B.ko] undefined!
ERROR: "XXXXXXX(函数名)" [drivers/xxxxxx/B.ko] undefined!
ERROR: "XXXXXXX(函数名)" [drivers/xxxxxx/C.ko] undefined!

没有其他提示了

#6


代码里没extern声明函数吗?

确定是错误吗?,有警告是正常的

#7


引用 6 楼 jklinux 的回复:
代码里没extern声明函数吗?

确定是错误吗?,有警告是正常的
是错误来的,编译失败
A文件里的函数均已EXPORT,B,C文件需引用A的文件均已extern声明
而且单独编B或C成ko是可以的,就是一起变成ko不行

#8


makefile贴一下咯

#9


引用 8 楼 jklinux 的回复:
makefile贴一下咯
#
# Makefile for USB Host Controller Drivers
#

ccflags-$(CONFIG_USB_DEBUG) := -DDEBUG

isp1760-y := isp1760-hcd.o isp1760-if.o

fhci-y := fhci-hcd.o fhci-hub.o fhci-q.o
fhci-y += fhci-mem.o fhci-tds.o fhci-sched.o

fhci-$(CONFIG_FHCI_DEBUG) += fhci-dbg.o

xhci-hcd-y := xhci.o xhci-mem.o
xhci-hcd-y += xhci-ring.o xhci-hub.o xhci-dbg.o
xhci-hcd-$(CONFIG_PCI) += xhci-pci.o

ifneq ($(CONFIG_USB_XHCI_PLATFORM), )
xhci-hcd-y += xhci-plat.o
endif

obj-$(CONFIG_USB_WHCI_HCD) += whci/

obj-$(CONFIG_PCI) += pci-quirks.o

obj-$(CONFIG_USB_EHCI_HCD) += ehci-hcd.o
obj-$(CONFIG_USB_EHCI_PCI) += ehci-pci.o
obj-$(CONFIG_USB_EHCI_HCD_PLATFORM) += ehci-platform.o
obj-$(CONFIG_USB_EHCI_MXC) += ehci-mxc.o
obj-$(CONFIG_USB_EHCI_HCD_OMAP) += ehci-omap.o
obj-$(CONFIG_USB_EHCI_HCD_ORION) += ehci-orion.o
obj-$(CONFIG_USB_EHCI_HCD_SPEAR) += ehci-spear.o
obj-$(CONFIG_USB_EHCI_S5P) += ehci-s5p.o
obj-$(CONFIG_USB_EHCI_HCD_SYNOPSYS) += ehci-h20ahb.o
obj-$(CONFIG_USB_EHCI_HCD_AT91) += ehci-atmel.o
obj-$(CONFIG_USB_EHCI_MSM) += ehci-msm.o

obj-$(CONFIG_USB_OXU210HP_HCD) += oxu210hp-hcd.o
obj-$(CONFIG_USB_ISP116X_HCD) += isp116x-hcd.o
obj-$(CONFIG_USB_ISP1362_HCD) += isp1362-hcd.o
obj-$(CONFIG_USB_OHCI_HCD) += ohci-hcd.o
obj-$(CONFIG_USB_UHCI_HCD) += uhci-hcd.o
obj-$(CONFIG_USB_FHCI_HCD) += fhci.o
obj-$(CONFIG_USB_XHCI_HCD) += xhci-hcd.o
obj-$(CONFIG_USB_SL811_HCD) += sl811-hcd.o
obj-$(CONFIG_USB_SL811_CS) += sl811_cs.o
obj-$(CONFIG_USB_U132_HCD) += u132-hcd.o
obj-$(CONFIG_USB_R8A66597_HCD) += r8a66597-hcd.o
obj-$(CONFIG_USB_ISP1760_HCD) += isp1760.o
obj-$(CONFIG_USB_HWA_HCD) += hwa-hc.o
obj-$(CONFIG_USB_IMX21_HCD) += imx21-hcd.o
obj-$(CONFIG_USB_FSL_MPH_DR_OF) += fsl-mph-dr-of.o
obj-$(CONFIG_USB_OCTEON2_COMMON) += octeon2-common.o
obj-$(CONFIG_USB_HCD_BCMA) += bcma-hcd.o
obj-$(CONFIG_USB_HCD_SSB) += ssb-hcd.o
obj-$(CONFIG_USB_TEST) += usb_test.o

标红的是要编译成ko的B跟C,最后一个标蓝的是公共的A

#10


跟makefile有关系,贴出来看看吧。

#11


引用 9 楼 u014485786 的回复:
Quote: 引用 8 楼 jklinux 的回复:

makefile贴一下咯
#
# Makefile for USB Host Controller Drivers
#

ccflags-$(CONFIG_USB_DEBUG) := -DDEBUG

isp1760-y := isp1760-hcd.o isp1760-if.o

fhci-y := fhci-hcd.o fhci-hub.o fhci-q.o
fhci-y += fhci-mem.o fhci-tds.o fhci-sched.o

fhci-$(CONFIG_FHCI_DEBUG) += fhci-dbg.o

xhci-hcd-y := xhci.o xhci-mem.o
xhci-hcd-y += xhci-ring.o xhci-hub.o xhci-dbg.o
xhci-hcd-$(CONFIG_PCI) += xhci-pci.o

ifneq ($(CONFIG_USB_XHCI_PLATFORM), )
xhci-hcd-y += xhci-plat.o
endif

obj-$(CONFIG_USB_WHCI_HCD) += whci/

obj-$(CONFIG_PCI) += pci-quirks.o

obj-$(CONFIG_USB_EHCI_HCD) += ehci-hcd.o
obj-$(CONFIG_USB_EHCI_PCI) += ehci-pci.o
obj-$(CONFIG_USB_EHCI_HCD_PLATFORM) += ehci-platform.o
obj-$(CONFIG_USB_EHCI_MXC) += ehci-mxc.o
obj-$(CONFIG_USB_EHCI_HCD_OMAP) += ehci-omap.o
obj-$(CONFIG_USB_EHCI_HCD_ORION) += ehci-orion.o
obj-$(CONFIG_USB_EHCI_HCD_SPEAR) += ehci-spear.o
obj-$(CONFIG_USB_EHCI_S5P) += ehci-s5p.o
obj-$(CONFIG_USB_EHCI_HCD_SYNOPSYS) += ehci-h20ahb.o
obj-$(CONFIG_USB_EHCI_HCD_AT91) += ehci-atmel.o
obj-$(CONFIG_USB_EHCI_MSM) += ehci-msm.o

obj-$(CONFIG_USB_OXU210HP_HCD) += oxu210hp-hcd.o
obj-$(CONFIG_USB_ISP116X_HCD) += isp116x-hcd.o
obj-$(CONFIG_USB_ISP1362_HCD) += isp1362-hcd.o
obj-$(CONFIG_USB_OHCI_HCD) += ohci-hcd.o
obj-$(CONFIG_USB_UHCI_HCD) += uhci-hcd.o
obj-$(CONFIG_USB_FHCI_HCD) += fhci.o
obj-$(CONFIG_USB_XHCI_HCD) += xhci-hcd.o
obj-$(CONFIG_USB_SL811_HCD) += sl811-hcd.o
obj-$(CONFIG_USB_SL811_CS) += sl811_cs.o
obj-$(CONFIG_USB_U132_HCD) += u132-hcd.o
obj-$(CONFIG_USB_R8A66597_HCD) += r8a66597-hcd.o
obj-$(CONFIG_USB_ISP1760_HCD) += isp1760.o
obj-$(CONFIG_USB_HWA_HCD) += hwa-hc.o
obj-$(CONFIG_USB_IMX21_HCD) += imx21-hcd.o
obj-$(CONFIG_USB_FSL_MPH_DR_OF) += fsl-mph-dr-of.o
obj-$(CONFIG_USB_OCTEON2_COMMON) += octeon2-common.o
obj-$(CONFIG_USB_HCD_BCMA) += bcma-hcd.o
obj-$(CONFIG_USB_HCD_SSB) += ssb-hcd.o
obj-$(CONFIG_USB_TEST) += usb_test.o

标红的是要编译成ko的B跟C,最后一个标蓝的是公共的A


我晕,这些都是比较重要的文件好不好。

ehci-hcd.o  ohci-hcd.o都是关于usb控制器的驱好,一个版本是usb2.0, usb1.1

usb_test.o是要调用usb控制器驱动接口的usb设备驱动,前面的两个驱动肯定不会用到usb_test. 只有usb_test会调用到前面的驱动。

当前面两个控制器驱动都编成模块的话,可能usb_test也需要编成模块才行

#12


引用 11 楼 jklinux 的回复:
Quote: 引用 9 楼 u014485786 的回复:

Quote: 引用 8 楼 jklinux 的回复:

makefile贴一下咯
#
# Makefile for USB Host Controller Drivers
#

ccflags-$(CONFIG_USB_DEBUG) := -DDEBUG

isp1760-y := isp1760-hcd.o isp1760-if.o

fhci-y := fhci-hcd.o fhci-hub.o fhci-q.o
fhci-y += fhci-mem.o fhci-tds.o fhci-sched.o

fhci-$(CONFIG_FHCI_DEBUG) += fhci-dbg.o

xhci-hcd-y := xhci.o xhci-mem.o
xhci-hcd-y += xhci-ring.o xhci-hub.o xhci-dbg.o
xhci-hcd-$(CONFIG_PCI) += xhci-pci.o

ifneq ($(CONFIG_USB_XHCI_PLATFORM), )
xhci-hcd-y += xhci-plat.o
endif

obj-$(CONFIG_USB_WHCI_HCD) += whci/

obj-$(CONFIG_PCI) += pci-quirks.o

obj-$(CONFIG_USB_EHCI_HCD) += ehci-hcd.o
obj-$(CONFIG_USB_EHCI_PCI) += ehci-pci.o
obj-$(CONFIG_USB_EHCI_HCD_PLATFORM) += ehci-platform.o
obj-$(CONFIG_USB_EHCI_MXC) += ehci-mxc.o
obj-$(CONFIG_USB_EHCI_HCD_OMAP) += ehci-omap.o
obj-$(CONFIG_USB_EHCI_HCD_ORION) += ehci-orion.o
obj-$(CONFIG_USB_EHCI_HCD_SPEAR) += ehci-spear.o
obj-$(CONFIG_USB_EHCI_S5P) += ehci-s5p.o
obj-$(CONFIG_USB_EHCI_HCD_SYNOPSYS) += ehci-h20ahb.o
obj-$(CONFIG_USB_EHCI_HCD_AT91) += ehci-atmel.o
obj-$(CONFIG_USB_EHCI_MSM) += ehci-msm.o

obj-$(CONFIG_USB_OXU210HP_HCD) += oxu210hp-hcd.o
obj-$(CONFIG_USB_ISP116X_HCD) += isp116x-hcd.o
obj-$(CONFIG_USB_ISP1362_HCD) += isp1362-hcd.o
obj-$(CONFIG_USB_OHCI_HCD) += ohci-hcd.o
obj-$(CONFIG_USB_UHCI_HCD) += uhci-hcd.o
obj-$(CONFIG_USB_FHCI_HCD) += fhci.o
obj-$(CONFIG_USB_XHCI_HCD) += xhci-hcd.o
obj-$(CONFIG_USB_SL811_HCD) += sl811-hcd.o
obj-$(CONFIG_USB_SL811_CS) += sl811_cs.o
obj-$(CONFIG_USB_U132_HCD) += u132-hcd.o
obj-$(CONFIG_USB_R8A66597_HCD) += r8a66597-hcd.o
obj-$(CONFIG_USB_ISP1760_HCD) += isp1760.o
obj-$(CONFIG_USB_HWA_HCD) += hwa-hc.o
obj-$(CONFIG_USB_IMX21_HCD) += imx21-hcd.o
obj-$(CONFIG_USB_FSL_MPH_DR_OF) += fsl-mph-dr-of.o
obj-$(CONFIG_USB_OCTEON2_COMMON) += octeon2-common.o
obj-$(CONFIG_USB_HCD_BCMA) += bcma-hcd.o
obj-$(CONFIG_USB_HCD_SSB) += ssb-hcd.o
obj-$(CONFIG_USB_TEST) += usb_test.o

标红的是要编译成ko的B跟C,最后一个标蓝的是公共的A


我晕,这些都是比较重要的文件好不好。

ehci-hcd.o  ohci-hcd.o都是关于usb控制器的驱好,一个版本是usb2.0, usb1.1

usb_test.o是要调用usb控制器驱动接口的usb设备驱动,前面的两个驱动肯定不会用到usb_test. 只有usb_test会调用到前面的驱动。

当前面两个控制器驱动都编成模块的话,可能usb_test也需要编成模块才行[/quote大哥,我在做测试嘛,usb我懂,我是在usb_test里面加了一些调试接口给ehci和ohci调用的,现在只是编译不过而已,暂不用考虑代码逻辑吧

#13


引用 10 楼 falloutmx 的回复:
跟makefile有关系,贴出来看看吧。

大哥您好,makefile已经贴出来了,在你的上一楼就是

#14


你这是把驱动都放在内核驱动路径下了吧?
最后执行的时候是make uImage然后再make modules的吗?

#15


引用 14 楼 falloutmx 的回复:
你这是把驱动都放在内核驱动路径下了吧?
最后执行的时候是make uImage然后再make modules的吗?

你这是把驱动都放在内核驱动路径下了吧?
是的,放到drivers/usb/host/ 目录下

最后执行的时候是make uImage然后再make modules的吗?
是的,building kernel是ok的,building modules, stage 2 就出现上述错误

#16


确实是跟 Makefile 有关系,不过是需要修改上层目录的 Makefile,也就是 driver/usb/ 目录下的Makefile:

需要加上一行(标蓝):
#
# Makefile for the kernel USB device drivers.
#

# Object files in subdirectories

obj-$(CONFIG_USB) += core/
obj-$(CONFIG_USB_SUPPORT) += phy/

obj-$(CONFIG_USB_DWC3) += dwc3/
obj-$(CONFIG_USB_DWC2) += dwc2/
obj-$(CONFIG_USB_ISP1760) += isp1760/

obj-$(CONFIG_USB_MON) += mon/

obj-$(CONFIG_USB_TEST) += host/
obj-$(CONFIG_PCI) += host/
obj-$(CONFIG_USB_EHCI_HCD) += host/
obj-$(CONFIG_USB_ISP116X_HCD) += host/
obj-$(CONFIG_USB_OHCI_HCD) += host/
obj-$(CONFIG_USB_UHCI_HCD) += host/
obj-$(CONFIG_USB_FHCI_HCD) += host/
......
......
......
谢谢各位大哥指导!