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

[复制链接]
3568|0
 楼主| wych1013 发表于 2007-4-17 09:57 | 显示全部楼层 |阅读模式
&nbsp;我最近在做网卡驱动,我会把做的过程中的问题贴出来,一来这里有高手可以解答,二来自己可以涨见识,还有就是以后研究网络驱动的盟友也可以参考参考,我会一部分一部分的贴出来的,就是麻烦高手可以给我和共同奋战在嵌入式第一线的盟友一个通俗,容易让我们懂得解释。今天是第一贴:关于网络驱动初始化段的问题。<br />在dx9000.c驱动程序中<br />1在初始化程序中<br />&quot;writel(readl(gpfcon)|0xaa,gpfcon);&nbsp;//old&quot;能不能把这一句换成在做字符驱动程序中的<br />“*(volatile&nbsp;unsigned&nbsp;int&nbsp;*)r_gpfcon&nbsp;&=(~0x00000040);&quot;的形式阿,他们完成的任务都是一样的啊,都是写2410的寄存器。请问有什么区别?<br />2在初始化程序中<br />“outb(DM9000_VID_L,&nbsp;iobase);&quot;能不能用writeb函数来实现,iobase也是通过ioremap映射到的虚拟地址<br /><br />3outb(DM9000_VID_L,&nbsp;iobase);<br />id_val&nbsp;=&nbsp;inb(iobase&nbsp;+&nbsp;4);<br />这么两句怎么就可以读出DM9000_VID_L寄存器的值呢?<br /><br />4<br />#define&nbsp;DM9000_ID0x90000A46为什么就是这个90000A46呢?怎么定的?<br />#define&nbsp;DM9000_MIN_IO0x08000300&nbsp;为什么就是这个08000300呢?怎么定的?<br /><br />5outb(DM9000_VID_L,&nbsp;iobase);<br />id_val&nbsp;=&nbsp;inb(iobase&nbsp;+&nbsp;4);<br />我觉得这两句不能读出DM9000里寄存器VID的值,我认为应该是<br />id_val=inb(iobase+DM9000_VID_L)这样才对,因为这样才是读VID的寄存器,我不知道对不对,请解释解释?<br /><br />6id_val&nbsp;=&nbsp;inb(iobase&nbsp;+&nbsp;4);这里面的iobase+4是数据地址,为什么就是数据地址呢?我怎么知道呢?<br /><br />7request_region(iobase,&nbsp;2,&nbsp;dev-&gtname);这一句是不是应该放在初始化函数的前端,至少也要放在outb,inb语句之前吧?设备驱动程序书说:“在尚未取得对端口独占之前,我们不应对这些端口进行操作,需要先声明”。<br />&nbsp;<br />&nbsp;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部