您的位置:首页 > 运维架构 > Linux

mini2440使用linux 3.0内核,默认总线时序过快造成网络数据错误率高的问题

2012-11-23 02:50 337 查看
因需要测试CAN,2.6内核没有包含MCP251x的驱动。

把3.0的驱动移植到2.6中改动比较多,索性直接使用3.0的内核。

linux官方已直接支持mini2440,使用默认的配置编译就可以工作。

但发现网络性能很差,抓包发现数据经常有错误。

考虑到使用原来的程序网络都正常,怀疑是因为总线速率过快的原因。

对比友善之臂发布的2.6.32的dm9000的驱动,发现里面有添加时序配置的部分。

把这部分添加到3.0内核的dm9000驱动中,问题解决。

代码片段:

#if defined(CONFIG_ARCH_S3C2410)
#include <mach/regs-mem.h>
#endif

static int __init
dm9000_init(void)
{
#if defined(CONFIG_ARCH_S3C2410)
unsigned int oldval_bwscon = *(volatile unsigned int *)S3C2410_BWSCON;
unsigned int oldval_bankcon4 = *(volatile unsigned int *)S3C2410_BANKCON4;
*((volatile unsigned int *)S3C2410_BWSCON) =
(oldval_bwscon & ~(3<<16)) | S3C2410_BWSCON_DW4_16 | S3C2410_BWSCON_WS4 | S3C2410_BWSCON_ST4;
*((volatile unsigned int *)S3C2410_BANKCON4) = 0x1f7c;
#endif
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