Build image on Upstream minimal reference Image

Hi all,

we are working on adding a WiFi-adapter using mini-PCI-E on the Ixora V1.X board with the iMX6. I successfully tested the adapter installing the Upstream Multimedia Reference Image (5.7.6+) using the easy installer.

$ lspci
01:00.0 Network controller: Intel Corporation Wireless 7260 (rev bb)

Unfortunately the upstream minimal reference image does not have the driver of this WiFi-adapter:

$ dmesg | grep -i wifi
[ 8.514398] Intel(R) Wireless WiFi driver for Linux
[ 8.521323] iwlwifi 0000:01:00.0: enabling device (0140 → 0142)
[ 8.773147] iwlwifi 0000:01:00.0: Direct firmware load for iwlwifi-7260-17.ucode failed with error -2
[ 8.819582] iwlwifi 0000:01:00.0: no suitable firmware found!
[ 8.827335] iwlwifi 0000:01:00.0: iwlwifi-7260-17 is required
[ 8.843798] iwlwifi 0000:01:00.0: check git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git

We built a custom image according to this:
Build a Reference Image with Yocto Project/OpenEmbedded | Toradex Developer Center

I added the needed driver to the kernel using the kernel configurator

bitbake -c menuconfig virtual/kernel

Unfortunately this doesn’t work because the OS seems not to recognize any PCI devices since lspci doesn’t return anything.

So my hope is, that I could build an image based on your upstream minimal reference image (lspci recognizes the device) and then add the driver using the kernel configurator.

So my questions: (we are rather inexperienced in using bitbake and building images, apologies!)

  • How can I build an image based on your Upstream minimal reference image? (lspci shows the WiFi-adapter only on the upstream images)
  • Is recognizing the PCI-devices related to the device-tree or how can I add this to the downstream image?
  • Is there an easy way to see the difference between the device-trees of your Upstream and Downstream images?

Many Thanks for the help!

Hi, I’m the Toradex AI Assistant. I’m in early beta, and I would appreciate your feedback.
The Toradex Support team will follow up with you shortly!

Did you like my answer?

:+1: :-1:


Hello,

To address your questions on building an image based on the Upstream minimal reference image and understanding the differences between upstream and downstream images, including PCI device recognition and device-tree differences, here’s a structured approach:

  1. Building an Image Based on Upstream Minimal Reference Image:

    • To build an image based on the Upstream minimal reference image, you should start by setting up your build environment for Yocto Project/OpenEmbedded. Once set up, you can select the minimal image recipe (core-image-minimal for example) as your target and then customize it by adding packages or modifying configurations as needed. For integrating the WiFi driver, ensure that the kernel configuration (CONFIG_IWLMVM and CONFIG_IWLWIFI for Intel Wireless 7260) is enabled and the corresponding firmware (linux-firmware-iwlwifi-7260) is included in your image recipe.
  2. Difference Between Upstream and Downstream Images:

    • Upstream images are based on the Linux kernel and software packages that are maintained and updated by the global Linux community. They tend to include the latest features and drivers but might not be fully optimized or tested for specific hardware.
    • Downstream images, on the other hand, are based on a version of the Linux kernel that has been modified by hardware vendors (like Toradex) to ensure optimal performance and stability on their hardware platforms. These modifications may include additional drivers, patches, and optimizations specific to the hardware.
  3. Recognizing PCI Devices - Device-Tree or Kernel Configuration:

    • Recognizing PCI devices is typically related to both the Linux kernel configuration and the device-tree settings. Ensure that the PCI support (CONFIG_PCI) is enabled in the kernel configuration. Additionally, the device-tree must correctly describe the PCI bus and any devices connected to it. This includes the correct setup of the PCI host bridge and any necessary properties for the bus and devices.
  4. Differences in Device-Trees Between Upstream and Downstream Images:

    • To see the differences between the device-trees of Upstream and Downstream images, you would typically compare the device-tree source files (.dts and .dtsi) for your specific hardware platform in the respective kernel source trees. Look for differences in the definitions related to the PCI subsystem, including the configuration of the PCI host bridge and any specific nodes for PCI devices.

For your specific case, where lspci does not return anything in your custom image, it suggests that either the

Please, also check if these links can help you solve your problem:

Wi-Fi on Toradex Computer on Modules | Toradex Developer Center.

Dear @PAR,

Thank you for contacting us.
In general we recommend using BSP 6 for upstream, since it is the newer version and potentially contains fixes, which are not present in previous versions.
One more thing which could cause trouble is the reset pin of your adapter. Please check if this is configured correctly, or if it is maybe constantly on/off, when this is not desired.

You should indeed be able to see the pci device with lspci.

The best way to compare the device tree files is unfortunately through comparation tools (eg. diff, notepad++)

Best regards
Collin

Hi Collin,
Thanks for the reply.

I might be missing something obvious.
I followed the instructions here:

Am I correct that this image will be based on the downstream image? If so, how can I change it so it’s based on the upstream image?
Can you point me to your upstream and downstream device trees? Would the following link be up or downstream?
linux-toradex.git - Linux kernel for Apalis, Colibri and Verdin modules

Thanks and regards

Using BSP 6 for upstream did the trick to have now an upstream version. Unfortunately it seems like the newest linux kernel has maybe a incompatible driver?

root@apalis-imx6-10492571:~# dmesg | grep iwlwifi
[ 10.505397] iwlwifi 0000:01:00.0: enabling device (0140 → 0142)
[ 10.528790] iwlwifi 0000:01:00.0: Direct firmware load for iwlwifi-7260-17.ucode failed with error -2
[ 10.539063] iwlwifi 0000:01:00.0: no suitable firmware found!

~/oe-core/layers/openembedded-core/meta/recipes-kernel/linux-firmware$ cat linux-firmware_20240220.bb | grep 7260
${PN}-iwlwifi-7260
LICENSE:${PN}-iwlwifi-7260 = “Firmware-iwlwifi_firmware”
FILES:${PN}-iwlwifi-7260 = “${nonarch_base_libdir}/firmware/iwlwifi-7260-*.ucode”
RDEPENDS:${PN}-iwlwifi-7260 = “${PN}-iwlwifi-license”
RPROVIDES:${PN}-iwlwifi-7260 = “${PN}-iwlwifi-7260-7 ${PN}-iwlwifi-7260-8 ${PN}-iwlwifi-7260-9”
RREPLACES:${PN}-iwlwifi-7260 = “${PN}-iwlwifi-7260-7 ${PN}-iwlwifi-7260-8 ${PN}-iwlwifi-7260-9”
RCONFLICTS:${PN}-iwlwifi-7260 = “${PN}-iwlwifi-7260-7 ${PN}-iwlwifi-7260-8 ${PN}-iwlwifi-7260-9”

I tried to change the number to 17, unfortunately no success.
Maybe you can point me to the BSP 5 Upstream so I can try this way?

Many thanks and regards
Patrick