树莓派以太网卡驱动
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
match 有很多方法成立:
-
设备的 name 和驱动的 name 相同
strcmp(pdev->name, drv->name) == 0
-
设备的名字出现在驱动的 ID 列表中
if (pdrv->id_table) return platform_match_id(pdrv->id_table, pdev) != NULL;
-
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