编译自定义内核时,modules_install会导致错误

时间:2015-08-05 08:39:37

标签: linux makefile linux-kernel

我正在尝试安装自定义内核,一切正常,除非我运行make modules_install时会产生以下结果:

ln: target ‘/lib/modules/4.2.0-rc4/source’ is not a directory
Makefile:1120: recipe for target '_modinst_' failed
make: *** [_modinst_] Error 1

我在Makefile中查找了第1120行,它包含了这个:

_modinst_:
    @rm -rf $(MODLIB)/kernel
    @rm -f $(MODLIB)/source
    @mkdir -p $(MODLIB)/kernel

我搜索了很多,我发现它是由于Makefile中EXTRAVERSION变量中的额外空格而发生的(主要是我发现的)但我的Makefile中没有空格。

有人能指出我正确的方向吗?

编辑:

我按照以下评论中的建议进行了操作 ls -al /lib/modules/4.2.0-rc4/。 没有源文件或源目录,并且使用modules_install运行make --trace会产生以下信息:

Makefile:1120: target '_modinst_' does not exist
rm -rf /lib/modules/4.2.0-rc4/kernel
rm -f /lib/modules/4.2.0-rc4/source
mkdir -p /lib/modules/4.2.0-rc4/kernel
ln -s `cd . && /bin/pwd` /lib/modules/4.2.0-rc4/source
ln: target ‘/lib/modules/4.2.0-rc4/source’ is not a directory
Makefile:1120: recipe for target '_modinst_' failed
make: *** [_modinst_] Error 1 

1 个答案:

答案 0 :(得分:2)

您没有包含第1120行出现的整个规则; mkdir之后必须有更多文字,你没有显示。您需要显示至少足够的规则,以便我们可以看到可能出现的问题...特别是因为您的错误消息与ln有关,您需要显示包含ln命令的行。

但是,根据您make --trace提供的信息,我打赌我知道这有什么不对。

问题是工作目录的路径包含名称中有空格的目录。换句话说,如果您运行pwd,您将看到其中包含空格的目录名称。或者,可能还有一些其他特殊角色,但很可能是一个空间。

不要这样做:将当前目录重命名或移动到路径不包含空格的位置。

假设您的路径类似于/home/myself/My Source Code/info。然后ln命令是:

ln -s /home/myself/My Source Code/info /lib/modules/4.2.0-rc4/source

这是一个无效的命令,因为每个单词都被视为一个单独的参数,就像你写的那样:

ln -s '/home/myself/My' 'Source' 'Code/info' '/lib/modules/4.2.0-rc4/source'