Home
Developer Resources
Technical Articles

QNX Technical Articles

QNX® Software Development Platform 7.1 Board Support Package for the Raspberry Pi 4 Board (Model B): Release Notes

QNX® Software Development Platform 7.1 BSP for the Raspberry Pi 4 Board (Model B): Release Notes

QNX® Software Development Platform 7.1 Board Support Package for the Raspberry Pi 4 Board (Model B): Release Notes

Date of this edition: September 23, 2024

QNX SDP is a cross-compiling and debugging environment, including an IDE and command-line tools, for building binary images and programs for ARM v7, ARM v8, x86, and x86_64 targets running the QNX Neutrino RTOS 7.1.

Board Support Packages (BSP) are available for various hardware platforms on QNX SDP 7.1. This is a release note for the Raspberry Pi 4 Board (Model B) BSP.

Throughout this document, you may see reference numbers associated with particular issues, changes, etc. When corresponding with our Technical Support staff about a given issue, please quote the relevant reference number. You might also find the reference numbers useful for tracking issues as they become fixed.

Contents

Revision History

The following is a summary of the updates made to this BSP.

QNX 7.1 Screen Graphics Board Support Raspberry BCM2711 R-PI4

Build 110 (3.2.0.00110T202205092150L).

QNX SDP 7.1 BSP for Raspberry Pi BCM2711 R-PI4.

