无法在Android内核上编译模块:MODPOST 0模块

时间:2012-12-23 13:13:19

标签: android linux linux-kernel

在一个全新的Ubuntu安装中,我已经安装了build-essential软件包,以及其他用于为我的PC编译Nvidia驱动程序的软件包。意思是内核和模块编译在PC上运行。

现在在同一台PC上,我尝试使用基于gcc 4.4.3的Google NDK工具链来交叉编译Android linux内核。

编译顺利进行,但最后,它给出了以下输出:

  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
  Building modules, stage 2.
  MODPOST 0 modules

在调用'make menuconfig'然后执行'make'之前,我已经做了'make prepare'。

请注意,构建服务器上的相同工具链使用从git repo克隆的相同文件。简而言之,相同的内核源代码,相同的工具链,在服务器上构建模块,不会在我的PC上构建任何模块。

.config启用了“可加载模块支持”。

$cat modules.order 
kernel/drivers/scsi/scsi_wait_scan.ko
kernel/drivers/net/wireless/bcmdhd/dhd.ko
kernel/drivers/net/wireless/btlock/btlock.ko
kernel/drivers/net/tun.ko

Makefile具有正确的obj-m和obj- $ setup,这在一台PC上运行时也很明显。

我很高兴能够了解为什么我无法让我的PC为我的Android内核编译模块。

1 个答案:

答案 0 :(得分:2)

经过大量的搜索,我找到了答案。

我在这里分享,因为任何人都认为这就是这个问题的原因几乎是不可思议的!

我将GREP_OPTIONS设置为自动提供颜色,并对结果进行编号。似乎构建模块的脚本依赖于grep,并且似乎搞砸了。

取消设置envt变量使其成功执行modpost。

所以解决方案是:

GREP_OPTIONS=

从配置文件和.bashrc脚本中删除该设置。