Skip to content

coreos-modules: enable the Bluetooth subsystem - #4197

Open
ananthb wants to merge 1 commit into
flatcar:mainfrom
ananthb:bluetooth-kernel-support
Open

coreos-modules: enable the Bluetooth subsystem#4197
ananthb wants to merge 1 commit into
flatcar:mainfrom
ananthb:bluetooth-kernel-support

Conversation

@ananthb

@ananthb ananthb commented Aug 9, 2026

Copy link
Copy Markdown

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.

@ananthb
ananthb requested a review from a team as a code owner August 9, 2026 09:06
Copilot AI lite review requested due to automatic review settings August 9, 2026 09:06

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>
Copilot AI review requested due to automatic review settings August 9, 2026 09:18
@ananthb
ananthb force-pushed the bluetooth-kernel-support branch from 41d4cb7 to 01996c8 Compare August 9, 2026 09:18

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated no new comments.

@tormath1 tormath1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm curious, what would be the use case for this?

@ananthb

ananthb commented Aug 10, 2026

Copy link
Copy Markdown
Author

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.

@robinschneider

Copy link
Copy Markdown
Member

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.
For Home assistant there is the ESPHome Bluetooth Proxy for this for example.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants