免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1474 | 回复: 9
打印 上一主题 下一主题

[硬件及驱动] 网卡驱动的一些疑惑。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-10-28 20:35 |只看该作者 |倒序浏览
本帖最后由 yv9200 于 2015-11-20 15:49 编辑

之前用的是2.6.21的dm9000的驱动,现在是把2.6.33.7里面的ks8851的驱动移植到2.6.21的内核上,有些地方不是很明白,
1,2.6.33.7 ks8851的probe函数里面用的是 netdev->netdev_ops = &ks_netdev_ops;
                                                           netdev->ethtool_ops = &ks_ethtool_ops;
然后在include/linux/netdevice.h里面找到封装这个ops的结构体
                                                           struct net_device_ops {
        int                        (*ndo_init)(struct net_device *dev);
        void                        (*ndo_uninit)(struct net_device *dev);
        int                        (*ndo_open)(struct net_device *dev);
        int                        (*ndo_stop)(struct net_device *dev);
        netdev_tx_t                (*ndo_start_xmit) (struct sk_buff *skb,
                                                   struct net_device *dev);
        u16                        (*ndo_select_queue)(struct net_device *dev,
                                                    struct sk_buff *skb);
里面对应的是网卡驱动里的各种函数

在2.6.21的内核被我改成     netdev->open            = ks_net_open,
                                    netdev->stop            = ks_net_stop,
                                    netdev->do_ioctl        = ks_net_ioctl,
然后我看对应的netdevice.h里面也没有封装的函数指针,只是对应哪个结构体里的函数指针。
我想知道这个netdevice.h里面的函数指针是根据驱动里的功能函数定义的,还是根据根据内核底层需实现各种功能已经固定好了,不能修改?

2,现在的网卡驱动可以编译,但ifconfig 后
          Link encap:Ethernet  HWaddr 14:F0:9F:E5:14:F0  
          inet addr:192.168.4.100  Bcast:192.168.4.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
没有看到中断的信息,这个是中断问题,该从哪里找?接到别的网口上也ping不通。

现在调到这里不知道该如何往下进展,希望谁对这比较了解给点调试网卡驱动的建议,本人不甚感激。谢谢。。。


目前状态,phy已经正常,硬件连接可以正常,也可以ping通,也可以tftp  。
问题: ifconfig时    RX packets:0  TX packets:0总是0,还是没有中断的那个信息,但cat /proc/interrupt可以看到驱动的中断,谁知道这个是哪里的问题?

ifconfig 那个RX TX已经正常了,现在发现的新问题是RUNNING这个状态不变,无论有没有网线,谁知道这个需要改哪里的状态?
这个问题已解决。

新问题:网卡可以ping通,各种状态都是对的,当前网络风暴来时会出问题,在ping的时候网络风暴来,包就收不到了,当把网络风暴去的时候,又可以正常ping通,但网络风暴过后,ifconfig eth down/up就会出现oop错误 错误如下,假如ping的整个过程没有网络风暴,可以正常的up/down,求帮助,谢谢
~ $ ifconfig eth0 up
entering ks8851_open T0:100, T1:5000, N0:70, N1:0, P:1
Unable to handle kernel paging request at virtual address 00408224
pgd = c1a88000
[00408224] *pgd=00000000
Internal error: Oops: 5 [#1]
Modules linked in: at91_ether ks8851_mll sver rled
CPU: 0
PC is at fib_create_info+0x6f4/0x954
LR is at dev_get_by_index+0x10/0x38
pc : [<c01dd97c>]    lr : [<c0196a80>]    Not tainted
sp : c1865c40  ip : c1865c30  fp : c1865cfc
r10: 6400a8c0  r9 : 00000002  r8 : c1abc840
r7 : 00000000  r6 : c1abc7e0  r5 : 00000001  r4 : 004081c8
r3 : 004081c8  r2 : 00000018  r1 : 00000001  r0 : c02de828
Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  Segment user
Control: C000717F
Table: 21A88000  DAC: 00000015
Process ifconfig (pid: 757, stack limit = 0xc1864250)
Stack: (0xc1865c40 to 0xc1866000)
5c40: 00000001 00000000 00000000 ffffffed 00000000 00000000 00000000 00000000
5c60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
5c80: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
5ca0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
5cc0: 00000000 f223ffae 711f802c 4832c55a 7913de24 c1865d94 6400a8c0 00000020
5ce0: c1c7b6c8 c1d11c00 00000000 c1865d94 c1865d48 c1865d00 c01de7e8 c01dd298
5d00: 1f46a2ca 00000004 c1865d28 c1865d28 00000004 6400a8c0 00000000 c1c7b6a0
5d20: c1865d94 6400a8c0 c1d0e1a0 c1865d4c 00000002 00000000 00000018 c1865e00
5d40: c1865d4c c01dc8c0 c01de674 00020020 00000002 00000000 6400a8c0 00000000
5d60: 00000002 00000000 00000000 6400a8c0 00000000 00000000 00000000 00000000
5d80: 00000000 00000000 00000c00 00000000 00000000 fe020020 00000002 000000ff
5da0: 6400a8c0 00000000 00000002 00000000 00000000 6400a8c0 00000000 00000000
5dc0: 00000000 00000000 00000000 00000000 00000c00 00000000 00000000 c1d0e1a0
5de0: c1d0e1a0 0000a8c0 6400a8c0 c1aa6800 00ffffff c1865e2c c1865e04 c01dc950
5e00: c01dc808 c1d0e1a0 c1d0e1a0 c1aa6800 00000001 00000000 c1865ed8 c1aa6800
5e20: c1865e40 c1865e30 c01dce44 c01dc8e8 c02c4380 c1865e5c c1865e44 c0043c48
5e40: c01dcdec c1aa6800 00000000 00001002 c1865e6c c1865e60 c0043e18 c0043c1c
5e60: c1865e84 c1865e70 c019712c c0043e18 c1aa6800 00001043 c1865ea4 c1865e88
5e80: c0198940 c0197084 ffffff9d c1d0e1a0 c1c7b220 beb94cc0 c1865f10 c1865ea8
5ea0: c01d5414 c01988f0 c1864000 00000000 c1c7b22c 00008914 00001043 0000d524
5ec0: 401351c8 beb94f89 30687465 00000000 00000000 00000000 00001043 0000d524
5ee0: 401351c8 beb94f89 00008914 ffffffe7 beb94cc0 00000000 c0022d44 c1864000
5f00: beb94edc c1865f20 c1865f14 c01d694c c01d5144 c1865f40 c1865f24 c018ce88
5f20: c01d68ac c0365720 ffffffe7 00008914 00000000 c1865f5c c1865f44 c0081c10
5f40: c018ccc4 c0365720 beb94cc0 00000003 c1865f84 c1865f60 c0081eec c0081be4
5f60: 00001000 00000000 c0365720 fffffff7 00008914 00000036 c1865fa4 c1865f88
5f80: c0081f4c c0081c68 00000000 000b04fc 000b05cc 00000000 00000000 c1865fa8
5fa0: c0022ba0 c0081f1c 000b04fc 000b05cc 00000003 00008914 beb94cc0 000b04fc
5fc0: 000b04fc 000b05cc 00000000 000937b8 0000da10 00000004 beb94edc 000b0674
5fe0: 000c3844 beb94c68 0003949c 401d9f34 20000010 00000003 40229434 40229434
Backtrace:
[<c01dd288>] (fib_create_info+0x0/0x954) from [<c01de7e8>] (fn_hash_insert+0x184/0x630)
[<c01de664>] (fn_hash_insert+0x0/0x630) from [<c01dc8c0>] (fib_magic+0xc8/0xe0)
[<c01dc7f8>] (fib_magic+0x0/0xe0) from [<c01dc950>] (fib_add_ifaddr+0x78/0x13c)
[<c01dc8d8>] (fib_add_ifaddr+0x0/0x13c) from [<c01dce44>] (fib_netdev_event+0x68/0x94)
[<c01dcddc>] (fib_netdev_event+0x0/0x94) from [<c0043c48>] (notifier_call_chain+0x3c/0x54)
r4 = C02C4380
[<c0043c0c>] (notifier_call_chain+0x0/0x54) from [<c0043e18>] (raw_notifier_call_chain+0x10/0x14)
r6 = 00001002  r5 = 00000000  r4 = C1AA6800
[<c0043e08>] (raw_notifier_call_chain+0x0/0x14) from [<c019712c>] (dev_open+0xb8/0xc
[<c0197074>] (dev_open+0x0/0xc from [<c0198940>] (dev_change_flags+0x60/0x12
r5 = 00001043  r4 = C1AA6800
[<c01988e0>] (dev_change_flags+0x0/0x12 from [<c01d5414>] (devinet_ioctl+0x2e0/0x70
r7 = BEB94CC0  r6 = C1C7B220  r5 = C1D0E1A0  r4 = FFFFFF9D
[<c01d5134>] (devinet_ioctl+0x0/0x70 from [<c01d694c>] (inet_ioctl+0xb0/0xe0)
[<c01d689c>] (inet_ioctl+0x0/0xe0) from [<c018ce88>] (sock_ioctl+0x1d4/0x22c)
[<c018ccb4>] (sock_ioctl+0x0/0x22c) from [<c0081c10>] (do_ioctl+0x3c/0x84)
r7 = 00000000  r6 = 00008914  r5 = FFFFFFE7  r4 = C0365720
[<c0081bd4>] (do_ioctl+0x0/0x84) from [<c0081eec>] (vfs_ioctl+0x294/0x2b4)
r6 = 00000003  r5 = BEB94CC0  r4 = C0365720
[<c0081c58>] (vfs_ioctl+0x0/0x2b4) from [<c0081f4c>] (sys_ioctl+0x40/0x5c)
r7 = 00000036  r6 = 00008914  r5 = FFFFFFF7  r4 = C0365720
[<c0081f0c>] (sys_ioctl+0x0/0x5c) from [<c0022ba0>] (ret_fast_syscall+0x0/0x2c)
r6 = 00000000  r5 = 000B05CC  r4 = 000B04FC
Code: e0022001 e7934102 e3540000 0a000038 (e594505c)
Segmentation fault



                                                         

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
2 [报告]
发表于 2015-10-30 18:50 |只看该作者
问题1,net_driver的数据结构,在2.6的某个版本中发生了变化,把原来离散的open/close/xmit等接口合并到统一的ndo结构里了。

论坛徽章:
0
3 [报告]
发表于 2015-11-01 16:17 |只看该作者
是说我这么改,会有问题吗?回复 2# nswcfd


   

求职 : 通讯/电信开
论坛徽章:
2
2015亚冠之鹿岛鹿角
日期:2015-07-08 11:58:2615-16赛季CBA联赛之佛山
日期:2015-12-21 17:28:04
4 [报告]
发表于 2015-11-02 09:55 |只看该作者
函数指针的初始化是由底层的驱动完成的。

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
5 [报告]
发表于 2015-11-02 11:06 |只看该作者
回复 3# yv9200

个人觉得可以这么改。

论坛徽章:
2
天蝎座
日期:2014-07-23 21:17:122015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2015-11-02 18:05 |只看该作者
ifconfig 中应该可以看到 网卡 分配 的 irq 号
你这是没贴全还是没有

论坛徽章:
0
7 [报告]
发表于 2015-11-04 13:10 |只看该作者
我贴全了,就是没有那个中断。回复 6# polejo


   

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
8 [报告]
发表于 2015-11-04 18:33 |只看该作者
中断信息cat /proc/interrupts

论坛徽章:
0
9 [报告]
发表于 2015-11-05 09:44 |只看该作者
这个中断是有的。
回复 8# nswcfd

    ~ $ cat /proc/interrupts
           CPU0
  1:      16438         AIC  at91_tick, atmel_serial
13:          2         AIC  atmel_spi.0
26:         53         AIC  ks8851_mll
Err:          0

论坛徽章:
2
天蝎座
日期:2014-07-23 21:17:122015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2015-11-06 09:28 |只看该作者
   好奇瞅了下内核和ifconfig的源码。
1.
  ifconfig的看到统计都是附在struct net_device 下的stats,而它的各种成员需要驱动层在收发时显式地去更新维护的。
                /*
                 * Update device stats.
                 */
                atomic_add(1, (atomic_t *)&priv->stats.rx_packets);
                atomic_add(skb->len, (atomic_t *)&priv->stats.rx_bytes);

所以你现在网卡收发正常,那么只能是你的驱动没有去更新 dev->stats,才会看到都是0。

2. Interrupts 中断号:你看下源码,只有ifconfig从内核获取到irq非0时,才会打印出  Interrupt: irq
而内核返回给ifconfig的就是dev->irq。
这要看你的 platform_driver.probe  回调具体有没有初始化 dev->irq了。



yv9200 发表于 2015-11-05 09:44
这个中断是有的。
回复 8# nswcfd



您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP