修改Linux内核导致网络无法使用问题解决

修改了linux2.6.37.6内核版本net/sched/sch_generic.c文件,在文件中添加:
+ #include <net/tcp.h>
static int pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc* qdisc){
   + struct tcphdr *th = tcp_hdr(skb);
   + __be16 dport = th->dest;
}
重新编译

make

make install

之后重启电脑,网络无法启动,检查kern.log文件,提示:
mii:disagree about version of symbol netif_carrier_off
mii:Unknown symbol netif_carrier_off(err -22)
mii:disagree about version of symbol netif_carrier_on
mii:Unknown symbol netif_carrier_on(err -22)

删掉增加的两句代码,只剩下头文件,重新编译也出现同样的问题。
 
网上找遍了答案,均无从解决。
浏览一个国外论坛时偶然发现这个类似的问题:
http://forums.gentoo.org/viewtopic-t-498246-start-0.html
里面一句话惊醒梦中人!" Did you 'make modules_install' after recompiling? "
尝试
make
make modules_install
make install
重启机器,问题解决!!
困扰了一个星期的问题,只因缺少这一步!
 
下面分析一下问题的原因:
加入#include <net/tcp.h>头文件之后,由于没有执行make modules_install,造成该模块的版本与内核版本不一致,由此产生kern.log中的错误提示。

你可能感兴趣的:(linux,struct,tcp,网络,linux内核)