1

在全新的 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-$ 设置,这也很明显,因为它可以在一台 PC 上运行。

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

4

1 回答 1

2

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

我在这里分享它,因为几乎无法想象有人会认为这是这个问题的原因!

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

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

所以解决办法是:

GREP_OPTIONS=

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

于 2012-12-23T14:42:01.383 回答