Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 由于PF_MAX>;而导致内核编译失败;44_Sockets_Linux Kernel_Kernel_Linux Device Driver_Device Driver - Fatal编程技术网

Sockets 由于PF_MAX>;而导致内核编译失败;44

Sockets 由于PF_MAX>;而导致内核编译失败;44,sockets,linux-kernel,kernel,linux-device-driver,device-driver,Sockets,Linux Kernel,Kernel,Linux Device Driver,Device Driver,我有一个QEMU虚拟机运行Linux内核4.14.78的映像 在主机上(一个有96个内核的服务器),我正在尝试编译一个新的内核更新,其中包括我所做的一些更改。 为了加快这个过程,我使用主机为目标VM进行编译 为此,我遵循以下步骤: 将/boot/config-4.14.78文件从VM复制到主机 将复制的文件放入内核源代码根目录,在my中将其重命名为.config 运行makeclean进行清洁 运行make menuconfig仅更新配置 运行make-j$(nproc) 但是,我

我有一个QEMU虚拟机运行Linux内核4.14.78的映像

在主机上(一个有96个内核的服务器),我正在尝试编译一个新的内核更新,其中包括我所做的一些更改。 为了加快这个过程,我使用主机为目标VM进行编译

为此,我遵循以下步骤:

  • /boot/config-4.14.78
    文件从VM复制到主机

  • 将复制的文件放入内核源代码根目录,在my中将其重命名为
    .config

  • 运行
    makeclean
    进行清洁

  • 运行
    make menuconfig
    仅更新配置

  • 运行
    make-j$(nproc)

但是,我遇到了以下错误:

作为arch/x86/purgatry/setup-x86_64.o
CC-arch/x86/purgatory/sha256.o
作为arch/x86/purgatory/entry64.o
CC arch/x86/purgatory/string.o
在scripts/selinux/mdp/mdp.c:49中包含的文件中:
./security/selinux/include/classmap.h:245:2:错误:#错误定义了新地址族,请更新secclass_映射。
245 |#错误定义了新地址族,请更新secclass#映射。
|  ^~~~~
make[3]:***[scripts/Makefile.host:102:scripts/selinux/mdp/mdp]错误1
make[2]:***[scripts/Makefile.build:587:scripts/selinux/mdp]错误2
make[2]:***等待未完成的工作。。。。
在scripts/selinux/genheaders/genheaders.c:19中包含的文件中:
./security/selinux/include/classmap.h:245:2:错误:#错误定义了新地址族,请更新secclass_映射。
245 |#错误定义了新地址族,请更新secclass#映射。
|  ^~~~~
CHK scripts/mod/devicetable offset.h
make[3]:***[scripts/Makefile.host:102:scripts/selinux/genheaders/genheaders]错误1
make[2]:***[scripts/Makefile.build:587:scripts/selinux/genheaders]错误2
make[1]:***[scripts/Makefile.build:587:scripts/selinux]错误2
make[1]:***等待未完成的工作。。。。
我已经检查了这是什么原因造成的,结果表明这是因为:

include/linux/socket.h:211:#现在定义AF#u MAX 44/**/
include/linux/socket.h:260:#定义PF_MAX AF_MAX
然后,我在预处理时打印出
PF_MAX
的定义,结果是
PF_MAX
45

包含在scripts/selinux/mdp/mdp.c:49中的文件中:
/security/selinux/include/classmap.h:247:9:note:#pragma消息:45
247 |#pragma消息(字符串(PF#u MAX))
|         ^~~~~~~
./security/selinux/include/classmap.h:250:2:错误:#错误定义了新地址族,请更新secclass_映射。
250 |#错误定义了新地址族,请更新secclass#映射。
|  ^~~~~
这个
45
对我来说毫无意义,因为我刚刚检查了它应该是
44

我想知道构建是否考虑了主机而不是目标

p.S.:这些步骤在我的本地机器上运行良好,这是一台8核机器,请查看内核版本:

uname-a
Linux campes note 5.4.86#1 SMP Fri Jan 1 16:26:25-03 2021 x86_64 x86_64 x86_64 GNU/Linux
更新1: 我试着编译内核而不做任何更改,遵循上面提到的步骤,但它也没有编译,我得到了相同的错误

更新2: 我发现编译是在查看主机
/usr/src/linux-headers-x.x.x
文件。 相反,它应该指向与目标相同的版本

为此,我试着跟随,但没有成功。我在本教程所述的一个步骤中遇到问题。

(从现在删除的注释中收集)

我已经尝试过自己构建v4.14.78,然后是最新的可用v4.14.214。我发现前者失败,而后者构建。所以,我已经平分到v4.14.116,它首先正确构建。然后,我简单地查看了这些更改,并在linux稳定树中找到了commit(“selinux:use kernel linux/socket.h for genheaders和mdp”),从而解决了这个问题


您可以尝试将其挑选到您的分支并再次编译。

它是在没有您对代码进行神奇更改的情况下构建的吗?我只是尝试在这里使用干净的内核源代码进行编译,但我得到了相同的错误。实际上,这个错误与我的更改无关。在JBD2日志层上,我的更改本身很小,我只是添加了一些
printk
,看看发生了什么。是的,我已经做了。我从:
wget开始https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.14.78.tar.xz
下载我试图编译的版本。从一个干净的建筑我得到了同样的问题。下面我想可能是内核头或者其他什么,但由于一些与此无关的错误,我无法遵循这些步骤。太好了,我非常关注
4.14.78
,因为这是我正在研究的版本。希望通过
diff
4.14.78
与JBD2层的
4.14.214
没有太大区别。然后,您提到的补丁可以解决.78的问题,我现在就试试。谢谢,谢谢。我决定直接转到您提到的
linux-4.14.214
。它正在编译,我的QEMU VM正在运行这个新内核:
qemu@fvm:~$uname-a Linux fvm 4.14.214#3 SMP星期二1月12日20:18:24 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux