网络接口卡驱动程序详解
1. 打开和关闭网络接口
当授权用户(如管理员)使用 ifconfig
或 ip
等用户空间工具配置网络接口时,内核会调用 ndo_open()
函数。该函数接收一个 struct net_device
对象作为参数,驱动程序应从中获取存储在 priv
字段中的特定设备对象。
网络控制器在接收或完成数据包传输时通常会引发中断,驱动程序需要注册一个中断处理程序。注册可以在 init()/probe()
例程或 open
函数中进行。有些设备需要通过在硬件的特殊寄存器中设置来启用中断,此时可以在 probe
函数中请求中断,并在 open/close
方法中设置/清除启用位。
open
函数应执行以下操作:
1. 更新接口 MAC 地址(如果用户更改了它,并且设备允许)。
2. 必要时重置硬件,并将其从低功耗模式中取出。
3. 请求任何资源(I/O 内存、DMA 通道、IRQ)。
4. 映射 IRQ 并注册中断处理程序。
5. 检查接口链接状态。
6. 调用 net_if_start_queue()
通知内核设备已准备好传输数据包。
以下是一个 open
函数的示例: