构建自己的内核并加载它
building own kernel and loading it
我下载了官方 linux 内核并尝试在 ubuntu wsl2 中构建它但是
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:26:46: 警告:'struct ipt_ECN_info' 声明在里面参数列表在这个定义或声明之外是不可见的
26 | set_ect_ip(struct sk_buff *skb, const struct ipt_ECN_info *einfo)
| ^~~~~~~~~~~~
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c: 在函数‘set_ect_ip’中:
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:30:44: 错误:无效使用未定义类型 'const struct ipt_ECN_info'
30 |如果 ((iph->tos & IPT_ECN_IP_MASK) != (einfo->ip_ect & IPT_ECN_IP_MASK)) {
| ^~
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:37:21: 错误:无效使用未定义类型 'const struct ipt_ECN_info'
37 | iph->tos |= (einfo->ip_ect & IPT_ECN_IP_MASK);
| ^~
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:在顶层:
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:45:47: 警告:'struct ipt_ECN_info' 声明在里面参数列表在这个定义或声明之外是不可见的
45 | set_ect_tcp(struct sk_buff *skb, const struct ipt_ECN_info *einfo)
| ^~~~~~~~~~~~
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c: 在函数‘set_ect_tcp’中:
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:55:14: 错误:无效使用未定义类型 'const struct ipt_ECN_info'
55 | if ((!(einfo->operation & IPT_ECN_OP_SET_ECE) ||
| ^~
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:55:28: 错误:'IPT_ECN_OP_SET_ECE' 未声明(首先在此功能中使用);您是指“IPT_ECN_OP_MATCH_ECE”吗?
55 | if ((!(einfo->operation & IPT_ECN_OP_SET_ECE) ||
| ^~~~~~~~~~~~~~~~~~
| IPT_ECN_OP_MATCH_ECE
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:55:28:注意:每个函数只报告每个未声明的标识符一次它出现在
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:56:25: 错误:无效使用未定义类型 'const struct ipt_ECN_info'
56 | tcph->ece == einfo->proto.tcp.ece) &&
| ^~
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:57:14: 错误:无效使用未定义类型 'const struct ipt_ECN_info'
57 | (!(einfo->operation & IPT_ECN_OP_SET_CWR) ||
| ^~
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:57:28: 错误:'IPT_ECN_OP_SET_CWR' 未声明(首先在此功能中使用);您是指“IPT_ECN_OP_MATCH_CWR”吗?
57 | (!(einfo->operation & IPT_ECN_OP_SET_CWR) ||
| ^~~~~~~~~~~~~~~~~~
| IPT_ECN_OP_MATCH_CWR
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:58:25: 错误:无效使用未定义类型 'const struct ipt_ECN_info'
58 | tcph->cwr == einfo->proto.tcp.cwr))
| ^~
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:66:11: 错误:无效使用未定义类型 'const struct ipt_ECN_info'
66 | if (einfo->operation & IPT_ECN_OP_SET_ECE)
| ^~
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:67:20: 错误:无效使用未定义类型 'const struct ipt_ECN_info'
67 | tcph->ece = einfo->proto.tcp.ece;
| ^~
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:68:11: 错误:无效使用未定义类型 'const struct ipt_ECN_info'
68 | if (einfo->operation & IPT_ECN_OP_SET_CWR)
| ^~
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:69:20: 错误:无效使用未定义类型 'const struct ipt_ECN_info'
69 | tcph->cwr = einfo->proto.tcp.cwr;
| ^~
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c: 在函数‘ecn_t
’:
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:81:11: 错误:无效使用未定义类型 'const struct ipt_ECN_info'
81 | if (einfo->operation & IPT_ECN_OP_SET_IP)
| ^~
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:81:25: 错误:'IPT_ECN_OP_SET_IP' 未声明(首先在此功能中使用);您是指“IPT_ECN_OP_MATCH_IP”吗?
81 | if (einfo->operation & IPT_ECN_OP_SET_IP)
| ^~~~~~~~~~~~~~~~~
| IPT_ECN_OP_MATCH_IP
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:82:24:错误:传递 'set_ect_ip 的参数 2 ' 来自不兼容的指针类型 [-Werror=incompatible-pointer-types]
82 |如果 (!set_ect_ip(skb, einfo))
| ^~~~~
| |
|构造结构 ipt_ECN_info *
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:26:60:注意:预期的'const struct ipt_ECN_info * ' 但参数的类型是 'const struct ipt_ECN_info *'
26 | set_ect_ip(struct sk_buff *skb, const struct ipt_ECN_info *einfo)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:85:11: 错误:无效使用未定义类型 'const struct ipt_ECN_info'
85 | if (einfo->operation & (IPT_ECN_OP_SET_ECE | IPT_ECN_OP_SET_CWR) &&
| ^~
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:85:26: 错误:'IPT_ECN_OP_SET_ECE' 未声明(首先在此功能中使用);您是指“IPT_ECN_OP_MATCH_ECE”吗?
85 | if (einfo->operation & (IPT_ECN_OP_SET_ECE | IPT_ECN_OP_SET_CWR) &&
| ^~~~~~~~~~~~~~~~~~
| IPT_ECN_OP_MATCH_ECE
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:85:47: 错误:'IPT_ECN_OP_SET_CWR' 未声明(首先在此功能中使用);您是指“IPT_ECN_OP_MATCH_CWR”吗?
85 | if (einfo->operation & (IPT_ECN_OP_SET_ECE | IPT_ECN_OP_SET_CWR) &&
| ^~~~~~~~~~~~~~~~~~
| IPT_ECN_OP_MATCH_CWR
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:87:25:错误:传递 'set_ect_tcp 的参数 2 ' 来自不兼容的指针类型 [-Werror=incompatible-pointer-types]
87 |如果 (!set_ect_tcp(skb, einfo))
| ^~~~~
| |
|构造结构 ipt_ECN_info *
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:45:61:注意:预期的'const struct ipt_ECN_info * ' 但参数的类型是 'const struct ipt_ECN_info *'
45 | set_ect_tcp(struct sk_buff *skb, const struct ipt_ECN_info *einfo)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c: 在函数‘ecn_tg_check’中:
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:98:11: 错误:无效使用未定义类型 'const struct ipt_ECN_info'
98 | if (einfo->operation & IPT_ECN_OP_MASK)
| ^~
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:98:25: 错误:'IPT_ECN_OP_MASK' 未声明(首先在此功能中使用);您是指“IPT_ECN_IP_MASK”吗?
98 | if (einfo->operation & IPT_ECN_OP_MASK)
| ^~~~~~~~~~~~~~~
| IPT_ECN_IP_MASK
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:101:11: 错误:无效使用未定义类型 'const struct ipt_ECN_info'
101 |如果 (einfo->ip_ect & ~IPT_ECN_IP_MASK)
| ^~
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:104:12: 错误:无效使用未定义类型 'const struct ipt_ECN_info'
104 | if ((einfo->operation & (IPT_ECN_OP_SET_ECE|IPT_ECN_OP_SET_CWR)) &&
| ^~
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:104:27: 错误:'IPT_ECN_OP_SET_ECE' 未声明(首先在此功能中使用);您是指“IPT_ECN_OP_MATCH_ECE”吗?
104 | if ((einfo->operation & (IPT_ECN_OP_SET_ECE|IPT_ECN_OP_SET_CWR)) &&
| ^~~~~~~~~~~~~~~~~~
| IPT_ECN_OP_MATCH_ECE
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:104:46: 错误:'IPT_ECN_OP_SET_CWR' 未声明(首先在此功能中使用);您是指“IPT_ECN_OP_MATCH_CWR”吗?
104 | if ((einfo->operation & (IPT_ECN_OP_SET_ECE|IPT_ECN_OP_SET_CWR)) &&
| ^~~~~~~~~~~~~~~~~~
| IPT_ECN_OP_MATCH_CWR
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:在顶层:
/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:116:23: 错误:'sizeof' 对不完整类型的无效应用'结构 ipt_ECN_info'
116 | .targetsize = sizeof(结构 ipt_ECN_info),
| ^~~~~~
cc1:一些警告被视为错误
make[4]: *** [/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/scripts/Makefile.build:266: net/ipv4/netfilter/ipt_ECN .o] 错误 1
make[3]: *** [/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/scripts/Makefile.build:500: net/ipv4/netfilter ] 错误 2
make[3]: *** 等待未完成的工作....
make[2]: *** [/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/scripts/Makefile.build:500: net/ipv4 ] 错误 2
make[2]: *** 等待未完成的作业....
我在 virtualbox ubuntu 中成功构建了内核,但在 wsl2 中加载它时出错。所以,我的问题是,如何构建一个可以在 wsl2 中使用的自己的 linux 内核?
我解决了。第一个问题是我提取源代码的文件夹不区分大小写,如此处所述 Compiling Linux Kernel Error xt_CONNMARK.h
提取后,我使用了 WSL2 女士的配置文件并修改为包含内核虚拟机。现在它可以正确编译并运行。
我下载了官方 linux 内核并尝试在 ubuntu wsl2 中构建它但是 /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:26:46: 警告:'struct ipt_ECN_info' 声明在里面参数列表在这个定义或声明之外是不可见的 26 | set_ect_ip(struct sk_buff *skb, const struct ipt_ECN_info *einfo) | ^~~~~~~~~~~~ /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c: 在函数‘set_ect_ip’中: /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:30:44: 错误:无效使用未定义类型 'const struct ipt_ECN_info' 30 |如果 ((iph->tos & IPT_ECN_IP_MASK) != (einfo->ip_ect & IPT_ECN_IP_MASK)) { | ^~ /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:37:21: 错误:无效使用未定义类型 'const struct ipt_ECN_info' 37 | iph->tos |= (einfo->ip_ect & IPT_ECN_IP_MASK); | ^~ /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:在顶层: /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:45:47: 警告:'struct ipt_ECN_info' 声明在里面参数列表在这个定义或声明之外是不可见的 45 | set_ect_tcp(struct sk_buff *skb, const struct ipt_ECN_info *einfo) | ^~~~~~~~~~~~ /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c: 在函数‘set_ect_tcp’中: /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:55:14: 错误:无效使用未定义类型 'const struct ipt_ECN_info' 55 | if ((!(einfo->operation & IPT_ECN_OP_SET_ECE) || | ^~ /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:55:28: 错误:'IPT_ECN_OP_SET_ECE' 未声明(首先在此功能中使用);您是指“IPT_ECN_OP_MATCH_ECE”吗? 55 | if ((!(einfo->operation & IPT_ECN_OP_SET_ECE) || | ^~~~~~~~~~~~~~~~~~ | IPT_ECN_OP_MATCH_ECE /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:55:28:注意:每个函数只报告每个未声明的标识符一次它出现在 /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:56:25: 错误:无效使用未定义类型 'const struct ipt_ECN_info' 56 | tcph->ece == einfo->proto.tcp.ece) && | ^~ /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:57:14: 错误:无效使用未定义类型 'const struct ipt_ECN_info' 57 | (!(einfo->operation & IPT_ECN_OP_SET_CWR) || | ^~ /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:57:28: 错误:'IPT_ECN_OP_SET_CWR' 未声明(首先在此功能中使用);您是指“IPT_ECN_OP_MATCH_CWR”吗? 57 | (!(einfo->operation & IPT_ECN_OP_SET_CWR) || | ^~~~~~~~~~~~~~~~~~ | IPT_ECN_OP_MATCH_CWR /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:58:25: 错误:无效使用未定义类型 'const struct ipt_ECN_info' 58 | tcph->cwr == einfo->proto.tcp.cwr)) | ^~ /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:66:11: 错误:无效使用未定义类型 'const struct ipt_ECN_info' 66 | if (einfo->operation & IPT_ECN_OP_SET_ECE) | ^~ /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:67:20: 错误:无效使用未定义类型 'const struct ipt_ECN_info' 67 | tcph->ece = einfo->proto.tcp.ece; | ^~ /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:68:11: 错误:无效使用未定义类型 'const struct ipt_ECN_info' 68 | if (einfo->operation & IPT_ECN_OP_SET_CWR) | ^~ /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:69:20: 错误:无效使用未定义类型 'const struct ipt_ECN_info' 69 | tcph->cwr = einfo->proto.tcp.cwr; | ^~ /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c: 在函数‘ecn_t ’: /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:81:11: 错误:无效使用未定义类型 'const struct ipt_ECN_info' 81 | if (einfo->operation & IPT_ECN_OP_SET_IP) | ^~ /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:81:25: 错误:'IPT_ECN_OP_SET_IP' 未声明(首先在此功能中使用);您是指“IPT_ECN_OP_MATCH_IP”吗? 81 | if (einfo->operation & IPT_ECN_OP_SET_IP) | ^~~~~~~~~~~~~~~~~ | IPT_ECN_OP_MATCH_IP /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:82:24:错误:传递 'set_ect_ip 的参数 2 ' 来自不兼容的指针类型 [-Werror=incompatible-pointer-types] 82 |如果 (!set_ect_ip(skb, einfo)) | ^~~~~ | | |构造结构 ipt_ECN_info * /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:26:60:注意:预期的'const struct ipt_ECN_info * ' 但参数的类型是 'const struct ipt_ECN_info *' 26 | set_ect_ip(struct sk_buff *skb, const struct ipt_ECN_info *einfo) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~ /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:85:11: 错误:无效使用未定义类型 'const struct ipt_ECN_info' 85 | if (einfo->operation & (IPT_ECN_OP_SET_ECE | IPT_ECN_OP_SET_CWR) && | ^~ /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:85:26: 错误:'IPT_ECN_OP_SET_ECE' 未声明(首先在此功能中使用);您是指“IPT_ECN_OP_MATCH_ECE”吗? 85 | if (einfo->operation & (IPT_ECN_OP_SET_ECE | IPT_ECN_OP_SET_CWR) && | ^~~~~~~~~~~~~~~~~~ | IPT_ECN_OP_MATCH_ECE /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:85:47: 错误:'IPT_ECN_OP_SET_CWR' 未声明(首先在此功能中使用);您是指“IPT_ECN_OP_MATCH_CWR”吗? 85 | if (einfo->operation & (IPT_ECN_OP_SET_ECE | IPT_ECN_OP_SET_CWR) && | ^~~~~~~~~~~~~~~~~~ | IPT_ECN_OP_MATCH_CWR /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:87:25:错误:传递 'set_ect_tcp 的参数 2 ' 来自不兼容的指针类型 [-Werror=incompatible-pointer-types] 87 |如果 (!set_ect_tcp(skb, einfo)) | ^~~~~ | | |构造结构 ipt_ECN_info * /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:45:61:注意:预期的'const struct ipt_ECN_info * ' 但参数的类型是 'const struct ipt_ECN_info *' 45 | set_ect_tcp(struct sk_buff *skb, const struct ipt_ECN_info *einfo) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~ /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c: 在函数‘ecn_tg_check’中: /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:98:11: 错误:无效使用未定义类型 'const struct ipt_ECN_info' 98 | if (einfo->operation & IPT_ECN_OP_MASK) | ^~ /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:98:25: 错误:'IPT_ECN_OP_MASK' 未声明(首先在此功能中使用);您是指“IPT_ECN_IP_MASK”吗? 98 | if (einfo->operation & IPT_ECN_OP_MASK) | ^~~~~~~~~~~~~~~ | IPT_ECN_IP_MASK /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:101:11: 错误:无效使用未定义类型 'const struct ipt_ECN_info' 101 |如果 (einfo->ip_ect & ~IPT_ECN_IP_MASK) | ^~ /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:104:12: 错误:无效使用未定义类型 'const struct ipt_ECN_info' 104 | if ((einfo->operation & (IPT_ECN_OP_SET_ECE|IPT_ECN_OP_SET_CWR)) && | ^~ /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:104:27: 错误:'IPT_ECN_OP_SET_ECE' 未声明(首先在此功能中使用);您是指“IPT_ECN_OP_MATCH_ECE”吗? 104 | if ((einfo->operation & (IPT_ECN_OP_SET_ECE|IPT_ECN_OP_SET_CWR)) && | ^~~~~~~~~~~~~~~~~~ | IPT_ECN_OP_MATCH_ECE /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:104:46: 错误:'IPT_ECN_OP_SET_CWR' 未声明(首先在此功能中使用);您是指“IPT_ECN_OP_MATCH_CWR”吗? 104 | if ((einfo->operation & (IPT_ECN_OP_SET_ECE|IPT_ECN_OP_SET_CWR)) && | ^~~~~~~~~~~~~~~~~~ | IPT_ECN_OP_MATCH_CWR /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:在顶层: /mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/net/ipv4/netfilter/ipt_ECN.c:116:23: 错误:'sizeof' 对不完整类型的无效应用'结构 ipt_ECN_info' 116 | .targetsize = sizeof(结构 ipt_ECN_info), | ^~~~~~ cc1:一些警告被视为错误 make[4]: *** [/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/scripts/Makefile.build:266: net/ipv4/netfilter/ipt_ECN .o] 错误 1 make[3]: *** [/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/scripts/Makefile.build:500: net/ipv4/netfilter ] 错误 2 make[3]: *** 等待未完成的工作.... make[2]: *** [/mnt/c/Users/Ivan/Documents/linux-5.4.50.tar/linux-5.4.50/linux-5.4.50/scripts/Makefile.build:500: net/ipv4 ] 错误 2 make[2]: *** 等待未完成的作业....
我在 virtualbox ubuntu 中成功构建了内核,但在 wsl2 中加载它时出错。所以,我的问题是,如何构建一个可以在 wsl2 中使用的自己的 linux 内核?
我解决了。第一个问题是我提取源代码的文件夹不区分大小写,如此处所述 Compiling Linux Kernel Error xt_CONNMARK.h 提取后,我使用了 WSL2 女士的配置文件并修改为包含内核虚拟机。现在它可以正确编译并运行。