设为首页 加入收藏

TOP

设计Linux系统网络设备驱动程序(六)
2010-12-30 20:36:04 】 浏览:7334
Tags:设计 Linux 系统 网络设备 驱动程序
wner成员,因为使用模块类型驱动,会将dev-owner指向对象modules结构指针。
SET_MODULE_OWNER(dev);
//检测dev->base_addr是否合法,是则执行ne-probe1()函数检测过程。不是,则需要自动检测。
if (base_addr > 0x1ff)
return ne_probe1(dev, base_addr);
else if (base_addr != 0)
return -ENXIO;
//如果有ISAPnP设备,则调用ne_probe_isapnp()检测这种类型的网卡。
if (isapnp_present() && (ne_probe_isapnp(dev) == 0))
return 0;
…//省略
return -ENODEV;
}


这其中两个函数ne_probe_isapnp()和ne_probe19()的区别在于检测中断号上。PCI方式只需指定I/O基地址就可以自动获得IRQ,是由BIOS自动分配的;而ISA方式需要获得空闲的中断资源才能分配。

3.网络接口设备打开和关闭

网络接口设备打开就是激活网络接口,使它能接收来自网络的数据并且传递到网络协议栈的上面,也可以将数据发送到网络上。设备关闭就是停止操作。

在NE2000网络驱动程序中,网络设备打开由dev_open()和ne_open()完成,设备关闭有dev_close()和ne_close()完成。它们相应调用底层函数ei_open()和ei_close()来完成。其实现过程相对简单,不再赘述。

4.数据包接收和发送

在驱动程序层次上的发送和接收数据都是通过低层对硬件的读写来完成的。当网络上的数据到来时,将触发硬件中断,根据注册的中断向量表确定处理函数,进入中断向量处理程序,将数据送到上层协议进行处理。

对NE2000网卡的数据接收过程是由ne_probe()函数中的中断处理函数ei_interrupt来完成的。在进入ei_interrupt()之后再通过ei_receive()从8309的接收缓冲区获得数据,并组合成sk_buff结构,再通过netif_rx()函数将接收到的数据存放在系统的饿接收队列之中。

Ei-interrupt()的函数原型:void ei_interrupt(int irq,void *dev_id, struct pt_
首页 上一页 3 4 5 6 下一页 尾页 6/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Linux部分命令简介 下一篇Linux系统调用跟我学――僵尸进程

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目