Loading WCNSS kernel modules on DragonBoard410c


#1

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 !

https://pastebin.com/zkGeB3Fn

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


#2

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.


#3

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


#4

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 ?


#5

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.


#6

Hi Ant ,

can you please share full dmesg log .

Thanks,
Sivaram


#7

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.