BuildID 18 (0.0.6.00018T202111251513L).

  • WiFi support information is updated.
  • Issue resolved: (Ref# 2893157, 2893501).

QNX SDP 7.1 Connectivity - PCI HW Module BCM2711 (with Debug Symbols).

Build 34 (0.0.3.00034T202102241158L).

  • Initial release.

Supported hardware

Our BSP supports the following board:

  • The Raspberry Pi 4 Board (Model B)

Note:

The Raspberry Pi 4 (Model B) 1 GB RAM variant is not supported.


Known issues

This BSP has the following known issues

  • RaspberryPi4B pwm driver: A “pop” sound may be heard at begin and end of audio playback. (2895127)
  • RaspberryPi4B sdmmc driver: sdmmc driver fails to detect microSD card on the BCM 2711ZPKFSB06C0T SoC based Pi 4 boards. (2907341)

    1. The (devb-sdmmc-bcm2711) driver may exit without detecting the microSD card on a 8GB board with the BCM 2711ZPKFSB06C0T SoC.
    2. The (devb-sdmmc-bcm2711) driver may not detect the microSD card partition on a 4GB board with the BCM 2711ZPKFSB06C0T SoC, (for example, can detect "/dev/sd0", but not "/dev/sd0t12").

    Workaround: Use "devb-sdmmc-bcm2711 sdio addr=0xfe340000,irq=158 disk name=sd" on the BCM 2711ZPKFSB06C0T SoC based boards.

  • Startup includes physical addresses 0x0 to 0x1000 to the memory available to the operating system. However, these addresses are reserved by the firmware, and their use by the operating system can lead to instability. (2972632)

    Workaround: Add "-r 0,4096,1" argument to startup in the BSP buildfile.

This BSP enables watchdog with timeout value of 2500ms which may need to be adjusted. Please refer to the User's Guide for specific instructions on how to adjust the timeout value of watchdog timer.

Getting started with this BSP

Each BSP has a user's guide that describes what's in the BSP and how to install and work with it. In a browser, after you log in with your myQNX account, you can download the latest revision of the user's guide from the QNX SDP 7.1 Board Support Documentation page.

We recommend that you read the Building Embedded Systems guide, which contains common information about working with all BSPs from QNX Software Systems. This guide is also available on the QNX Software Development Platform 7.1 documentation website.


Note:

To ensure that you pick up the same components from your development environment, we recommend that you rebuild the IFS image on your host system.

Included in this BSP are prebuilt IFS images that are provided as convenience for you to quickly get QNX Neutrino running on your board, however these prebuilt images might not have the same components from your development environment.


Boot Firmware Files Versions

To ensure that the BSP works properly, it is recommended to use the boot firmware files from commit 0d45887.

WiFi support

To add WiFi support to the BSP, you need to install the "QNX® SDP 7.1 Wireless driver for the Broadcom BCM4339 (wpa-2.9)" package from the QNX Software Center. The firmware files used by the WiFi driver are in the "bcm43455_firmware_pkg.tar" file installed in the SDP target/qnx7/etc/firmware directory.

To rebuild the IFS with WiFi support, you need to add WiFi driver, firmware files and WPA related software components and add command to create wireless interface and network connection to the rpi4.build file, clean and rebuild the IFS. The suggested changeds to the rpi4.build are described below:

  • Add WiFi driver devnp-qwdi-2.9_bcm4339-rpi4.so.
  • Add WiFi firmware files devnp-qwdi-2.9_bcm4339-rpi4.so, for example, update rpi4.build file with:
    [search=../install/etc/firmware] /etc/hotspot/firmware.bin=firmware.bcm43455.default.bin
    [search=../install/etc/firmware] /etc/hotspot/nvram.txt=nvram.bcm43455.rpi4.default.txt
    [search=../install/etc/firmware] /etc/hotspot/firmware.clm_blob=bcm43455.default.clm_blob
                    
  • Add wpa_cli, wpa_passphrase and wpa_supplicant, for example:
    /usr/sbin/wpa_cli=wpa_cli-2.9
    /usr/sbin/wpa_passphrase=wpa_passphrase-2.9
    /usr/sbin/wpa_supplicant=wpa_supplicant-2.9
                    
  • Start WiFi driver which will create the WiFi network interface as "bcm0", for example:
    mount -T io-pkt -o nvram=/etc/hotspot/nvram.txt,fw=/etc/hotspot/firmware.bin,clm_blob=/etc/hotspot/firmware.clm_blob,sdio_baseaddr=0xfe300000,sdio_irq=158,sdio_verbose=1,drv_supp=3,key_delay=5 /lib/dll/devnp-qwdi-2.9_bcm4339-rpi4.so
  • Start wpa_supplicant, this can be done in the startup script if the wpa_supplicant.conf is pre-defined, or at run time, for example:
    # wpa_passphrase "test_ap_ssid_name" "test_ap_password"
    network={
            ssid="test_ap_ssid_name"
            #psk="test_ap_password"
            psk=b7721cd84a02de4bcf883ffdb4b1df8ee2d6e6dd9bbd38f307eda267f79bd224
    }
    # cat /tmp/wpa_supplicant.conf
    network={
            ssid="test_ap_ssid_name"
            psk="b7721cd84a02de4bcf883ffdb4b1df8ee2d6e6dd9bbd38f307eda267f79bd224"
            key_mgmt=WPA-PSK
            proto=WPA2
            pairwise=CCMP
            group=CCMP
    }
    wpa_supplicant -Dqwdi -t -Z100 -ibcm0 -c /tmp/wpa_supplicant.conf -C/var/run/wpa_supplicant/ -g/var/run/wpa_supplicant_global &
                    
  • After wireless connection is established, obtain IP address by running dhclient, for example:
    # wpa_cli -i bcm0 status
    bssid=6c:cd:d6:12:45:89
    freq=2457
    ssid=test_ap_ssid_name
    id=0
    mode=station
    pairwise_cipher=CCMP
    group_cipher=TKIP
    key_mgmt=WPA2-PSK
    wpa_state=COMPLETED
    ...
    
    # dhclient -m -lf /dev/shmem/dhclient_wifi.leases -pf /dev/shmem/dhclient_wifi.pid -nw bcm0
                    

Graphics support

A Screen Board Support package is now available for the Raspberry Pi 4 platform for SDP 7.1 and can be used with this BSP. The following package should be installed from the QNX Software Center:

Name Package Build ID
QNX 7.1 Screen Graphics Board Support Raspberry Pi 4 com.qnx.qnx710.target.screen.board.rpi4_3.2.0.00110T202205092150L 110

Note that this package also requires the latest SDP 7.1 update for Screen to be installed.

To add graphics support to your BSP image, the following raspberry PI4 related resources need to be added to the image.

    /usr/lib/libdrm.so=libdrm.so
    /lib/dll/screen-rpi4drm.so=screen-rpi4drm.so
    /sbin/drm-rpi4=drm-rpi4
    /usr/lib/graphics/rpi4-drm/broadcom_icd.json=graphics/rpi4-drm/broadcom_icd.json
    /usr/lib/graphics/rpi4-drm/gpu_drm-rpi4.so=graphics/rpi4-drm/gpu_drm-rpi4.so
    /usr/lib/graphics/rpi4-drm/graphics-rpi4-atomic.conf=graphics/rpi4-drm/graphics-rpi4-atomic.conf
    /usr/lib/graphics/rpi4-drm/libEGL-mesa.so=graphics/rpi4-drm/libEGL-mesa.so
    /usr/lib/graphics/rpi4-drm/libGLESv1_CM-mesa.so=graphics/rpi4-drm/libGLESv1_CM-mesa.so
    /usr/lib/graphics/rpi4-drm/libGLESv2-mesa.so=graphics/rpi4-drm/libGLESv2-mesa.so
    /usr/lib/graphics/rpi4-drm/libWFDrpi4-drm-atomic.so=graphics/rpi4-drm/libWFDrpi4-drm-atomic.so
    /usr/lib/graphics/rpi4-drm/libglapi-mesa.so=graphics/rpi4-drm/libglapi-mesa.so"
    /usr/lib/graphics/rpi4-drm/libvulkan_broadcom.so=graphics/rpi4-drm/libvulkan_broadcom.so"
    /usr/lib/graphics/rpi4-drm/libwfdcfg-rpi4-generic.so=graphics/rpi4-drm/libwfdcfg-rpi4-generic.so
    /usr/lib/graphics/rpi4-drm/v3d_dri.so=graphics/rpi4-drm/v3d_dri.so
                    

The following screen base files need to be added to the image:

    /lib/dll/screen-debug.so=screen-debug.so
    /lib/dll/screen-gles2.so=screen-gles2.so
    /lib/dll/screen-gles2blt.so=screen-gles2blt.so
    /lib/dll/screen-stdbuf.so=screen-stdbuf.so
    /lib/dll/screen-sw.so=screen-sw.so
    /lib/libmemobj.so=libmemobj.so
    /lib/libscrmem.so=libscrmem.so
    /sbin/screen=screen
    /usr/lib/graphics/vulkan/VkLayer_MESA_overlay.json=graphics/vulkan/VkLayer_MESA_overlay.json
    /usr/lib/graphics/vulkan/VkLayer_api_dump.json=graphics/vulkan/VkLayer_api_dump.json
    /usr/lib/graphics/vulkan/VkLayer_khronos_validation.json=graphics/vulkan/VkLayer_khronos_validation.json
    /usr/lib/graphics/vulkan/libVkLayer_MESA_overlay.so=graphics/vulkan/libVkLayer_MESA_overlay.so
    /usr/lib/graphics/vulkan/libVkLayer_api_dump.so=graphics/vulkan/libVkLayer_api_dump.so
    /usr/lib/graphics/vulkan/libVkLayer_khronos_validation.so=graphics/vulkan/libVkLayer_khronos_validation.so
    /usr/lib/graphics/vulkan/vk_layer_settings.txt=graphics/vulkan/vk_layer_settings.txt
    /usr/lib/libCL.so=libCL.so
    /usr/lib/libEGL.so=libEGL.so
    /usr/lib/libGLESv1_CL.so=libGLESv1_CL.so
    /usr/lib/libGLESv1_CM.so=libGLESv1_CM.so
    /usr/lib/libGLESv2.so=libGLESv2.so
    /usr/lib/libOpenCL.so=libOpenCL.so
    /usr/lib/libOpenVG.so=libOpenVG.so
    /usr/lib/libOpenVGU.so=libOpenVGU.so
    /usr/lib/libWFD.so=libWFD.so
    /usr/lib/libscreen.so=libscreen.so
    /usr/lib/libvulkan.so=libvulkan.so
                    

For validattion, The file below need to be added to the image:

    /usr/bin/gles2-gears=gles2-gears
    /usr/bin/sw-vsync=sw-vsync
                    

The following changes may need to be applied to the build file:

    Add /usr/lib/graphics/drm-rpi4 to LD_LIBRARY_PATH
    Add libc++.so to the image
    Add libhiddi.so to the image
    Add libcatalog.so to the image
                    

Instruction:

  • Attach a display to the HDMI0 port. This port is closest to the USB-C power port. HDMI0 is printed on the board beside the port. The print is quite small.
  • To start Graphics on your Raspberry Pi 4, run the following commands:
    # screen -c /usr/lib/graphics/rpi4-drm/graphics-rpi4-atomic.conf
    # gles2-gears -size=321x321
                    

Technical support

To obtain technical support for any QNX product, see Overview in the Developers or Support area on our website (www.qnx.com). You'll find a wide range of support options, including community forums.