wych1013
驱动牛犊
驱动牛犊
  • 注册日期2007-04-17
  • 最后登录2007-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1698回复:0

dm9000网卡驱动初始化程序问题-连载1  

楼主#
更多 发布于:2007-04-17 10:36
  我最近在做网卡驱动,我会把做的过程中的问题贴出来,一来这里有高手可以解答,二来自己可以涨见识,还有就是以后研究网络驱动的盟友也可以参考参考,我会一部分一部分的贴出来的,就是麻烦高手可以给我和共同奋战在嵌入式第一线的盟友一个通俗,容易让我们懂得解释。今天是第一贴:关于网络驱动初始化段的问题。
在dx9000.c驱动程序中
1在初始化程序中
"writel(readl(gpfcon)|0xaa,gpfcon); //old"能不能把这一句换成在做字符驱动程序中的
“*(volatile unsigned int *)r_gpfcon &=(~0x00000040);"的形式阿,他们完成的任务都是一样的啊,都是写2410的寄存器。请问有什么区别?
2在初始化程序中
“outb(DM9000_VID_L, iobase);"能不能用writeb函数来实现,iobase也是通过ioremap映射到的虚拟地址

3outb(DM9000_VID_L, iobase);
id_val = inb(iobase + 4);
这么两句怎么就可以读出DM9000_VID_L寄存器的值呢?

4
#define DM9000_ID0x90000A46为什么就是这个90000A46呢?怎么定的?
#define DM9000_MIN_IO0x08000300 为什么就是这个08000300呢?怎么定的?

5outb(DM9000_VID_L, iobase);
id_val = inb(iobase + 4);
我觉得这两句不能读出DM9000里寄存器VID的值,我认为应该是
id_val=inb(iobase+DM9000_VID_L)这样才对,因为这样才是读VID的寄存器,我不知道对不对,请解释解释?

6id_val = inb(iobase + 4);这里面的iobase+4是数据地址,为什么就是数据地址呢?我怎么知道呢?

7request_region(iobase, 2, dev->name);这一句是不是应该放在初始化函数的前端,至少也要放在outb,inb语句之前吧?设备驱动程序书说:“在尚未取得对端口独占之前,我们不应对这些端口进行操作,需要先声明”。
游客

返回顶部