没有规则来建立目标“ arch / x86 / entry / syscalls / syscall_32.tbl”,而“ arch / x86 / entry / syscalls /../../ include / generated / asm / syscalls_32.h”

Tha*_*wan 3 architecture linux-kernel

当我尝试在Ubuntu计算机中启用PPP时,在menuconfig尝试制作内核后发生以下错误:

$ sudo make
Run Code Online (Sandbox Code Playgroud)

make [1]:***没有规则来创建目标arch / x86 / entry / syscalls / syscall_32.tbl,而arch / x86 / entry / syscalls /../../ include / generation / asm / syscalls_32.h'。停止。

make:*** [archheaders]错误2

使用了Ubuntu版本linux-headers-4.2.0-27-generic。

请帮助我修复它。

小智 6

使用时可能是语法错误$(PWD)。考虑更改此:

all: 
    $(MAKE) -C $(KDIR) M=$(PWD) modules
Run Code Online (Sandbox Code Playgroud)

对此:

all: 
    $(MAKE) -C $(KDIR) M=$(shell pwd) modules
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题。


Pet*_*ter 4

简洁版本:

这不是您正在构建的完整内核。也许只是标题,或者其他不完整的东西。确保它是完整的内核源代码。

长版:

不确定 Ubuntu 的做法...似乎正常的方法在 ubuntu 上不起作用,例如仅适用于模块(不是您想要的):

apt-get install linux-headers-...
cd /lib/modules/$(uname -r)/build
make modules_prepare
Run Code Online (Sandbox Code Playgroud)

或者对于像你想要的整个内核,也对我不起作用(Ubuntu 16.04):

apt-get install linux-source-...
cd /lib/modules/$(uname -r)/build
make menuconfig
make bindeb-pkg
Run Code Online (Sandbox Code Playgroud)

(请注意,这make bindeb-pkg不是纯粹的 ubuntu/debian 构建方式...您使用命令make-kpkg或其他东西)

他们没有为您制作构建链接,如果您在那里符号链接标头并复制 .config 文件,则构建会像您一样失败。所以这是我到目前为止的替代方案,例如。对于内核为 4.4.16 的 ubuntu 16.04):

cd /usr/src
apt-get source linux-image-4.4.0
cd linux-4.4.16
cp /boot/config-$(uname -r) .config
make modules_prepare
Run Code Online (Sandbox Code Playgroud)

但最后一种方法适用于与正在运行的内核不匹配的内核...我不知道这是否适合你(它不适合我,构建一个树外模块,所以我也这样做了make bindeb-pkg并且dpkg -i ../linux-...安装了结果)

apt-get source ...对于 ubuntu 源代码,除了使用 之外,您还可以从 kernel.org 或通过 git 获取 tgz 文件形式的普通源代码。