Loading WCNSS kernel modules on DragonBoard410c

Hi Guys

I have been trying to get the WIFI working on a custom kernel/rootfs build. The kernel we are using is based on the Linaro 4.9.56 linux kernel

I followed the guide below to build the kernel,
https://builds.96boards.org/releases/dragonboard410c/linaro/debian/latest/

Using buildroot to specify a custom kernel, we pass in our tarballed kernel repository to populate our rootfs with the necessary firmware

The WCNSS firmware was extracted from the rootfs downloaded from the debian rootfs

I have installed the WCNSS binary files into /lib/firmware/ and the modules to /lib/modules of our rootfs

However despite this the firmware still does not load, we believe we may be missing a step.

Below is our console output.
Lines of interest are:
[ 0.204404] irq: no irq domain found for /hexagon-smp2p/slave-kernel !
[ 0.205754] irq: no irq domain found for /wcnss-smp2p/slave-kernel !

Would you be able to provide a quick step by step guide for how you would get the WIFI working on a custom rootfs/kernel for the dragonboard 410c or help us troubleshoot what we are doing wrong

Best regards

Thank you

Before speaking about firmware, does the wcnss modules themself are loaded (wcn36xx, qcom_wcnss_pil) ? It does not seem from your log… I don’t know about your init daemon (busybox, systemd, sysv), so it’s possible that modules are not automatically loaded. First thing to test is inserting module manually and see what happens.

Hi Loic,

running lsmod returns nothing.

we have tried calling modprobe on wcn36xx but it returns the following error;

modprobe wcn36xx

[ 4218.018674] rfkill: exports duplicate symbol rfkill_alloc (owned by kernel)
[ 4218.059603] rfkill: exports duplicate symbol rfkill_alloc (owned by kernel)
modprobe: can’t load module rfkill (kernel/net/rfkill/rfkill.ko): invalid module format

so we try calling insmod on the individual dependencies and it returns the following;

#insmod mac80211
(Note there are about 100 lines of the unknown symbol message below)
[ 4381.533662] mac80211: Unknown symbol cfg80211_rx_unprot_mlme_mgmt (err 0)
insmod: can’t insert ‘kernel/net/mac80211/mac80211.ko’: unknown symbol in module, or unknown parameter

I assume this is what you meant by “inserting them manually”

Thanks for your help in advance

This is normally a built-in module, it seems dependencies are not well generated here (modules.dep).
Do you confirm kernel and modules are built and ‘installed’ by buildroot ?

Did you load cfg80211 first ?

Hi Loic,

I was using Ant’s account earlier as I wasn’t logged in however I am now on my own account.

Would I do this through buildroot log files or looking inside the rootfs at /lib and etc/modules files?

are these unknown symbol errors likely a cause of not loading the correct modules in order?

Also one more question, modules can be loaded at boot time using a file /etc/modules or /etc/modules-load.d with udev but how should I know the order of the modules to load? I thought this would have been done by buildroot but as you said maybe dependencies were not well generated. Perhaps a clean/make might fix something.

Hi Ant ,

can you please share full dmesg log .

Thanks,
Sivaram

Could you please share your builroot config file ? modules-load.d is part of systemd, so again this depends on the init daemon you choose.