At the RDK Summit that year, Mira presented a session titled "Bridging the Gap: Non-Native Wi-Fi SoC Integration with RDK-B." The room was packed. Engineers from Juniper, Nokia, and CommScope took notes.
Lead firmware engineer, Mira Khoury, stared at the boot log. The Broadcom SoC, running the full RDK-B suite (CcspCommon, MTA, WebUI, TR-069), had just enumerated the PCIe bus. It saw the QCA chip. It even loaded the vendor's proprietary wlan.ko driver. But the RDK-B middleware, specifically the CcspWifiSsp (Service Subsystem for Wi-Fi), was throwing a tantrum. rdk-b integration with non-native wi-fi socs
Sam built an event loop thread that listened to netlink broadcasts from the QCA chip, translating NL80211_CMD_NEW_STATION into RDK-B's internal WIFI_EVENT_STA_JOIN . It was tedious, but by day ten, the shim could fake a wl -style interface well enough to pass the HAL self-test. The next horror emerged: configuration. RDK-B uses the TR-181 data model (e.g., Device.WiFi.Radio.1.Channel ). The QCA driver used a binary blob called board.bin and a runtime config via iw and hostapd over a Unix socket. At the RDK Summit that year, Mira presented
They wrote a Python daemon, qca-bridge-d , that listened to Redis (where RDK-B caches its data model), translated Device.WiFi.SSID.1.Enable into dbus-send --system --dest=org.qualcomm.wpa /org/qualcomm/wpa/1 org.qualcomm.wpa.SetEnable boolean:true . The Broadcom SoC, running the full RDK-B suite
The fix was surgical: rewrite the GetStationList() shim to cache station data. A separate thread would refresh the cache every 500ms via nl80211 async dumps. The HAL call would simply copy from the cache – a 100µs operation. By day 25, the system was stable. The TR-181 parameters synchronized. The web UI showed "Qualcomm Wi-Fi 6E" instead of "Broadcom." Even Axiom's proprietary cloud analytics (via TR-069) accepted the chip's RSSI values.
"We can't just kill -HUP ," Sam groaned. "We have to serialize TR-181 parameters into D-Bus method calls."