【发布时间】:2013-10-10 13:36:00
【问题描述】:
我一直在尝试交叉编译一个可加载的内核模块,并且收到警告消息,我想获得帮助。
以下是警告信息
make[1]: Entering directory `/home/userid/rowboat-android/kernel'
Building modules, stage 2.
MODPOST 1 modules
WARNING: "omap_device_build" [/home/userid/myfiles/lcdc_load_device.ko] undefined!
WARNING: "omap_hwmod_lookup" [/home/userid/myfiles/lcdc_load_device.ko] undefined!
make[1]: Leaving directory `/home/userid/rowboat-android/kernel'
下面是 Makefile
obj-m :=lcdc_load_device.o
lcdc_load_device-m := ../rowboat-android/kernel/arch/arm/plat-omap/omap_device.o
lcdc_load_device-m += ../rowboat-android/kernel/arch/arm/mach-omap2/omap_hwmod.o
ccflags-m := -I$(src)/../rowboat-android/kernel/arch/arm/plat-omap/include/plat/
KDIR := /home/userid/rowboat-android/kernel/
PWD := $(shell pwd)
default:
$(MAKE) ARCH=arm CROSS_COMPILE=/home/userid/rowboat-android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
我怀疑 makefile 正在寻找 "omap_device_build" 和 "omap_hwmod_lookup" 函数的头文件。
感谢您的帮助,并提前感谢您。
【问题讨论】:
-
这是完整的makefile吗?它再次调用
make,目标不在您的makefile (modules) 中。你输入的make命令是什么。只是make? -
是的,这是完整的 makefile。我输入了make。你能澄清第二个说法吗? rowboat-android/kernel 确实有一个生成文件。看起来我的问题可能出在 KDIR 变量中
-
makefile 中的默认目标调用
$(MAKE),目标为modules,所以我不确定它会在哪里选择该目标。但这与警告无关。有些东西正在调用这些函数,但在库中找不到它们。 -
我认为它正在获取标题,否则您会收到错误消息。意思是
/home/userid/myfiles/lcdc_load_device.ko指的是那些符号,但没有找到定义。如果您知道这些符号实际定义在哪个模块中,那么您可能需要确定该模块是否被链接。 -
我认为你有这个倒退。您不想包含拉入
omap_device_build和omap_hwmod_lookup定义的标题。您引用了一个调用函数的 macro,但它们不是EXPORT_GPL;或提供给模块。
标签: makefile arm embedded-linux kernel-module linux-toolchain