初始化系统时,内核或 Berkeley Sockets 系统如何识别和初始化网络接口设备?在我的 Raspberry Pi Zero W 上,wifi 芯片作为附加到 SOC 上的 sdhost 适配器的设备进行连接。
我猜测当 SDhost 设备初始化时,其设备驱动程序会探测连接到 SDhost 的每个子设备 - pi 有 1) 一个实际的 SDCARD 和 2) wifi 芯片。 Sockets 代码必须以某种方式找出连接到 SDhost 的设备实际上是一个 wifi 设备。
构建自定义内核是我的失败。构建很干净。我来自 github.com/raspberrypi/linux 的 4.14.83+ 版本的 raspbian 找不到 wlan0 设备(我使用 gcc-linaro-arm-linux-gnueabihf-raspbian-x64 从 Ubuntu 进行交叉编译)。库存内核是版本 4.14.71+(它们与 crosstool-ng-1.22.0-88-g8460611 交叉编译)
我在内核代码中找到了 drivers/net/hosts/bcm2835.c 和 bcm2835-sdhost.c,希望它们包含处理 SDhost 上设备初始化的代码。
规格: pi 0 w 使用 Broadcom BCM2538 片上系统 (SOC),其中包含 SD 卡主机适配器。它通过 SDIO 接口连接到 Cypress CYW43455 wifi 芯片(我认为)和 microSD 插槽。
在具有可以找到 wifi 的内核的系统上,“ls -l /sys/class/net”显示:
wlan0 -> ../../devices/platform/soc/20300000.mmc/mmc_host/mmc1/mmc1:0001/mmc1:0001:1/net/wlan0
wlan0 位于 SOC 上的 MMC (SD) 主机上。
那么,哪一段代码查看设备(设备树?)并找出它是一个网络设备——或者套接字代码如何找到该设备? 如果我能找到该代码,那么我应该能够明白为什么它找不到 wifi 适配器。