Linux 设备驱动与网络设备全解析
1. 网络设备概述
网络设备与普通设备不同,它不通过设备节点访问,也没有主次设备号。内核会根据字符串和实例编号为网络设备分配名称。例如,网络驱动注册接口的代码如下:
my_netdev = alloc_netdev(0, "net%d", NET_NAME_UNKNOWN, netdev_setup); ret = register_netdev(my_netdev);首次调用时会创建名为net0的网络设备,第二次调用创建net1,依此类推。常见的网络设备名还有lo、eth0和wlan0,不过设备管理器(如udev)可能会更改这些名称。
通常,网络接口名称仅在使用ip和ifconfig等工具配置网络地址和路由时使用。之后,通过打开套接字间接与网络驱动交互,由网络层决定如何将数据包路由到正确的接口。不过,也可以在用户空间通过创建套接字并使用include/linux/sockios.h中列出的ioctl命令直接访问网络设备。以下是一个使用SIOCGIFHWADDR查询硬件(MAC)地址的示例代码:
#include