基于mini2440的Linux-3.18.108下以太网DM9000驱动的移植
程序员文章站
2022-06-05 17:29:25
...
基于mini2440的Linux-3.18.108下以太网DM9000驱动的移植
- 其实Linux3.18.108自带mini2440的DM9000驱动,只不过在开发板和宿主几互ping的时候,偶尔ping不通,偶尔又可以ping通但丢包率很高,且通过NFS挂载根文件系统不成功,所以说明自带的驱动还有很明显的BUG。
- 进入内核源码目录,输入如下命令,编辑dm9000驱动
vi drivers/net/ethernet/davicom/dm9000.c
- 在头文件包含的地方加入如下内容
#if defined(CONFIG_ARCH_S3C24XX)
#include <mach/regs-mem.h>
#endif
- 找到驱动挂载函数
static int __init dm9000_init(void)
,在函数开头加入如下内容:
#if defined(CONFIG_ARCH_S3C24XX)
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
- 因为我们包含了头文件regs-mem.h头文件,但通过在内核源码目录中搜索,我们发现,这个版本的内核没有这个头文件,所以我们需要从Linux-2.6.32内核源码中复制这个头文件到这里来,复制到目录 arch/arm/mach-s3c24xx/include/mach/ 即可。
- 重新编译内核,烧录,这时开发板和宿主机互ping就不会丢包了,NFS根文件系统也可以挂载上了。