我用是S3C44B0X(ARM7 TDMI)的板子,网卡的型号是RTL 8019AS,想搭建一个开发环境,将uclinux烧写到板子上之后可以正常运行,但网络却无**常工作,具体现象如下:
1. uclinux中执行ifconfig -a命令能够看到eth0网络接口。
2. 目标机和开发机之间相互都ping不通对方(注:开发机中已经关闭了防火墙)。目标机在执行ping时屏幕提示为:
NETDEV WATCHDOG: eth0: transmit timed out...
3. 目标机能够ping通自己。
4. 用bootloader能够通过网络下载文件,因此网卡和网线连接应该不会有问题。
5. 用cat /proc/interrupts命令发现网卡中断号在驱动程序中被配置为24号,并且不论怎样ping,24号中断次数始终是1次。
6. 查阅用户手册,网卡中断号应为EXTINT1,而驱动程序源码中配置的中断号是24。不知道这两者之间是否存在映射关系。为保险起见修改了网卡驱动程序源码中的中断号(没有依据,随便试了几个),现象依旧。(注:uclinux中用修改后的ne2000网卡驱动程序来驱动RTL 8019AS)
7. RTL 8019AS网卡可以工作在8位或16位模式。查阅用户手册,网卡用16位数据总线传输数据,因此猜测应以16位模式工作。结合网上查阅的资料,在16位模式下网卡的基地址应为0x60000300。查看驱动程序源码,发现寄存器基地址配置为0x60000000,将其改为0x60000300后现象依旧。
8. 从网上下载了另一个驱动程序的源码,编译后再烧写到板子上,现象和原先的驱动程序类似。
在网上进一步查阅一些资料,对问题原因有三点猜测:
1. 网卡中断的触发方式好像有高、低电平或上升沿、下降沿的区别,但不知道应该怎样修改源代码。
2. 中断向量表的配置是否存在问题,但网卡既然触发了一次中断,似乎这也不构成问题。不知道在源码中如何检查中断向量表的配置。
3. bootloader能够正常使用网络下载文件,bootloader与uclinux内核对网卡中断的处理是否存在冲突。
不知道这种情况该怎样解决?下面附上板子附带的bootloader和网上下载的网卡驱动程序源代码(没有发布超链接的权限,因此去掉了HTTP协议头),请大家帮忙看一下,谢谢!
rtl8019.rar : pan.baidu.com/share/link?shareid=256930&uk=2133253253
uClinux-bios.rar : pan.baidu.com/share/link?shareid=257081&uk=2133253253 |