커널은 네트워크 인터페이스 장치를 어떻게 찾고 초기화합니까(Wi-Fi)?

커널은 네트워크 인터페이스 장치를 어떻게 찾고 초기화합니까(Wi-Fi)?

시스템을 초기화할 때 커널이나 Berkeley Sockets 시스템은 네트워크 인터페이스 장치를 어떻게 식별하고 초기화합니까? 내 Raspberry Pi Zero W에서 Wi-Fi 칩은 SOC의 sdhost 어댑터에 연결된 장치로 연결됩니다.

나는 SDhost 장치가 초기화될 때 장치 드라이버가 SDhost에 연결된 모든 하위 장치를 조사한다고 추측합니다. 파이에는 1) 실제 SDCARD와 2) Wi-Fi 칩이 있습니다. 소켓 코드는 SDhost에 연결된 장치가 실제로 Wi-Fi 장치인지 어떻게든 파악해야 합니다.

맞춤형 커널을 구축하는 것이 나의 몰락이었습니다. 만듦새는 깨끗합니다. github.com/raspberrypi/linux의 내 raspbian 버전 4.14.83 이상이 wlan0 장치를 찾을 수 없습니다(저는 gcc-linaro-arm-linux-gnueabihf-raspbian-x64를 사용하여 Ubuntu에서 크로스 컴파일하고 있습니다). 스톡 커널은 버전 4.14.71+입니다(crosstool-ng-1.22.0-88-g8460611로 크로스 컴파일됨).

SDhost에서 장치 초기화를 처리하는 코드가 포함되어 있기를 바라면서 커널 코드에서 drivers/net/hosts/bcm2835.c 및 bcm2835-sdhost.c를 찾았습니다.

사양: pi 0 w는 SD 카드 호스트 어댑터가 포함된 Broadcom BCM2538 시스템 온 칩(SOC)을 사용합니다. SDIO 인터페이스를 통해 Cypress CYW43455 Wi-Fi 칩(제 생각에는)과 microSD 슬롯에 연결됩니다.

Wi-Fi를 찾을 수 있는 커널이 있는 시스템에서 "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) 호스트에 있습니다.

그렇다면 어떤 코드 조각이 장치(장치 트리?)를 보고 그것이 네트워크 장치인지 알아냅니다. 또는 소켓 코드는 어떻게 장치를 찾습니까? 해당 코드를 찾을 수 있다면 Wi-Fi 어댑터를 찾을 수 없는 이유를 이해할 수 있을 것입니다.

관련 정보