当前位置: 技术问答>linux和unix
linux内核加载驱动的oops错误求解
来源: 互联网 发布时间:2016-11-26
本文导语: 本人使用的是ARM linux的一块开发板,之前移植过一个USB转RJ45(USB有线网卡)的驱动,并可以成功运行,但是后来因为要用到网桥,所以重新编译了内核,把802.1d Ethernet Bridging 模块编进去了,但是之后在板子上的lin...
本人使用的是ARM linux的一块开发板,之前移植过一个USB转RJ45(USB有线网卡)的驱动,并可以成功运行,但是后来因为要用到网桥,所以重新编译了内核,把802.1d Ethernet Bridging 模块编进去了,但是之后在板子上的linux里,加载我的USB网卡驱动是没问题,但是配置那个网卡时就出错了,错误信息如下:root@FriendlyARM plg]# ifconfig eth1 10.0.0.1
eth1: rxqlen 0 --> 4
Unable to handle kernel NULL pointer dereference at virtual address 000000f2
pgd = c3ab4000
[000000f2] *pgd=33afd031, *pte=00000000, *ppte=00000000
Internal error: Oops: 17 [#1]
last sysfs file: /sys/devices/platform/s3c2410-ohci/usb1/1-1/dev
Modules linked in: asix
CPU: 0 Not tainted (2.6.32.2-FriendlyARM #14)
PC is at eth_type_trans+0x2c/0x11c
LR is at 0xf2
pc : [] lr : [] psr: 20000013
sp : c3af9bb8 ip : c3afe9c0 fp : c3af9bd4
r10: 00000052 r9 : c3ace2c0 r8 : c3afe300
r7 : c3ae5006 r6 : c3afe9c0 r5 : c3ace2c0 r4 : c3ace000
r3 : 000000f2 r2 : 00000000 r1 : 0000000e r0 : 00000100
Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
Control: c000717f Table: 33ab4000 DAC: 00000015
Process ifconfig (pid: 745, stack limit = 0xc3af8270)
Stack: (0xc3af9bb8 to 0xc3afa000)。。。
这里只贴了一部分错误,我的理解是在eth_type_trans这个函数中应该有指针为空的错误,然后就在驱动程序中找到了这个函数:void axusbnet_skb_return (struct usbnet *dev, struct sk_buff *skb)
{
int status;
skb->dev = dev->net;
skb->protocol = eth_type_trans (skb, dev->net);里面的两个应该都是不是空指针啊,为什么会报错呢?难道是网桥和网卡驱动有冲突?
eth1: rxqlen 0 --> 4
Unable to handle kernel NULL pointer dereference at virtual address 000000f2
pgd = c3ab4000
[000000f2] *pgd=33afd031, *pte=00000000, *ppte=00000000
Internal error: Oops: 17 [#1]
last sysfs file: /sys/devices/platform/s3c2410-ohci/usb1/1-1/dev
Modules linked in: asix
CPU: 0 Not tainted (2.6.32.2-FriendlyARM #14)
PC is at eth_type_trans+0x2c/0x11c
LR is at 0xf2
pc : [] lr : [] psr: 20000013
sp : c3af9bb8 ip : c3afe9c0 fp : c3af9bd4
r10: 00000052 r9 : c3ace2c0 r8 : c3afe300
r7 : c3ae5006 r6 : c3afe9c0 r5 : c3ace2c0 r4 : c3ace000
r3 : 000000f2 r2 : 00000000 r1 : 0000000e r0 : 00000100
Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
Control: c000717f Table: 33ab4000 DAC: 00000015
Process ifconfig (pid: 745, stack limit = 0xc3af8270)
Stack: (0xc3af9bb8 to 0xc3afa000)。。。
这里只贴了一部分错误,我的理解是在eth_type_trans这个函数中应该有指针为空的错误,然后就在驱动程序中找到了这个函数:void axusbnet_skb_return (struct usbnet *dev, struct sk_buff *skb)
{
int status;
skb->dev = dev->net;
skb->protocol = eth_type_trans (skb, dev->net);里面的两个应该都是不是空指针啊,为什么会报错呢?难道是网桥和网卡驱动有冲突?
|
网桥和网卡驱动不应该有冲突的,前者是调用了驱动的接口,如果出错应当是驱动提供接口内部错误了
如果是我,我会这么作首先排除驱动的问题,不编译桥模式进入内核,启动并配置USB网卡,然后使用网卡;
再打开桥模式重新测试。
内核出问题是比较难找的,耐心and good luck!
如果是我,我会这么作首先排除驱动的问题,不编译桥模式进入内核,启动并配置USB网卡,然后使用网卡;
再打开桥模式重新测试。
内核出问题是比较难找的,耐心and good luck!