当我设备内核启动时数据链路MAC和IP层以初始化好,这时候对方设备arp请求获得了我设备的MAC地址,就会发送大量的UDP数据过来,但是我设备的TCP/UDP层协议栈还没有初始化好,这时我设备数据链路MAC层收到了大量数据并往上层推的时候就发生了这问题.我想在内核里加个标签,使TCP/IP协议栈全部初始化好后再让网卡配置MAC地址,这样应该可以避免问题了吧.
谁能给我说说内核启动时TCP/IP协议栈和网卡驱动的初始化过程吗?都在什么文件中?我在什么地方加flag呢?
具体开发环境和现象如下:
我用fel8xx-2.0开发包中的cdk开发环境和linux2.4.4开发ppc860嵌入设备,很多时候设备断电时,有数据向设备IP地址发送,此时设备开机,串口打印如下内容 (此时脚本rc.sysinit还没有运行,我设备IP地址也还没有生效), 并在180秒后重启动,重启动后正常.有时侯相同操作又是正常的. 而如果没有数据向设备IP地址发送,此时设备开机后都好的.
IP: Protocols: ICMP, UDP, TCP, IGMP
IP: routing cache hash table of 512 buckets, 4Kbytes
Oops: kernel access of bad area, sig: 11
NIP: ....
.........
Call backtrace:
............
Kernel panic: Aiee, killing interrupt handler!
In interrupt handler - not syncing
Rebooting in 180 seconds..
5 个解决方案
#1
舒服,坐在沙发上学习,呵呵
#2
up
#3
建议去看看bsd的TCP/IP源码+TCP/IP详解第二卷
#4
感觉应该在设备启动完成后再把网络接口打开才对,就是在设备启动的过程中把网络接口断掉,
应用层有ifdown,ifup命令,如果在内核中就查查命令的源代码,看看命令是怎么实现的就行了。
应用层有ifdown,ifup命令,如果在内核中就查查命令的源代码,看看命令是怎么实现的就行了。
#5
网卡的driver是什么? 我觉得应该是driver的问题。
#1
舒服,坐在沙发上学习,呵呵
#2
up
#3
建议去看看bsd的TCP/IP源码+TCP/IP详解第二卷
#4
感觉应该在设备启动完成后再把网络接口打开才对,就是在设备启动的过程中把网络接口断掉,
应用层有ifdown,ifup命令,如果在内核中就查查命令的源代码,看看命令是怎么实现的就行了。
应用层有ifdown,ifup命令,如果在内核中就查查命令的源代码,看看命令是怎么实现的就行了。
#5
网卡的driver是什么? 我觉得应该是driver的问题。