dm9000 驱动的感性认识

文章详细描述了在Linux内核中对DM9000网络控制器的代码优化,包括去除不必要的ethtool_ops和精简netdev_ops。同时,展示了内核启动时DM9000的初始化过程,以及网络接口的状态变化,如linkup/down。此外,还讨论了IP配置、中断处理(ping操作引发的中断次数)以及ifconfig命令对设备的影响。
摘要由CSDN通过智能技术生成
  • 在给上层的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=y

CONFIG_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.255
     host=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.0
  18000000-18000003 : dm9000
18000004-180fffff : dm9000.0
  18000004-180fffff : dm9000
  • ping 与 中断的关系
ping 一下得到了 2,3次或4次中断?

# cat /proc/interrupts
           CPU0       
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 ms
           CPU0       
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 才有可能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值