移植DM9000C驱动

在这里插入图片描述
内核自带的DM9000驱动程序不能用于DM9000C上,把厂家提供的驱动程序移植到开发板上。
DM9000 是一个内存接口的芯片,两个同样接有 DM9000 的开发板,最小差异:基地址、位宽和中断引脚

1,基地址
在这里插入图片描述
地址线和数据线上挂有网卡芯片、内存和 NORFLASH。如何访问一个网卡设备而不被其他诸如“内存”或“NORFLASH”影响,则是将每个设备选中再访问。让“nGCS4”片选信号为低电平。
当只要 CPU 发出的物理地址是“0x2000_0000 - 0x2800_0000”之间时,引脚“(nGCS4)”就会变成低电平。所以基地址根据这个物理地址“0x2000_0000 - 0x2800_0000”设置而来。
在“入口函数”中设置“基地址”

iobase = (int)ioremap(0x20000000, 1024);

2.中断号
网卡芯片接收到数据后,会产生一个中断(网卡芯片里面也会有内存,因为它接收到数据后是先放在自已的内存里,然后再产生一个中断)。在“中断服务程序”里再将此缓存的数据从网卡芯片里拿出来构造成一个“skb_buff”,然后才提交上去。发送时也是从“skb_buff”里拿出数据交给网卡芯片。网卡芯片硬件就会再把数据从 skb_buff 中取出发送出去,发送完成后就会产生一个中断。
在这里插入图片描述
原理图上,DM9000C 的“INT”引脚最终接到了2440 的外部中断7 上“EINT7/GPF7”。查找到中断号后,在入口函数中指定此中断号。触发方式改为上升沿触发。

irq = IRQ_EINT7;
request_irq(dev->irq,&dmfe_interrupt, IRQF_TRIGGER_RISING,dev->name,dev)

3.设置时序
在这里插入图片描述
网卡是内存一样的接口,地址信号,读写脉冲,这些信号的读写时序会有要求。
CPU 发指令给内存控制器,再由“内存控制器”负责发读写、地址等信号给网卡芯片,这些信号间的时间要设置。所以还要设置内存控制器。

BWSCON(等待和位宽控制寄存器):位宽16位,不使用等待信号,使用数据掩码引脚
BANKCON4(控制寄存器):可编程的访问周期,控制访问时序。如:片选后多久发出地址信号,片选后多久发出读信号,读信号脉冲长度,读信号高电平片选维持多久,片选高电平地址信号维持多久。

测试DM9000C驱动程序:
1 把dm9dev9000c.c放到内核的drivers/net目录下
2. 修改drivers/net/Makefile
把obj- ( C O N F I G D M 9000 ) + = d m 9000. o 改 为 o b j − (CONFIG_DM9000) += dm9000.o 改为obj- (CONFIGDM9000)+=dm9000.oobj(CONFIG_DM9000) += dm9dev9000c.o
3. make uImage使用新内核启动
cp arch/arm/boot/uImage /work/nfs_root/uImage_dm9000c
4. 使用NFS启动
nfs 30000000 192.168.1.190:/work/nfs_root/uImage_dm9000c
bootm 30000000

ifconfig eth0 192.168.1.17
ping 192.168.1.1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值