我最近购买了一个以太网转 USB 适配器。
当我将其插入运行 Linux(在我的例子中为 Ubuntu)的计算机时,它会自动工作,并且我可以通过此界面看到互联网连接,而无需执行任何操作。
我想知道的是,在不安装任何特定驱动程序的情况下,这是如何工作的?
我猜想当这个设备插入时,udev 会对其进行设置,但是它如何知道这个 USB 设备实际上用作连接到以太网的接口,从而通过它路由流量?
检测和管理此问题的代码在哪里?提前致谢
答案1
在不安装任何特定驱动程序的情况下,这是如何工作的?
大多数发行版默认提供的 Linux 内核已经包含大量驱动程序。大多数以太网到 USB 适配器在 USB 描述符中标记为CDC装置,因此标准驱动程序之一(有多种变体)适用于大多数设备。
我猜想当这个设备插入时,udev 会对其进行设置,但是它如何知道这个 USB 设备实际上用作连接到以太网的接口,从而通过它路由流量?
所有内核模块都可以包含描述它们可以用于哪些设备的模式。这些模式称为alias
.例如,如果您这样做modinfo cdc_ether
,您将看到相当多以 开头的别名usb
。其余别名与 USB 描述符中的值匹配。
所有别名都收集到一个modules_alias
文件中(在 中/lib/modules/<kernel_version>/
),然后内核使用该文件来决定在发现新设备(USB 或其他设备)时激活哪个驱动程序。
驱动程序本身将负责告诉内核它代表的设备在其他内核层(例如网络接口)中具有表示形式。然后,这些上层将处理其他步骤,有时使用与用户空间的交互来初始化网络接口、设置路由等。
答案2
你已有安装了驱动程序。它很可能只是一个使用 USB-net 驱动程序的适配器。系统通过 中的 ID 知道设备lsusb
。