移植DM9000C驱动程序之确定相异性
来源:互联网 发布:淘宝小二人工服务电话 编辑:程序博客网 时间:2024/06/05 17:04
内核自带的DM9000驱动程序不能用在DM9000C上面
厂家驱动dm9dev9000c
一 原理图
用什么地址访问网卡芯片,根据片选nGCS4为低电平时选中
2440手册内存控制器部分可以知道芯片地址
在不同开发板上的区别(基地址 位宽 中断引脚)
所以移植的关键是找出相异性并进行修改
二厂家驱动修改
1dmfe_probe1函数
(1)入口函数调用的dmfe_probe函数
分配 设置 注册 net_device结构体
如何设置到函数dmfe_probe1里面看
想读寄存器,先把地址写到索引寄存器里面,再读数据寄存器
outb(DM9KS_VID_L, iobase); /*写 DM9000C的索引寄存器(cmd引脚为0) */
DM9KS_VID_L是寄存器地址
id_val = inb(iobase + 4); /* 读DM9000C的数据寄存器(cmd引脚为1) */
这里地址值加4,表示bit2,
DM9000网卡部分
s3c2440部分
为什么2440只有27根地址线?
答:2440地址空间分为8个bank,每个bank为128M(即为2^27),nGCS[0:7]作为bank的片选信号,总的寻址空间为128M*8=1G。
(2)iobase的设置(入口函数)
iobase = (int)ioremap(0x20000000, 1024);//基地址是0x20000000,映射1M
(3)中断号
看原理图,网卡芯片收到数据后会产生1个中断,网卡芯片里面也会有内存的,收到数据后会先放在内存,然后产生中断。在中断服务程序里面把数据从网卡芯片里面拿出来。构造1个sk_buff,然后提交上去,发送的时候从sk_buff把数据拿出来,扔给网卡芯片发送出去,发送完后产生1个中断,需要中断号。
看原理图看中断引脚接到2440的哪1个引脚
外部中断7
在入口函数设置中断
irq = IRQ_EINT7;
2dmfe_open函数
注册中断(可以是上升沿触发或下降沿触发)
request_irq(dev->irq,&dmfe_interrupt, IRQF_TRIGGER_RISING,dev->name,dev)
irq是中断号
dmfe_interrupt是中断处理函数
IRQF_TRIGGER_RISING表示上升沿触发
3 时序修改
读写脉冲信号时序肯定会有要求,有时间上的要求
网卡接在2440上的,内存控制器负责发出读写信号,地址信号,信号时间的设置在内存控制器里面设置,这里没有设置也能用是因为uboot帮我们设置好了。想写1个不依赖uboot的驱动程序需要在入口函数中设置
/* 设置S3C2440的memory controller */
bwscon = ioremap(0x48000000, 4);//总线位宽和等待状态寄存器
bankcon4 = ioremap(0x48000014, 4);
片选4
BWSCON
/* DW4[17:16]: 01-16bit 位宽
* WS4[18] : 0-WAIT disable 不使用等待信号
* ST4[19] : 0 = Not using UB/LB (The pins are dedicated nWBE[3:0])
不了解取缺省值
*/
val = *bwscon;
val &= ~(0xf<<16); //先将4个bit位置0
val |= (1<<16); //再进行置位
*bwscon = val;
- 移植DM9000C驱动程序之确定相异性
- 移植DM9000C驱动程序之设置时序
- 移植DM9000C驱动程序之测试及内存控制器简介
- DM9000C的驱动移植
- 11-S3C2440驱动学习(五)嵌入式linux-网络设备驱动(二)移植DM9000C网卡驱动程序
- linux内核移植-DM9000C移植笔记
- DM9000C
- 05-S3C2440学习之内核(移植)linux3.4.2移植(3)之支持DM9000C网卡及修改支持串口2
- 移植驱动到内核学习笔记1-----DM9000C驱动
- DM9000C在linux3.1,S3C2416移植过程分析
- Server.Execute和#include相异之处
- 关于驱动程序的可移植性
- 数据矩阵与相异性矩阵
- 数值属性的相异性:闵可夫斯基距离
- 混合类型数据的相异性
- 相似性和相异性的度量
- 笔记:Python 与 matlab 的相异之处
- 移植RT3070AP驱动程序
- dhclient命令
- Linux基本命令
- Android xUtils3完全解析 是时候来了解xUtils3了
- HDU 5974 A Simple Math Problem(简单数学)
- Android Apk包安装应用闪退,出现 java.lang.RuntimeException Unable to instantiate application Caused by: java
- 移植DM9000C驱动程序之确定相异性
- [莫比乌斯反演] BZOJ 4816 [Sdoi2017]数字表格
- RMQ问题
- 【转载】零基础入门深度学习(1)
- 获取对话框句柄 对话框指针
- 什么是对象?
- Iterative Reweighted Least Squares
- Dll注入技术之APC注入
- javascript中从字符串中抽取和切割字符串的方法