· [Java论坛][安全论坛][数据库论坛][操作系统论坛]
· [专题] IBM Rational高峰论坛 Windows 7十大功能
· [专题] 史上就危险7月 微软 BizSpark 计划介绍
· [IT技术周刊][IT资源下载专区][病毒求助专区]
· [热点] 我也能做CTO_赛迪连载 赛迪七夕特别行动
· [热点] Chrome 4.0采用V8引擎 Java开发编程规范

Linux kernel2.6.25 CS8900网卡驱动移植

发布时间:2008.05.13 06:35     来源:赛迪网    作者:Ronnie

一般来说,我们在编译kernel时,设备驱动的选择有两种方式:一种是直接编译到kernel里,另一种是以模块方式挂接。CS8900网卡驱动如果以模块方式挂接,函数init_module就是入口;如果是直接编译到kernel里,那么函数cs89x0_probe才是入口。在此入口函数中,将完成网卡驱动的各项初始化。如注册虚拟地址,设备号,中断号,以及各个相关寄存器的初始化。

cs89x0_probe函数里会去调用真正的初始化函数cs89x0_probe1。下面说一下该初始化函数里需要完成的几个重要地方:

1、 注册虚拟地址。

通过request_region函数注册虚拟地址。在kenel里面,我们所操作的寄存器的地址其实都是虚拟地址,但是每一个寄存器的虚拟地址都有唯一和其对应的物理地址,因为在kernel里面任何虚拟地址都会通过MMU转化成物理地址。所以在kernel里,定义完所要用到的寄存器后,都必须使用一个函数ioremap将我们所要用到的寄存器的物理地址转换成为在kernel里可以操作的虚拟地址,然后才能将他们用以具体的操作,否则一切都是徒劳。

ioaddr = (int)ioremap(BASE_ADDR,16);

2、填充net_device结构体。

该结构体的成员都是和网络设备有关的变量。其中比较重要的有两个:dev_addr和open。dev_addr里要存的是主机的MAC地址,一般都是从eeproom中读出来再存放到该变量中,当然也可以根据自己的需要手动赋值。

for (i=0; i < ETH_ALEN/2; i++) {
  unsigned int Addr;
  Addr = readreg(dev, PP_IA+i*2);
  dev->dev_addr[i*2] = Addr & 0xFF;
  dev->dev_addr[i*2+1] = Addr >> 8;
}

Open是一个函数指针,需要把net_open函数赋值给他。net_open函数是一个专门用来注册网络设备中断号的函数,输入ifconfig命令时,最后就会调用到这个函数。在这个函数中要把中断号设置一下。

writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON); 
request_irq(dev->irq, &net_interrupt, 0, dev->name, dev);

3、 I/O端口的中断请求设置。

网卡不可能也不需要时时刻刻都处于中断状态,合理的中断触发时机是一个必要条件。根据硬件电路图的引脚可知,相对应的中断请求寄存器是GPG1和EINT9。在GPG1寄存器里面要把EINT9寄存器功能激活,而在EINT9寄存器里面则要把中断设置为上跳沿触发。

writel(readl(S 3C2410_GPGCON) | 0x8, S3C2410_GPGCON); 
writel(readl(S3C2410_EXTINT1) | 0x40, S3C2410_EXTINT1);

还有一点要注意,CS8900网卡的寄存器都是16位的,所以在选择读写函数时也必须选择16位寄存器的读写函数。

static u16 readword(unsigned long base_addr, int portno)
{
  return inw(base_addr + portno);
  }

  static void writeword(unsigned long base_addr, int portno, u16 value)
{
  outw(value, base_addr + portno);
}

以上便是Linux kernel2.6.25 CS8900网卡驱动移植所需注意的内容。Kernel里面涉及和兼容的东西非常多,去除容易产生冲突的部分,添加自己需要实现的功能,可以使得移植工作能够顺利进行。

(责任编辑:云子)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· Redhat AS5 Squid透明代理配置过程解析 (05-12) · Linux系统下SSH keygen免输入密码的方法 (05-12)
· 高手进阶:Linux系统下软阵列的管理介绍 (05-12) · Linux与Windows 通过samba互访共享资源 (05-12)
· 新手学堂:Linux系统下使用net send工具 (05-12) · Linux下/tmp文件目录引起不正常登录问题 (05-12)
· Linux系统下如何删除某个目录下大量文件 (05-12) · Linux系统Fcitx中文输入法开机启动方法 (05-12)
· 新闻观察 Linux操作系统下KDE 4.04发布 (05-12) · 业界动态 游戏引擎Valve Source奔向Linux (05-12)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
资讯 通信 IT产品 IT技术 信息化
专题:扭亏为盈 联想09年Q2翻番
·专题:Tech·Ed 2009微..
·直播:2009互联网大会..
·迅雷搜狐"互搏" 谁动了..
专题:诺基亚危局已现 或重蹈摩托覆辙
·六股势力角逐4G标准 中..
·专题:联通iPhone并不贵..
·专题:排排坐开商店 三..
商务演示需求分析 多媒体会议室必备投影
·VMware在京隆重举行2009..
·专题:笔记本频道10月热..
·专题:学生机市场 惠普 ..
专题:Tech.Ed 2009微软技术大会
·专题:2009 SYBASE 亚太..
·专题:微软新一代桌面操..
·专题:2009年第3届CSDN..