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.

  • Possible duplicate unix.stackexchange.com/questions/90027/… – Panther Nov 27 '18 at 3:18
  • I don't own a Zero W, but I can tell you how to find out: look through dmesg after boot on the kernel that can find the wifi, and note which module produces WLAN-related messages. Googling finds this issue, if I read this correctly, brcmfmac is the responsible module, and you need the correct firmware for it to work. Also note that "Berkeley sockets" is a red herring; that's a software layer way above the driver layer which is giving you trouble. – dirkt Nov 27 '18 at 7:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.