coreos-modules: enable the Bluetooth subsystem - #4197
Conversation
There was a problem hiding this comment.
Pull request overview
Enables Linux kernel Bluetooth support in Flatcar by turning on the Bluetooth subsystem and key HCI transports as loadable modules, so Bluetooth capabilities are available without rebuilding the OS image while keeping runtime impact minimal unless modules are loaded.
Changes:
- Enable the core Bluetooth stack (BR/EDR + LE) and common HCI transports (USB, UART/serdev, virtio, VHCI) as modules in the shared kernel config.
- Enable supporting kernel symbols needed by the Bluetooth closure (e.g.,
RFKILL,SERIAL_DEV_BUS). - Add a changelog entry documenting Bluetooth kernel enablement (userspace intentionally excluded).
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| sdk_container/src/third_party/coreos-overlay/sys-kernel/coreos-modules/files/commonconfig-6.12 | Enables Bluetooth subsystem + transports and supporting symbols as modules. |
| sdk_container/src/third_party/coreos-overlay/sys-kernel/coreos-modules/files/amd64_defconfig-6.12 | Explicitly disables DELL_RBTN to avoid pulling in an unrelated module when RFKILL is enabled. |
| changelog/changes/2026-08-09-bluetooth-support.md | Documents the change for release notes. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| @@ -0,0 +1 @@ | |||
| - Enabled the Bluetooth subsystem (BR/EDR and LE) in the kernel, together with the USB, UART, virtio and vhci HCI transports. All of it builds as modules, so it is only loaded when Bluetooth hardware is present or the modules are loaded explicitly. Userspace (BlueZ) is not part of the image and can be added with a systemd-sysext ([scripts#PRNUM](https://github.com/flatcar/scripts/pull/PRNUM)) | |||
Flatcar currently ships no Bluetooth support at all: CONFIG_BT is absent
from the kernel configs, so olddefconfig resolves the whole subsystem to
n and no Bluetooth modules are built.
Enable the core stack (BR/EDR and LE) plus the HCI transports that matter
on the hardware Flatcar runs on:
- btusb, the transport used by essentially every USB adapter and by the
Bluetooth radio in Intel/Realtek/MediaTek/Qualcomm combo chips
- hci_uart with serdev, the usual transport on arm64 edge boards
- virtio_bt, for VMs with a paravirtualised adapter
- hci_vhci, which lets the stack be exercised without real hardware
Everything is a module, so nothing is loaded unless Bluetooth hardware is
present or the modules are loaded explicitly. RFKILL is enabled because
BlueZ needs it to unblock and power adapters, and SERIAL_DEV_BUS because
BT_HCIUART_SERDEV depends on it. CRYPTO_ECC/CRYPTO_ECDH are selected by
BT for LE Secure Connections.
DELL_RBTN is explicitly disabled in the amd64 config: it becomes visible
once RFKILL is enabled (X86_PLATFORM_DRIVERS_DELL is already y) but it is
a laptop radio-button driver unrelated to this change, and leaving it out
keeps the new module set to exactly the Bluetooth closure.
This adds 17 modules totalling ~2.45 MiB (arm64, stripped, uncompressed)
to /usr/lib/modules. Verified with olddefconfig against linux-6.12.102 for
both amd64 and arm64: apart from the symbols listed above, the resulting
.config is byte-identical to the current one on both architectures.
Userspace is deliberately left out of the image; BlueZ is a better fit for
a systemd-sysext.
Signed-off-by: Ananth Bhaskararaman <antsub@gmail.com>
41d4cb7 to
01996c8
Compare
tormath1
left a comment
There was a problem hiding this comment.
I'm curious, what would be the use case for this?
|
I've got a few automation devices in my homelab datacenter that can be controlled over BLE like the AC units and access control locks. I've been migrating my servers over to Flatcar and I'd like to control those with services running on Flatcar. |
You can also use one or more Bluetooth proxies for that, this also allows you to be closer to the Bluetooth devices. |
This PR enables the Bluetooth stack as modules.
What's enabled
Core stack (BR/EDR + LE) plus some transports.
Userspace
Pulling BlueZ into the base image would grow every Flatcar image for a feature many users won't use. I've added a bluez sysext instead: flatcar/sysext-bakery#253.