LAN7515

树莓派型号3B+与型号3B比一比 (rs-online.com)

2018新款 树莓派3B+ - Raspberry Pi (树莓派) - 极客工坊 - Powered by Discuz! (geek-workshop.com)

最新树莓派 3B+:你想要的功能我们都加上了! - DIY/开源硬件专区 - 电子工程世界-论坛 (eeworld.com.cn)

树莓派3B+ 搭载千兆网卡 LAN7515,不过其使用的是 USB2.0 通路,最高理论速度为 480Mbps,综合后官方给出了 300Mbps 的传输速度。

RK3399平台开发系列讲解(高速设备驱动篇)6.64、USB 协议标准_内核笔记-CSDN博客

lan78xx

驱动为 lan78xx

网口颜色

绿色:100M

黄色:1000M

ethtool

以太网工具

calltree

树莓派网卡收发流程

rx

tasklet_schedule(&dev->bh);	// USB 收到数据时,产生中断,触发该任务
lan78xx_bh()
    lan78xx_rx_bh()
        rx_submit()
            usb_fill_bulk_urb()	// 从 USB 读取数据
            tasklet_schedule(&dev->bh);
                lan78xx_bh()
                    rx_process()
                        lan78xx_rx()
                            lan78xx_skb_return()
-----上面为驱动-------下面为数据链路层-----------------------
                                netif_rx()	// 送入数据链路层

tx

struct net_device_ops {
	.ndo_start_xmit		= lan78xx_start_xmit,
}
-----上面为数据链路层-------下面为驱动-----------------------
lan78xx_start_xmit()
	skb_queue_tail()	// 插入队列
	tasklet_schedule(&dev->bh);	// 触发任务调度 lan78xx_bh
		lan78xx_bh()
			lan78xx_tx_bh()
				skb_dequeue()	// 取出数据
------上面为驱动网络部分--------下面为驱动 USB 部分-----------
				usb_fill_bulk_urb()	// 填充数据到 USB
				usb_submit_urb()	// USB 发送数据

题外:platform 的 driver 和 device 之间 match

platform的driver和device之间match

match 有很多方法成立:

  1. 设备的 name 和驱动的 name 相同

    strcmp(pdev->name, drv->name) == 0
    
  2. 设备的名字出现在驱动的 ID 列表中

    if (pdrv->id_table)        
    	return platform_match_id(pdrv->id_table, pdev) != NULL;
    
  3. device tree 里面的 compatible 字段与驱动的 dt 兼容性字段匹配

    if (of_driver_match_device(dev, drv))        
    	return 1;
    

参考

Linux网络设备驱动 _驱动模型 - Abnor - 博客园 (cnblogs.com)

SKB包的接收,从网卡驱动到TCP层的处理流程_cupidove的专栏-CSDN博客_skb tcp 解决了rx疑问

urb分析,usb_fill_bulk_urb函数理解 USB 发送数据

linux 驱动probe 被调用流程分析 理解2 probe 何时被调用,以及 设备注册驱动注册的概念

Linux设备驱动节点里的bind与unbind echo “1-1.1.1:1.0” > /sys/bus/usb/drivers/lan78xx/bind

宋宝华:Linux设备与驱动的手动解绑与手动绑定 platform 的 driver 和 device 之间 match

Linux网络协议栈之数据包处理过程 netif_rx() 函数让内核准备进一步处理 skb

Linux网络设备驱动 _驱动模型 sk_buff