《Linux2.6 下DM9000网卡驱动》.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux2.6.14 下已经有DM9000的驱动源代码,我们要做的工作是使内核支持它,移植的关键是接口与中断。其它工作就完全交给源代码了。 移植工作包括三件事情: 1、?要让系统能检测到2、?初始化3、?让驱动找到收发的接口,也就是中断DM9000 默认I/0 基地址为300H。CMD 引脚用于设置COMMAND 模式,CMD为高时,选择数据端口。CMD为低时,选地址端口。数据端口和地址端口的地址码由下式决定:   DM9000地址端口=高位片选地址+300  DM9000数据端口=高位片选地址+300H+4H EXPORT_SYMBOL(s3c_device_dm9000) 声明。被mach-smdk2410.c调用。 static struct resource s3c_dm9000_resource[] = { [0] = { .start = S3C2410_CS1+0x300, .end?? = S3C2410_CS1+0x300+0x3, .flags = IORESOURCE_MEM, }, [1]={ .start = S3C2410_CS1+0x300+0x4, .end = S3C2410_CS1+0x300+0x4+0x7c, .flags = IORESOURCE_MEM, }, [2] = { .start = IRQ_EINT0, .end?? = IRQ_EINT0, .flags = IORESOURCE_IRQ, } }; static struct dm9000_plat_data s3c_device_dm9000_platdata = { .flags= DM9000_PLATF_16BITONLY, }; struct platform_device s3c_device_dm9000 = { .name= dm9000, .id= -1, .num_resources= ARRAY_SIZE(s3c_dm9000_resource), .resource= s3c_dm9000_resource, .dev= { .platform_data = s3c_device_dm9000_platdata, } }; EXPORT_SYMBOL(s3c_device_dm9000);?????? 二:在devs.h 中加入以下这句声明: extern struct platform_device s3c_device_dm9000; ? 三:打开arch/arm/mach-s3c2410/mach-smdk2410.c将dm9000加入到要初始化的设备链表里去,内核启动时将会检测设备并加载驱动static struct platform_device *smdk2410_devices[] __initdata = { ?????? s3c_device_usb, ?????? s3c_device_lcd, ?????? s3c_device_wdt, ?????? s3c_device_i2c, ?????? s3c_device_iis, ?????? s3c_device_dm9000, //add here }; 四:在驱动源代码里,加入:使能EINT0中断,设备中断类型,总线带宽和等待时间控制,BANKCON1总线控制。 所有要用到的寄存器所在的物理地址以及各位参数的意义参考S3C2410用户手册。 打开linux-2.6.14/driver/net/dm9000.c 在开头部分加入CPU中断寄存器的地址定义: #define BWSCON (0 //总线带宽和等待时间控制寄存器 #define BANKCON1 (0 // BANKCON1总线控制 #define EXTINT0 (0 //EINT0号中断控制 #define INTMSK (0x4A000008) //中断使能控制 #define INTMOD (0x4A000004) //中断类型控制 找到dm9000_probe() 函数, 该函数在模块加载时被调用。作用是探测设备,并记录设备型号和相关信息,在 该函数中要设置相关的中断。把控制字写入相关寄存器。 在函数开始部分加入以下内容: static void *bwscon, *bankcon1, *extint0, *intmsk, *intmod; bwscon=ioremap_nocache(BWSCON, 4); bankcon1=ioremap_nocache(BANKCON1, 4); ettint0=ioremap_nocache(EXTINT0, 4);

文档评论(0)

ghfa + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档