如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
LinuxDM9000网卡驱动程序完全分析说明1:本文分析基于内核源码版本为linux-2.6.31说明2:本文在理解了linux中总线、设备和驱动模型的基础上加以分析代码虽然Linux驱动程序应该是和具体的硬件平台分离的,但是为了更好的理解DM9000的驱动程序,这里还是结合一下Mini2440开发板,这样也可以更好的体会如何实现驱动和平台分离。本文分成以下几个部分:一、Mini2440开发板上DM9000的电气连接和Mach-mini2440.c文件的关系。二、两个重要的结构体介绍:sk_buff和net_device三、具体代码分析Mini2440开发板上DM9000的电气连接和Mach-mini2440.c文件的关系Mini2440开发板上DM9000与S3C2440的连接关系如下:其中片选信号AEN使用了nGCS4,所以网卡的内存区域在BANK4,也就是从地址0x20000000开始。DM9000的TXD[2:0]作为strappin在电路图中是空接的,所以IObase是300H。中断使用了EINT7。这些内容在Mach文件中有如下体现:HYPERLINK"http://blog.csdn.net/ypoflyer/article/details/6209922"\o"viewplain"viewplainHYPERLINK"http://blog.csdn.net/ypoflyer/article/details/6209922"\o"copytoclipboard"copytoclipboardHYPERLINK"http://blog.csdn.net/ypoflyer/article/details/6209922"\o"print"printHYPERLINK"http://blog.csdn.net/ypoflyer/article/details/6209922"\o"?"?#defineS3C2410_CS4(0x20000000)#defineMACH_MINI2440_DM9K_BASE(S3C2410_CS4+0x300)staticstructresourcemini2440_dm9k_resource[]__initdata={[0]={.start=MACH_MINI2440_DM9K_BASE,.end=MACH_MINI2440_DM9K_BASE+3,.flags=IORESOURCE_MEM},[1]={.start=MACH_MINI2440_DM9K_BASE+4,.end=MACH_MINI2440_DM9K_BASE+7,.flags=IORESOURCE_MEM},[2]={.start=IRQ_EINT7,.end=IRQ_EINT7,.flags=IORESOURCE_IRQ|IORESOURCE_IRQ_HIGHEDGE,}};另外在Mach文件中还定义了DM9000平台设备,设备名称为“dm9000”,设备资源就是上面定义的IO和中断资源。代码清单如下:下:HYPERLINK"http://blog.csdn.net/ypoflyer/article/details/6209922"\o"viewplain"viewplainHYPERLINK"http://blog.csdn.net/ypoflyer/article/details/6209922"\o"copytoclipboard"copytoclipboardHYPERLINK"http://blog.csdn.net/ypoflyer/article/details/6209922"\o"print"printHYPERLINK"http://blog.csdn.net/ypoflyer/article/details/6209922"\o"?"?staticstructdm9000_plat_datamini2440_dm9k_pdata__initdata={.flags=(DM9000_PLATF_16BITONLY|DM9000_PLATF_NO_EEPROM),};staticstructplatform_devicemini2440_device_eth__initdata={.name="dm9000",.id=-1,.num_resources=ARRAY_SIZE(mini2440_dm9k_resource),.resource=mini2440_dm9k_resource,.dev={.platform_data=&mini2440_dm9k_pdata,