(在树莓派零w,内核4.14y上)无线适配器芯片似乎不是/dev fs中的设备,而是'ifconfig'知道的东西的名称。据我所知,这是 Berkley Sockets 的一个工件。
它是硬件,我假设它必须在设备树中提及——以导致加载某些驱动程序,但它不能在 /dev (devfs) 中创建条目。
套接字在哪里/如何找到这个不是设备的设备?
答案1
/dev
在 Linux 中,网络接口根本没有设备节点。
如果您需要可用网络接口的列表(例如在脚本中),请查看/sys/class/net/
目录;您将在每个界面看到一个符号链接。将列出每个已加载驱动程序的网络接口。
以编程方式,您可以使用if_nameindex()
系统调用:请参阅 Stack Overflow 上的这个答案。
另外,请注意,这/dev
是设备文件系统。
这设备树具有特定的不同含义:它是系统硬件组成的机器可读描述。它用于不具有即插即用功能的硬件总线或具有无法自动发现的硬件的系统。例如,ARM SoC(如 Raspberry Pi)上的 Linux 使用设备树。
RasPi 的启动顺序非常有趣:请参阅 RasPi.SE 上的这个问题。
简而言之,在启动时,在/boot/start.elf
文件的控制下,GPU/boot/*.dtb
在主 ARM CPU 启动之前加载相应的文件和 /boot/overlay/*.dtbo 文件。该*.dtb
文件是编译的设备树以二进制格式。它描述了每个特定 RasPi 型号上可以找到的硬件,并由设备树源码文件(.dts`)只是文本,以特定方式格式化。
设备树的内核实时映像可以在以下位置看到:/sys/firmware/devicetree/base 佩尔·西罗·桑蒂利,可以通过以下方式以 .dts 格式显示:
sudo apt-get install device-tree-compiler
dtc -I fs -O dts /sys/firmware/devicetree/base
您可以在此处找到设备树文件格式的规范。该规范旨在独立于操作系统。您可能还需要设备树参考作为对一些细节的澄清。
所以,你原来的问题的答案是这样的:
- Berkeley Sockets API 从内核获取网络接口
- 内核从设备树文件中获取必要的硬件信息
- 设备树文件由 GPU 根据
/boot/start.elf
配置加载/boot/config.txt
- 设备树文件最初是根据每个RasPi型号的硬件规格创建的,并编译为适当的二进制格式。
设备树扫描代码主要关注的是为每个硬件找到有效的驱动程序。它不会太关心每个设备的目的: 这是司机的工作。
驱动程序使用适当的*_register_driver()
内核函数来记录其自身的存在,采用设备树信息的适当部分来查找实际硬件,然后使用其他函数将该硬件注册为受其控制。一旦驱动程序初始化了硬件,它就会使用内核的register_netdev()
函数将自己注册为新的硬件网络接口,除其他外,这将使 Sockets API(它只是内核的另一个接口,而不是一个独立的实体)意识到网络接口的存在。
该驱动程序也可能会为其他事情注册自己:它将列出它支持的许多ethtool
操作,用于链路状态监控、流量统计和其他低级功能,无线网卡驱动程序也将使用register_wiphy()
它来声明自己为无线的具有特定 Wi-Fi 功能的网络接口。
Linux TCP/IP 堆栈有许多接口:Berkeley Sockets API 是应用程序员最熟悉的部分。 netdev API 本质上是同一枚硬币面向驱动程序的另一面。
答案2
wlan0 是由接口创建的接口,位于 /etc/network/ 中。设备本身是针对所述接口加载的固件的结构。我这样说是因为 wlan0 不是实际硬件的位置。它是一个软件构建的接口,为操作系统提供一种通过实际设备的固件定义与硬件对话的方式。因为您可以更改固件以修改实际硬件的行为方式,所以添加/删除功能会更改频率等。
O 和 ifup 和 ifdown 基本上是开关HeHehe...
看: https://manpages.debian.org/stretch/ifupdown/interfaces.5.en.html
答案3
-是的!是一个设备,无线网卡设备,和普通的网络设备一样eth0
,只是这个点/指的是无线设备...