1 网络设备驱动框架
1 网络设备
网络设备:用于在网络中收、发数据或传输数据的设备
网络设备=网络终端设备+网络中继设备
linux的网络设备并不是使用文件作为用户程序访问网络设备的接口,所以在
/dev下并没有相应的网络设备文件,在Linux中,用户程序最终使用套接字来
访问网络设备。
Linux的网卡驱动程序处于OSI模型中的数据链路层,它的职责就是将上层协议
栈传过来的信息通过网卡发送出去,将网络设备接收到的数据传给上层协议栈。
(负责网络数据的收发)
2 模拟创建一个网络设备,将其添加到Linux内核中
init流程:
1 分配一个网络设备结构体
struct net_device *alloc_netdev(sizeof_priv, name, setup)
sizeof_priv:网卡私有数据 若无,给0
name:网卡名称
setup:函数指针--》函数(设置以太网的默认配置)
void (*setup)(struct net_device *)
ether_setup(p)-->内核函数,用来设置以太网的默认配置
返回值:指向网络设备结构体的指针(struct net_device *)
2 初始化该网络设备结构体
struct net_device {--》用来描述一个网络设备
char name[IFNAMSIZ];--》网卡名称
const struct net_device_ops *netdev_ops;--》操作设备的接口函数集
unsigned char *dev_addr;--》MAC地址
。。。。
}
static inline void eth_hw_addr_random(struct net_device *dev)
作用:给网络设备产生一个随机的MAC地址
基于Linux内核的驱动开发
最新推荐文章于 2023-10-20 22:27:05 发布