在一个全新的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内核编译模块。
答案 0 :(得分:2)
经过大量的搜索,我找到了答案。
我在这里分享,因为任何人都认为这就是这个问题的原因几乎是不可思议的!
我将GREP_OPTIONS设置为自动提供颜色,并对结果进行编号。似乎构建模块的脚本依赖于grep,并且似乎搞砸了。
取消设置envt变量使其成功执行modpost。
所以解决方案是:
GREP_OPTIONS=
从配置文件和.bashrc脚本中删除该设置。