【ARM&Linux】Linux子系统之网络子系统-网卡驱动分析
2018-02-22 16:07
423 查看
《Linux子系统之网络子系统-网卡驱动分析》
struct net_device:描述网卡驱动的结构
struct net_device_ops:设备操作统一接口操作集
struct sk_buff:网络数据包描述结构,一般命名为skb
网卡驱动架构分析
《cs89x0.c》网卡驱动分析,早期使用的网卡芯片1. 初始化分析
模块初始化入口:
int __init init_module(void)函数
//---------------------- 1. 分配net_device结构 -------------------// struct net_device *dev = alloc_etherdev(sizeof(struct net_local)); //--------------------------- 2. 初始化部分成员 -------------------// dev->irq = irq;// 2.1 初始化中断号 dev->base_addr = io;// 2.2 初始化基地址 //----------------------------- 更进一步初始化 -----------------------------------// ret = cs89x0_probe1(dev, io, 1); // 进入`cs89x0_probe1` 函数,查看更进一步的初始化: /** * 1. 初始化MAC * 2. 初始化netdev_ops dev->netdev_ops = &net_ops; * 3. 硬件初始化 * 4. 注册网卡驱动:retval = register_netdev(dev); *
2.数据发送分析
函数:
net_send_packet分析
netif_stop_queue(dev); //通知上层协议,暂停向网卡传送数据
对寄存器操作,将skb中的数据写入寄存器,让网卡发走
释放skb结构空间,
dev_kfree_skb (skb);
发送完之后,会产生中断(在中断函数中(
net_interrupt)的
netif_wake_queue),以此通知上层协议可以再次向网卡传送数据了。
3.数据接收分析
中断处理函数:
net_interrupt->
net_rx函数
读取接收状态
读取接收到的数据长度
分配skb结构:
读取寄存器中的数据放到skb中
将数据包向上丢给协议栈处理
相关文章推荐
- Arm linux启动分析(5)
- [arm 驱动]Linux输入子系统分析
- 【ARM&Linux】core dump程序故障分析调试
- Linux 网络子系统 sk_buffer 详细分析 转载自小马哥博客
- Linux时间子系统之(十七):ARM generic timer驱动代码分析
- 【ARM&Linux】TCP网络编程模型
- Linux 网络子系统底层机制分析(1)
- 全网络对Linux input子系统最清晰、详尽的分析
- linux网络协议栈(四)链路层 (3)邻居子系统&ARP
- Linux 网络子系统 sk_buffer 详细分析 转载自小马哥博客
- Linux内核网络子系统数据发送模块分析(MAC802.11-OpenWRT)
- Linux I2C子系统分析-I2C总线驱动&&Linux I2C子系统分析-I2C设备驱动
- Arm linux启动分析(1)
- Linux时间子系统(十七) ARM generic timer驱动代码分析
- Arm linux启动分析(1)
- linux网络子系统内核分析
- 2009-2010网络最热的 嵌入式学习|ARM|Linux|wince|ucos|经典资料与实例分析 完整版
- Arm linux启动分析(2)
- linux网络协议栈(四)链路层 (3)邻居子系统&ARP
- Arm linux启动分析(2)