dm9000 驱动的感性认识

  • 在给上层的ops处dm9000 精简代码,其他不变
dm9000_ethtool_ops 去掉可以运行
dm9000_netdev_ops 精简到如此地步可运行
1385 static const struct net_device_ops dm9000_netdev_ops = {                         
1386     .ndo_init       = dm9000_init,    // 里面什么都没做                                            
1387     .ndo_open       = dm9000_open,                                               
1388     .ndo_stop       = dm9000_stop,                                               
1389     .ndo_start_xmit     = dm9000_start_xmit,
}
  • 精简net目录下的配置
CONFIG_NET=y
CONFIG_INET=y
CONFIG_IP_PNP=y
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
CONFIG_HAVE_NET_DSA=y
CONFIG_NET_RX_BUSY_POLL=y
CONFIG_BQL=y
CONFIG_WIRELESS=y
CONFIG_MAC80211_STA_HASH_MAX_SIZE=0
CONFIG_ETHTOOL_NETLINK=y
CONFIG_HAVE_EBPF_JIT=yCONFIG_SUNRPC=n
CONFIG_IPV6=n
CONFIG_UNIX=n
  • dm9000 在内核中的启动流程
[    1.320133] dm9000 dm9000.0: IRQ index 1 not found
[    1.500082] DM9000 INIT
[    1.504639] eth0: dm9000a at d08cc000,d0900004 IRQ 108 MAC: 08:90:00:a0:90:90 (platform data)...之后做了 dm9000_open 和 工作任务 	//  这一行和 下两行的效果类似于 在用户空间 做 ifconfig eth0 up
dm9000 dm9000.0 eth0: link down  // dm9000_open -> mii_check_media 打印的
来了一次 dm9000_interrupt 和 工作任务...// 以下来自于 ip_auto_config
IP-Config: Guessing netmask 255.0.0.0
IP-Config: Complete:device=eth0, hwaddr=08:90:00:a0:90:90, ipaddr=10.10.11.120, mask=255.0.0.0, gw=255.255.255.255host=10.10.11.120, domain=, nis-domain=(none)bootserver=255.255.255.255, rootserver=255.255.255.255, rootpath=dm9000 dm9000.0 eth0: link up, 100Mbps, full-duplex, lpa 0x4DE1
  • 用户态得到的信息
/etc/init.d/ip.sh:1:ifconfig eth0  192.168.1.120 netmask 255.255.255.0  up
root=/dev/mmcblk0p2 rw rootfstype=ext3 console=tty0 console=ttySAC0,115200 init=/linuxrc ip=10.10.11.120 rootwait
# cat /proc/interrupts CPU0       
108:       1546  s3c-eint     Level     eth0

# cat /proc/iomem 
18000000-18000003 : dm9000.018000000-18000003 : dm9000
18000004-180fffff : dm9000.018000004-180fffff : dm9000
  • ping 与 中断的关系
ping 一下得到了 2,3次或4次中断?# cat /proc/interruptsCPU0       
108:       3278  s3c-eint     Level     eth0
# ping 192.168.1.1 -c 1 && cat /proc/interrupts
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: seq=0 ttl=64 time=4.769 ms--- 192.168.1.1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 4.769/4.769/4.769 msCPU0       
108:       3282  s3c-eint     Level     eth0
什么时候会xmit
只要ifconfig eth0 up了,会不间断的xmit(谁做的,TODO),不是等间距时间的另外主动调用ping , 也会做一个 xmit
down了之后还会中断吗
不会,down 动作会 关闭中断
up 了之后一直来中断
ifconfig eth0 down/up
只有在当前为down 的时候 up,才会陷入内核让他up
只有在当前为up  的时候 ddown,才会陷入内核让他down
ifconfig eth0 192.168.1.120 netmask 255.255.255.0
会操作到硬件吗?
不会调用到 ops 中的函数,只有up或者down 才有可能


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部