Message ID | 53c705753b20aca425aa8acb2af8d19a36cd6ac4.1485955423.git.baruch@tkos.co.il |
---|---|
State | Superseded |
Headers | show |
Baruch Siach, On 1 February 2017 at 13:23, Baruch Siach <baruch@tkos.co.il> wrote: > Add firmware file for the Raspberry Pi 3 Bluetooth module. > > Note that to successfully download the firmware bluez5_utils needs a > patch[1]. > > [1] http://www.spinics.net/lists/linux-bluetooth/msg69470.html This seems a minor patch, is it safe it just add it to blue5_utils? > > > Signed-off-by: Baruch Siach <baruch@tkos.co.il> > --- > package/Config.in | 1 + > package/rpi-bt-firmware/Config.in | 7 +++++++ > package/rpi-bt-firmware/rpi-bt-firmware.mk | 21 +++++++++++++++++++++ > 3 files changed, 29 insertions(+) > create mode 100644 package/rpi-bt-firmware/Config.in > create mode 100644 package/rpi-bt-firmware/rpi-bt-firmware.mk > > diff --git a/package/Config.in b/package/Config.in > index 44aaf0887ede..8ad7d27e9de0 100644 > --- a/package/Config.in > +++ b/package/Config.in > @@ -336,6 +336,7 @@ menu "Firmware" > source "package/b43-firmware/Config.in" > source "package/linux-firmware/Config.in" > source "package/rpi-firmware/Config.in" > + source "package/rpi-bt-firmware/Config.in" > source "package/sunxi-boards/Config.in" > source "package/ts4900-fpga/Config.in" > source "package/ux500-firmware/Config.in" > diff --git a/package/rpi-bt-firmware/Config.in b/package/rpi-bt-firmware/ > Config.in > new file mode 100644 > index 000000000000..366ce9196941 > --- /dev/null > +++ b/package/rpi-bt-firmware/Config.in > @@ -0,0 +1,7 @@ > +config BR2_PACKAGE_RPI_BT_FIRMWARE > + bool "rpi-bt-firmware" > + depends on BR2_arm || BR2_aarch64 > + help > + Raspberry Pi 3 Broadcom BCM43438 Bluetooth module firmware. > I think this will also be needed on the raspberry pi zero w so might be worth updating the comment. > + > + https://aur.archlinux.org/packages/pi-bluetooth > diff --git a/package/rpi-bt-firmware/rpi-bt-firmware.mk > b/package/rpi-bt-firmware/rpi-bt-firmware.mk > new file mode 100644 > index 000000000000..255da1926211 > --- /dev/null > +++ b/package/rpi-bt-firmware/rpi-bt-firmware.mk > @@ -0,0 +1,21 @@ > +########################################################### > ##################### > +# > +# rpi-bt-firmware > +# > +########################################################### > ##################### > + > +RPI_BT_FIRMWARE_VERSION = a439f892bf549ddfefa9ba7ad1999cc515f233bf > +RPI_BT_FIRMWARE_SITE = https://aur.archlinux.org/pi-bluetooth.git Is aur a good place to pull this from? Hopefully one day BCM43430A1.hcd will make it's way into linux-firmware but until then it seems like raspbian is the source of this file so i think it's better to get it from them. > > +RPI_BT_FIRMWARE_SITE_METHOD = git > +RPI_BT_FIRMWARE_LICENSE = PROPRIETARY > +RPI_BT_FIRMWARE_LICENSE_FILES = LICENCE.broadcom_bcm43xx > + > +# The BlueZ hciattach utility looks for firmware in /etc/firmware. Add a > +# compatibility symlink. > +define RPI_BT_FIRMWARE_INSTALL_TARGET_CMDS > + ln -sf ../lib/firmware $(TARGET_DIR)/etc/firmware + $(INSTALL) -D -m 0644 $(@D)/BCM43430A1.hcd \ > + $(TARGET_DIR)/lib/firmware/BCM43430A1.hcd > Given you have to patch hciattach_bcm43xx.c to use this firmware why not also correct the path to the firmware? Assuming BCM43430A1.hcd ends up in linux-firmware then it would reside in /lib/firmware/brcm. If you patch the correct path to BCM43430A1.hcd then there is no need for the symlink. > +endef > + > +$(eval $(generic-package)) > So i was thinking something more like this where we get the firmware from the raspbian package. what do you think? RPI_BT_FIRMWARE_VERSION = 1.2 RPI_BT_FIRMWARE_SOURCE=bluez-firmware_$(RPI_BT_FIRMWARE_VERSION).orig.tar.gz RPI_BT_FIRMWARE_SITE = https://archive.raspberrypi.org/debian/pool/main/b/bluez-firmware RPI_BT_FIRMWARE_EXTRA_DOWNLOADS = bluez-firmware_$(RPI_BT_FIRMWARE_VERSION)-3+rpi1.debian.tar.xz RPI_BT_FIRMWARE_LICENSE = Proprietary RPI_BT_FIRMWARE_LICENSE_FILES = broadcom/BCM-LEGAL.txt # Extract the Debian tarball inside the sources define RPI_BT_FIRMWARE_DEBIAN_EXTRACT $(call suitable-extractor,$(notdir $(RPI_BT_FIRMWARE_EXTRA_DOWNLOADS))) \ $(DL_DIR)/$(notdir $(RPI_BT_FIRMWARE_EXTRA_DOWNLOADS)) | \ $(TAR) -C $(@D) $(TAR_OPTIONS) - endef RPI_BT_FIRMWARE_POST_EXTRACT_HOOKS += RPI_BT_FIRMWARE_DEBIAN_EXTRACT define RPI_BT_FIRMWARE_INSTALL_TARGET_CMDS $(INSTALL) -D -m 0644 $(@D)/broadcom/BCM43430A1.hcd $(TARGET_DIR)/lib/firmware/brcm/BCM43430A1.hcd endef Finally for this firmware to be useful don't we also need sysv and systemd scripts to call hciattach? Thanks Martin -- > 2.11.0 > > _______________________________________________ > buildroot mailing list > buildroot@busybox.net > http://lists.busybox.net/mailman/listinfo/buildroot >
Hi Martin, On Tue, Mar 07, 2017 at 10:34:02AM +0000, Martin Bark wrote: > On 1 February 2017 at 13:23, Baruch Siach <baruch@tkos.co.il> wrote: > > Add firmware file for the Raspberry Pi 3 Bluetooth module. > > > > Note that to successfully download the firmware bluez5_utils needs a > > patch[1]. > > > > [1] http://www.spinics.net/lists/linux-bluetooth/msg69470.html > > This seems a minor patch, is it safe it just add it to blue5_utils? Upstream rejected the patch, and Buildroot generally does not add feature patches. This is arguably not a "feature" patch, but I still don't think Buildroot should carry it. > > +config BR2_PACKAGE_RPI_BT_FIRMWARE > > + bool "rpi-bt-firmware" > > + depends on BR2_arm || BR2_aarch64 > > + help > > + Raspberry Pi 3 Broadcom BCM43438 Bluetooth module firmware. > > I think this will also be needed on the raspberry pi zero w so might be > worth updating the comment. Have you tested it on the Pi Zero W? > > +RPI_BT_FIRMWARE_VERSION = a439f892bf549ddfefa9ba7ad1999cc515f233bf > > +RPI_BT_FIRMWARE_SITE = https://aur.archlinux.org/pi-bluetooth.git > > Is aur a good place to pull this from? Hopefully one day BCM43430A1.hcd > will make it's way into linux-firmware but until then it seems like > raspbian is the source of this file so i think it's better to get it from > them. See below. > > +RPI_BT_FIRMWARE_SITE_METHOD = git > > +RPI_BT_FIRMWARE_LICENSE = PROPRIETARY > > +RPI_BT_FIRMWARE_LICENSE_FILES = LICENCE.broadcom_bcm43xx > > + > > +# The BlueZ hciattach utility looks for firmware in /etc/firmware. Add a > > +# compatibility symlink. > > +define RPI_BT_FIRMWARE_INSTALL_TARGET_CMDS > > + ln -sf ../lib/firmware $(TARGET_DIR)/etc/firmware > > + $(INSTALL) -D -m 0644 $(@D)/BCM43430A1.hcd \ > > + $(TARGET_DIR)/lib/firmware/BCM43430A1.hcd > > > > Given you have to patch hciattach_bcm43xx.c to use this firmware why not > also correct the path to the firmware? Assuming BCM43430A1.hcd ends up in > linux-firmware then it would reside in /lib/firmware/brcm. If you patch > the correct path to BCM43430A1.hcd then there is no need for the symlink. I prefer to keep the upstream patch as minimal as possible. Also, although unlikely, upstream may change firmware search location to /lib/firmware. So I would like to keep compatibility with both paths. > > +endef > > + > > +$(eval $(generic-package)) > > So i was thinking something more like this where we get the firmware from > the raspbian package. what do you think? > > RPI_BT_FIRMWARE_VERSION = 1.2 > RPI_BT_FIRMWARE_SOURCE=bluez-firmware_$(RPI_BT_FIRMWARE_VERSION).orig.tar.gz > RPI_BT_FIRMWARE_SITE = > https://archive.raspberrypi.org/debian/pool/main/b/bluez-firmware Does archive.raspberrypi.org keep older versions of source packages forever like snapshot.debian.org? > RPI_BT_FIRMWARE_EXTRA_DOWNLOADS = > bluez-firmware_$(RPI_BT_FIRMWARE_VERSION)-3+rpi1.debian.tar.xz > RPI_BT_FIRMWARE_LICENSE = Proprietary > RPI_BT_FIRMWARE_LICENSE_FILES = broadcom/BCM-LEGAL.txt > > # Extract the Debian tarball inside the sources > define RPI_BT_FIRMWARE_DEBIAN_EXTRACT > $(call suitable-extractor,$(notdir > $(RPI_BT_FIRMWARE_EXTRA_DOWNLOADS))) \ > $(DL_DIR)/$(notdir $(RPI_BT_FIRMWARE_EXTRA_DOWNLOADS)) | \ > $(TAR) -C $(@D) $(TAR_OPTIONS) - > endef > RPI_BT_FIRMWARE_POST_EXTRACT_HOOKS += RPI_BT_FIRMWARE_DEBIAN_EXTRACT This is overly complicated, in my opinion. I prefer my simpler approach. > define RPI_BT_FIRMWARE_INSTALL_TARGET_CMDS > $(INSTALL) -D -m 0644 $(@D)/broadcom/BCM43430A1.hcd > $(TARGET_DIR)/lib/firmware/brcm/BCM43430A1.hcd > endef > > Finally for this firmware to be useful don't we also need sysv and systemd > scripts to call hciattach? You may use either of the two Rpi UARTs to communicate with the Bluetooth module. I don't think we should hard code that decision into a startup script. This is something for local user to customize. Thanks for reviewing. baruch
diff --git a/package/Config.in b/package/Config.in index 44aaf0887ede..8ad7d27e9de0 100644 --- a/package/Config.in +++ b/package/Config.in @@ -336,6 +336,7 @@ menu "Firmware" source "package/b43-firmware/Config.in" source "package/linux-firmware/Config.in" source "package/rpi-firmware/Config.in" + source "package/rpi-bt-firmware/Config.in" source "package/sunxi-boards/Config.in" source "package/ts4900-fpga/Config.in" source "package/ux500-firmware/Config.in" diff --git a/package/rpi-bt-firmware/Config.in b/package/rpi-bt-firmware/Config.in new file mode 100644 index 000000000000..366ce9196941 --- /dev/null +++ b/package/rpi-bt-firmware/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_RPI_BT_FIRMWARE + bool "rpi-bt-firmware" + depends on BR2_arm || BR2_aarch64 + help + Raspberry Pi 3 Broadcom BCM43438 Bluetooth module firmware. + + https://aur.archlinux.org/packages/pi-bluetooth diff --git a/package/rpi-bt-firmware/rpi-bt-firmware.mk b/package/rpi-bt-firmware/rpi-bt-firmware.mk new file mode 100644 index 000000000000..255da1926211 --- /dev/null +++ b/package/rpi-bt-firmware/rpi-bt-firmware.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# rpi-bt-firmware +# +################################################################################ + +RPI_BT_FIRMWARE_VERSION = a439f892bf549ddfefa9ba7ad1999cc515f233bf +RPI_BT_FIRMWARE_SITE = https://aur.archlinux.org/pi-bluetooth.git +RPI_BT_FIRMWARE_SITE_METHOD = git +RPI_BT_FIRMWARE_LICENSE = PROPRIETARY +RPI_BT_FIRMWARE_LICENSE_FILES = LICENCE.broadcom_bcm43xx + +# The BlueZ hciattach utility looks for firmware in /etc/firmware. Add a +# compatibility symlink. +define RPI_BT_FIRMWARE_INSTALL_TARGET_CMDS + ln -sf ../lib/firmware $(TARGET_DIR)/etc/firmware + $(INSTALL) -D -m 0644 $(@D)/BCM43430A1.hcd \ + $(TARGET_DIR)/lib/firmware/BCM43430A1.hcd +endef + +$(eval $(generic-package))
Add firmware file for the Raspberry Pi 3 Bluetooth module. Note that to successfully download the firmware bluez5_utils needs a patch[1]. [1] http://www.spinics.net/lists/linux-bluetooth/msg69470.html Signed-off-by: Baruch Siach <baruch@tkos.co.il> --- package/Config.in | 1 + package/rpi-bt-firmware/Config.in | 7 +++++++ package/rpi-bt-firmware/rpi-bt-firmware.mk | 21 +++++++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 package/rpi-bt-firmware/Config.in create mode 100644 package/rpi-bt-firmware/rpi-bt-firmware.mk