When initializing the system how does the kernel, or the Berkeley Sockets system identify and initialize network interface devices? On my Raspberry Pi Zero W, the wifi chip is connected as a device attached to the sdhost adapter on the SOC.
I'm guessing that when the SDhost device is initialized, its device driver probes each child device connected to the SDhost -- the pi has 1) an actual SDCARD and 2) the wifi chip. Somehow the Sockets code must find out that the device connected to the SDhost is actually a wifi device.
Building a custom kernel was my downfall. The build was clean. My version 4.14.83+ build of raspbian from github.com/raspberrypi/linux can't find the wlan0 device (I was cross compiling from Ubuntu using gcc-linaro-arm-linux-gnueabihf-raspbian-x64). The stock kernel is version 4.14.71+ (which they cross compiled with crosstool-ng-1.22.0-88-g8460611)
I've found in the kernel code drivers/net/hosts/bcm2835.c and bcm2835-sdhost.c, hoping that they would contain code that handles initialization of devices on the SDhost.
Specifics: The pi zero w uses a Broadcom BCM2538 system on chip (SOC) with and sdcard host adapter in it. This connects by the SDIO interface to a Cypress CYW43455 wifi chip(I think) and the microSD socket.
On a system with a kernel that can find the wifi, 'ls -l /sys/class/net' shows:
wlan0 -> ../../devices/platform/soc/20300000.mmc/mmc_host/mmc1/mmc1:0001/mmc1:0001:1/net/wlan0
that the wlan0 is on the MMC (SD) host on the SOC.
So, what piece of code looks through the devices (device-tree?) and figures out that it is a network device -- or how does the Sockets code find the device? If I can find that code, then I should be able to see why it doesn't find the wifi adapter.