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

Cra*_*ild 2 linux makefile linux-kernel

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

\n\n
ln: target \xe2\x80\x98/lib/modules/4.2.0-rc4/source\xe2\x80\x99 is not a directory\nMakefile:1120: recipe for target '_modinst_' failed\nmake: *** [_modinst_] Error 1\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在 Makefile 中查找了第 1120 行,其中包含以下内容:

\n\n
_modinst_:\n    @rm -rf $(MODLIB)/kernel\n    @rm -f $(MODLIB)/source\n    @mkdir -p $(MODLIB)/kernel\n
Run Code Online (Sandbox Code Playgroud)\n\n

我用谷歌搜索了很多,我发现它的发生(主要是我发现的)是由于EXTRAVERSIONMakefile 中的变量中有额外的空间,但我的 Makefile 中没有空间。

\n\n

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

\n\n

编辑 :

\n\n

我遵循下面评论中的建议并执行了 \n ls -al /lib/modules/4.2.0-rc4/。\n没有源文件或源目录存在并且运行modules_install时会产生make --trace以下结果:

\n\n
Makefile:1120: target '_modinst_' does not exist\nrm -rf /lib/modules/4.2.0-rc4/kernel\nrm -f /lib/modules/4.2.0-rc4/source\nmkdir -p /lib/modules/4.2.0-rc4/kernel\nln -s `cd . && /bin/pwd` /lib/modules/4.2.0-rc4/source\nln: target \xe2\x80\x98/lib/modules/4.2.0-rc4/source\xe2\x80\x99 is not a directory\nMakefile:1120: recipe for target '_modinst_' failed\nmake: *** [_modinst_] Error 1 \n
Run Code Online (Sandbox Code Playgroud)\n

Mad*_*ist 5

您没有包含第 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
Run Code Online (Sandbox Code Playgroud)

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

ln -s '/home/myself/My' 'Source' 'Code/info' '/lib/modules/4.2.0-rc4/source'
Run Code Online (Sandbox Code Playgroud)