Thanks a lot for the answer. It’s really appreciated. I took the time to research a bit more to reduce the need for back-and-forth, so this post is a bit long. I hope you don’t mind.
initramfs
I recreated the initramfs with the additional files listed above but there’s was no visible impact.
sudo apt install initramfs-tools
mkdir wifi
cd wifi
wget -c https://github.com/rcn-ee/sdk-firmware/raw/refs/heads/master/technexion/Broadcom/AP6335_4.2/Wi-Fi/nvram_ap6335.txt
wget -c https://github.com/rcn-ee/sdk-firmware/raw/refs/heads/master/technexion/Broadcom/AP6335_4.2/Wi-Fi/fw_bcm4339a0_ag.bin
wget -c https://github.com/rcn-ee/sdk-firmware/raw/refs/heads/master/technexion/Broadcom/AP6335_4.2/Wi-Fi/fw_bcm4339a0_ag_apsta.bin
sudo mkdir -p /usr/lib/firmware/brcm
sudo cp * /usr/lib/firmware/brcm
sudo update-initramfs -u -k $(uname -r)
# Reboot and check logs:
sudo shutdown -r now
dmesg | grep br
OS image
Here’s what I used to flash my device from a linux machine. I’m using the base image from: Index of /images/pico-imx7/pi-lcd800x480/
sudo apt-get install libusb-1.0.0-dev libzip-dev libbz2-dev
# Tool:
wget -c https://download.technexion.com/development_resources/development_tools/installer/imx-mfg-uuu-tool.zip
unzip imx-mfg-uuu-tool.zip
# Image:
wget -c https://download.technexion.com/images/pico-imx7/pi-lcd800x480/ubuntu-22.04.xz
xz --decompress ubuntu-22.04.xz
# Flash:
sudo ../imx-mfg-uuu-tool/uuu/linux64/uuu -b emmc_imx7_img imx-mfg-uuu-tool/imx7/pico-imx7/imx7-SPL imx-mfg-uuu-tool/imx7/pico-imx7/imx7-u-boot.img ubuntu-22.04
firmware
The spec says the board has a QCA9377. And indeed I found the files there once I knew where to look:
$ ls -l /usr/lib/firmware/qca9377
-rwxr-xr-x 1 root root 8124 Apr 26 2024 bdwlan30.bin
-rwxr-xr-x 1 root root 25057 Apr 26 2024 otp30.bin
-rwxr-xr-x 1 root root 619364 Apr 26 2024 qwlan30.bin
-rwxr-xr-x 1 root root 372688 Apr 26 2024 utf30.bin
There’s also a ton of files in /usr/lib/firmware/qca/.
modules
$ lsmod
Module Size Used by
ov5640_camera_mipi_v2 24576 0
zram 32768 2
caam_jr 163840 0
caamkeyblob_desc 16384 1 caam_jr
caamhash_desc 16384 1 caam_jr
caamalg_desc 65536 1 caam_jr
crypto_engine 16384 1 caam_jr
authenc 16384 1 caam_jr
libdes 28672 1 caam_jr
mx6s_capture 24576 0
mxc_mipi_csi 20480 1
binfmt_misc 20480 1
$ uname -a
Linux technexion 5.15.71 #1 SMP PREEMPT Fri Apr 26 15:52:59 CST 2024 armv7l armv7l armv7l GNU/Linux
Interestingly, ov5640_camera_mipi_v2 is there! So maybe there’s a intent to make the camera module work?
This has no effect:
$ sudo modprobe -v ath10k_pci
insmod /lib/modules/5.15.71/kernel/drivers/net/wireless/ath/ath.ko
insmod /lib/modules/5.15.71/kernel/drivers/net/wireless/ath/ath10k/ath10k_core.ko
insmod /lib/modules/5.15.71/kernel/drivers/net/wireless/ath/ath10k/ath10k_pci.ko
$ lsmod
Module Size Used by
ath10k_pci 40960 0
ath10k_core 380928 1 ath10k_pci
ath 32768 1 ath10k_core
ov5640_camera_mipi_v2 24576 0
zram 32768 2
caam_jr 163840 0
caamkeyblob_desc 16384 1 caam_jr
caamhash_desc 16384 1 caam_jr
caamalg_desc 65536 1 caam_jr
crypto_engine 16384 1 caam_jr
authenc 16384 1 caam_jr
libdes 28672 1 caam_jr
mx6s_capture 24576 0
mxc_mipi_csi 20480 1
binfmt_misc 20480 1
$ sudo find /sys -name "ath*"
/sys/bus/pci/drivers/ath10k_pci
/sys/module/ath
/sys/module/ath/holders/ath10k_core
/sys/module/ath10k_pci
/sys/module/ath10k_core
/sys/module/ath10k_core/holders/ath10k_pci
I’m guessing the module is configured but the device is not?
sources scavenging
On my workstation, I validated that the right driver is ath10k:
$ git clone https://github.com/TechNexion/linux-tn-imx
$ cd linux-tn-imx
$ git checkout tn-kirkstone_5.15.71-2.2.2_20240220
$ git grep qca9377
Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml: - qcom,qca9377-bt
arch/arm64/boot/dts/amlogic/meson-gxl-s905d-sml5442tw.dts: compatible = "qcom,qca9377-bt";
drivers/bluetooth/hci_qca.c: { .compatible = "qcom,qca9377-bt" },
drivers/net/wireless/ath/ath10k/core.c: .name = "qca9377 hw1.0",
drivers/net/wireless/ath/ath10k/core.c: .name = "qca9377 hw1.1",
drivers/net/wireless/ath/ath10k/core.c: .name = "qca9377 hw1.1 sdio",
drivers/net/wireless/ath/ath10k/hw.h:enum qca9377_chip_id_rev {
drivers/net/wireless/ath/ath10k/pci.c: * Support to access target space below 1M for qca6174 and qca9377.
I decided to look at TechNexion’s script and what they used to build ubuntu 22.04 versus their current master and I found this:
$ git clone https://github.com/TechNexion-customization/ubuntu-tn-imx
$ cd ubuntu-tn-imx
$ git diff v22.04-lts-02 -- gen_rootfs.sh
diff --git gen_rootfs.sh gen_rootfs.sh
index 17ebdc2..851625c 100755
--- gen_rootfs.sh
+++ gen_rootfs.sh
@@ -46,6 +46,30 @@ gen_pure_rootfs() {
fi
sync
+ # Install QCA9377 firmware
+ local qca_fw_url="https://oauth2:SbtQ_mC4fvJRA88_9jB7@gitlab.com/technexion-imx/qca_firmware.git"
+ local qca_fw_branch="caf-wlan/CNSS.LEA.NRT_3.0"
+ local fw_src="${TOP}/qca_firmware"
+ rm -rf ${fw_src}
+ git clone ${qca_fw_url} -b ${qca_fw_branch} ${fw_src}
+
+ local fw_dst="${TOP}/rootfs/usr/lib/firmware"
+ for p in qca9377 qca6174; do
+ install -d ${fw_dst}/${p}/
+ for f in bdwlan30 otp30 qwlan30 utf30; do
+ install -m 0755 ${fw_src}/${p}/${f}.bin ${fw_dst}/${p}/
+ done
+
+ install -d ${fw_dst}/wlan/${p}/
+ install -m 0755 ${fw_src}/wlan/${p}/qcom_cfg.ini ${fw_dst}/wlan/${p}/
+ done
+ install -m 0755 ${fw_src}/wlan/cfg.dat ${fw_dst}/wlan/
+
+ install -d ${fw_dst}/qca
+ install -m 0755 ${fw_src}/qca/nvm_tlv_3.2.bin ${fw_dst}/qca
+ install -m 0755 ${fw_src}/qca/rampatch_tlv_3.2.tlv ${fw_dst}/qca
+ unset qca_fw_url qca_fw_branch fw_src fw_dst
+
if [[ $(echo $1 | grep "imx8") ]]; then
# fs-overlay
Fascinating but red herring.
ubuntu-tn-imx/README-imx6.md at master · TechNexion-customization/ubuntu-tn-imx · GitHub mentions the firmware files and all the files mentioned there are in the base image. So that’s not the problem.
$ git clone https://github.com/TechNexion/u-boot-tn-imx
$ cd u-boot-tn-imx
$ git tag | grep 5.15
$ git checkout tn-kirkstone_5.15.71-2.2.2_20240220
$ git grep 9377
(didn't provide anything useful)
I feel there’s really just a silly simple thing missing.
I glanced at yocto configuration files, there’s more stuff there but I don’t know how to apply the knowledge in my situation.