How does the kernel find and initialize (wifi) network interface devices?











up vote
0
down vote

favorite












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.










share|improve this question







New contributor




Ribo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • Possible duplicate unix.stackexchange.com/questions/90027/…
    – Panther
    Nov 27 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 at 7:49















up vote
0
down vote

favorite












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.










share|improve this question







New contributor




Ribo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • Possible duplicate unix.stackexchange.com/questions/90027/…
    – Panther
    Nov 27 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 at 7:49













up vote
0
down vote

favorite









up vote
0
down vote

favorite











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.










share|improve this question







New contributor




Ribo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











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.







linux-kernel wifi raspberry-pi






share|improve this question







New contributor




Ribo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question







New contributor




Ribo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question






New contributor




Ribo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked Nov 27 at 3:05









Ribo

1055




1055




New contributor




Ribo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Ribo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Ribo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












  • Possible duplicate unix.stackexchange.com/questions/90027/…
    – Panther
    Nov 27 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 at 7:49


















  • Possible duplicate unix.stackexchange.com/questions/90027/…
    – Panther
    Nov 27 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 at 7:49
















Possible duplicate unix.stackexchange.com/questions/90027/…
– Panther
Nov 27 at 3:18




Possible duplicate unix.stackexchange.com/questions/90027/…
– Panther
Nov 27 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 at 7:49




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 at 7:49















active

oldest

votes











Your Answer








StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});






Ribo is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f484347%2fhow-does-the-kernel-find-and-initialize-wifi-network-interface-devices%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown






























active

oldest

votes













active

oldest

votes









active

oldest

votes






active

oldest

votes








Ribo is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















Ribo is a new contributor. Be nice, and check out our Code of Conduct.













Ribo is a new contributor. Be nice, and check out our Code of Conduct.












Ribo is a new contributor. Be nice, and check out our Code of Conduct.
















Thanks for contributing an answer to Unix & Linux Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f484347%2fhow-does-the-kernel-find-and-initialize-wifi-network-interface-devices%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Accessing regular linux commands in Huawei's Dopra Linux

Can't connect RFCOMM socket: Host is down

Kernel panic - not syncing: Fatal Exception in Interrupt