Search code examples
kernel

building own kernel and loading it


I downloaded the official linux kernel and tried to build it in ubuntu wsl2 but /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: warning: ‘struct ipt_ECN_info’ declared inside parameter list will not be visible outside of this definition or declaration

   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: In function ‘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: error: invalid use of undefined type ‘const struct ipt_ECN_info’
   30 |  if ((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: error: invalid use of undefined type ‘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: At top level:
/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: warning: ‘struct ipt_ECN_info’ declared inside parameter list will not be visible outside of this definition or declaration
   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: In function ‘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: error: invalid use of undefined type ‘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: error: ‘IPT_ECN_OP_SET_ECE’ undeclared (first use in this function); did you mean ‘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: note: each undeclared identifier is reported only once for each function it appears in
/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: error: invalid use of undefined type ‘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: error: invalid use of undefined type ‘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: error: ‘IPT_ECN_OP_SET_CWR’ undeclared (first use in this function); did you mean ‘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: error: invalid use of undefined type ‘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: error: invalid use of undefined type ‘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: error: invalid use of undefined type ‘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: error: invalid use of undefined type ‘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: error: invalid use of undefined type ‘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: In function ‘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: error: invalid use of undefined type ‘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: error: ‘IPT_ECN_OP_SET_IP’ undeclared (first use in this function); did you mean ‘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: error: passing argument 2 of ‘set_ect_ip’ from incompatible pointer type [-Werror=incompatible-pointer-types]
   82 |   if (!set_ect_ip(skb, einfo))
      |                        ^~~~~
      |                        |
      |                        const struct 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: note: expected ‘const struct ipt_ECN_info *’ but argument is of type ‘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: error: invalid use of undefined type ‘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: error: ‘IPT_ECN_OP_SET_ECE’ undeclared (first use in this function); did you mean ‘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: error: ‘IPT_ECN_OP_SET_CWR’ undeclared (first use in this function); did you mean ‘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: error: passing argument 2 of ‘set_ect_tcp’ from incompatible pointer type [-Werror=incompatible-pointer-types]
   87 |   if (!set_ect_tcp(skb, einfo))
      |                         ^~~~~
      |                         |
      |                         const struct 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: note: expected ‘const struct ipt_ECN_info *’ but argument is of type ‘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: In function ‘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: error: invalid use of undefined type ‘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: error: ‘IPT_ECN_OP_MASK’ undeclared (first use in this function); did you mean ‘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: error: invalid use of undefined type ‘const struct ipt_ECN_info’
  101 |  if (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: error: invalid use of undefined type ‘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: error: ‘IPT_ECN_OP_SET_ECE’ undeclared (first use in this function); did you mean ‘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: error: ‘IPT_ECN_OP_SET_CWR’ undeclared (first use in this function); did you mean ‘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: At top level:
/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: error: invalid application of ‘sizeof’ to incomplete type ‘struct ipt_ECN_info’
  116 |  .targetsize = sizeof(struct ipt_ECN_info),
      |                       ^~~~~~
cc1: some warnings being treated as errors
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] Error 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] Error 2
make[3]: *** Waiting for unfinished jobs....
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] Error 2
make[2]: *** Waiting for unfinished jobs....bilte

I successfully in virtualbox ubuntu built the kernel, but loading it in wsl2 gives an error. So, my question is, how to build an own linux kernel that can be used in wsl2?


Solution

  • I solved it. First problem was that the folder where I extracted the source was case insensitive as mentioned here Compiling Linux Kernel Error xt_CONNMARK.h After extracting i used config file from Ms WSL2 and modified to include kernel virtual machine. Now it compiled correctly and works.