Bluetooth Broadcom 43142 ไม่ทำงาน


38

Bluetooth เปิดอยู่ แต่ไม่สามารถค้นหาหรือพบได้โดยอุปกรณ์อื่น ๆ

ผลลัพธ์ของsudo service bluetooth status:

● bluetooth.service - Bluetooth service
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
   Active: active (running) since ხუთ 2015-06-04 22:33:18 GET; 13min ago
 Main PID: 26678 (bluetoothd)
   CGroup: /system.slice/bluetooth.service
           └─26678 /usr/sbin/bluetoothd -n

ივნ 04 22:39:14 Rangoo bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/HFPAG
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/HFPHS
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/A2DPSource
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/A2DPSink
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/HFPAG
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/HFPHS
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/A2DPSource
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/A2DPSink
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: Adapter /org/bluez/26678/hci0 has been enabled
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: bluetoothd[26678]: Adapter /org/bluez/26678/hci0 has been enabled

ผลลัพธ์ของlsusb:

Bus 003 Device 005: ID 0a5c:21d7 Broadcom Corp. BCM43142 Bluetooth 4.0

ฉันจะแก้ไขได้อย่างไร


คำถามที่คล้ายกันกับคำตอบสำหรับการ์ด 4352 askubuntu.com/questions/617513/ …
วิลฟ์

คำตอบ:


77

คุณต้องติดตั้งเฟิร์มแวร์

ไม่อนุญาตให้เผยแพร่ Broadcom เฟิร์มแวร์โดยใบอนุญาต Broadcom ดังนั้นคุณต้องรับมันเอง มันซับซ้อนเล็กน้อย แต่ไม่มีวิธีการทางกฎหมายอื่น ๆ

  1. ดาวน์โหลดBroadcom Windows 8 ไดร์เวอร์หรือจากที่นี่

หากอุปกรณ์ของคุณไม่ได้อยู่ในไดรเวอร์เหล่านี้คุณจะต้องค้นหารุ่นที่ใหม่กว่าที่ไหนสักแห่ง Broadcom ลบไดรเวอร์ล่าสุดออกจากไซต์ของพวกเขาเพื่อทำให้ยากขึ้น

ผู้ค้าแล็ปท็อปบางรายมีไดรเวอร์บลูทู ธ ในเว็บไซต์ของพวกเขา แต่บางรายก็ไม่สามารถซิปได้ ดังนั้นจึงเป็นภารกิจบางอย่าง ฉันสามารถดาวน์โหลดไดรเวอร์ Broadcom ล่าสุดได้จากเว็บไซต์ของพวกเขา แต่ไม่มีอีกแล้ว

  1. เปิดไฟล์นี้โดยตัวจัดการการเก็บถาวรและค้นหาbcbtums-win8x86-brcm.infไฟล์ ชื่อของไฟล์อาจแตกต่างกันในไดร์เวอร์บางตัว สามารถbcbtums.infอยู่ที่ไดเร็กทอรี Win32 หรือ Win64 ไม่สำคัญว่าจะดาวน์โหลด 32 หรือ 64 บิต
  2. ค้นหาแฟ้มนี้เพื่อหา VID_ 0A5C & PID_ 21D7 ตัวเลขเหล่านี้มาจากlsusbผลลัพธ์ของคุณ

    0a5c: 21d7 Broadcom Corp. BCM43142 บลูทู ธ 4.0

หมายเหตุ:อุปกรณ์บางอย่างจะไม่ได้รับการยอมรับว่าเป็น Broadcom BT lsusbใน หากคุณไม่แน่ใจว่าอุปกรณ์ตัวใดเป็นอุปกรณ์ BT ของคุณให้รันusb-devicesคำสั่งมันจะให้ข้อมูลรายละเอียดเพิ่มเติม คุณสามารถค้นหาผลิตภัณฑ์และรหัสผู้จำหน่ายได้ที่นั่น

คุณจะเห็นบรรทัดที่ลงท้ายด้วยRAMUSB21D7

ค้นหาไฟล์นี้สำหรับ RAMUSB21D7 คุณจะพบส่วนที่นั่นเช่น:

    [RAMUSB21D7.CopyList]
    bcbtums.sys
    btwampfl.sys
    BCM43142A0_001.001.011.0122.0126.hex

นั่นคือสิ่งที่เรากำลังมองหา ชื่อของไฟล์เฟิร์มแวร์ BCM43142A0_001.001.011.0122.0126.hex

  1. ตอนนี้แยกเฟิร์มแวร์นั้นออกจากไฟล์ cab เดียวกัน

    จากนั้นคุณต้องแปลงไฟล์นี้จากฐานสิบหกเป็นรูปแบบ hcd

  2. ดาวน์โหลดเครื่องมือสำหรับสิ่งนั้น

    git clone git://github.com/jessesung/hex2hcd.git
    cd hex2hcd
    make
    

    คุณจะได้รับโฟลเดอร์hex2hcdในไดเรกทอรีบ้านของคุณ

  3. วางไฟล์เฟิร์มแวร์ลงในโฟลเดอร์โฮมของคุณแล้วเรียกใช้

    ~/hex2hcd/hex2hcd ~/BCM43142A0_001.001.011.0122.0126.hex ~/BCM43142A0-0a5c-21d7.hcd
    

    คุณจะเห็นว่า0a5c-21d7เป็น ID ของอะแดปเตอร์ของคุณจากlsusb

สำคัญ:สำหรับเมล็ด 4.2+ ให้คุณเรียกไฟล์นี้BCM.hcdแทน

   ~/hex2hcd/hex2hcd ~/BCM43142A0_001.001.011.0122.0126.hex ~/BCM.hcd

สำหรับเมล็ด 4.8+ ชื่อของไฟล์ที่ควรจะเป็นเช่นBCM-<VID>-<PID>.hcdBCM-0a5c-21d7

สำหรับเคอร์เนล 5.0 ชื่อไฟล์นั้นเป็นอีกครั้ง BCM43142A0-0a5c-21d7.hcd

  1. ตอนนี้เพียงแค่คัดลอกBCM43142A0-0a5c-21d7.hcdหรือไฟล์อื่นตามรุ่นเคอร์เนลไปยัง/lib/firmware/brcmไดเรกทอรีโดย

    sudo cp ~/BCM43142A0-0a5c-21d7.hcd /lib/firmware/brcm
    

สำหรับเมล็ด 4.2+

    sudo cp ~/BCM.hcd /lib/firmware/brcm

สำหรับเมล็ด 4.8+

    sudo cp ~/BCM-0a5c-21d7.hcd  /lib/firmware/brcm

คุณสามารถตรวจสอบdmesg | grep -i blueหากชื่อไฟล์ที่ถูกต้องโดยการทำงาน จะมีข้อความแสดงข้อผิดพลาดหากไม่พบไฟล์

หากชื่อไฟล์ที่ร้องขอไม่ตรงกับไฟล์ที่คุณสร้างขึ้นให้เปลี่ยนชื่อhcdไฟล์

  1. ปิดและเปิดคอมพิวเตอร์ของคุณอีกครั้ง ไม่เพียงรีบูต!

    อะแดปเตอร์ของคุณจะได้รับเฟิร์มแวร์และบลูทู ธ ควรใช้งานได้

ทั้งหมดนี้ดูซับซ้อน แต่เป็นทนายความของBroadcomที่กล่าวโทษเรื่องนี้ ผู้ให้บริการรายอื่นส่วนใหญ่อนุญาตให้แจกจ่ายเฟิร์มแวร์อีกครั้งภายใต้เงื่อนไขที่ว่าเสร็จสิ้นพร้อมกับใบอนุญาต

ที่ช่วยให้ผู้ดูแลระบบ linux รวมเฟิร์มแวร์ในการกระจาย

แต่ไม่ใช่ในกรณีของ Broadcom นั่นเป็นเหตุผลที่มันไม่ได้เป็นวิธีที่ง่าย

หลายคนสามารถแปลงไฟล์ hex ทั้งหมดเป็น hcd และทำให้พร้อมใช้งาน หรือเพียงเพิ่มเข้าไปในแพ็คเกจ linux-firmware ของ Ubuntu

แต่มันไม่ถูกกฎหมาย : - ((


6
ส่วนใหญ่เวลาที่ฉันตื่นขึ้นแล็ปท็อปของฉันโหลดโมดูลบลูทู ธ ล้มเหลวด้วยการติดตามเคอร์เนลกอง หากคุณต้องการบลูทู ธ โดยไม่ต้องรีบูตเครื่องคุณจะต้องยกเลิกการโหลดโมดูลบลูทู ธ ( sudo modprobe -r btusb) และโหลดซ้ำ ( sudo modprobe btusb) เพื่อให้บลูทู ธทำงานได้อีกครั้ง bugzilla.kernel.org/show_bug.cgi?id=81821
solsTiCe

1
ในขั้นตอนที่ 6, hex2hcd ต้องได้รับไฟล์เอาต์พุตเช่น: hex2hcd [อินพุตไฟล์] -o [ไฟล์เอาต์พุต] คุณช่วยอัพเดทคำตอบได้ไหม?
Minas Mina

มีไฟล์เอาต์พุตในคำตอบ หรือผู้เขียนเปลี่ยนมัน มันเคยเป็น `เอาต์พุตไฟล์อินพุตไฟล์
hex2hcd

4
ขอบคุณ @ Pilot6 สำหรับการอัปเดตโพสต์หลัก ในกรณีของฉันฉันดูข้อผิดพลาดในdmesgการรู้ไฟล์ที่ถูกต้องของฉัน ตัวอย่างผลลัพธ์ dmesg:[ 3.479417] bluetooth hci0: Direct firmware load for brcm/BCM-0a5c-6410.hcd failed with error -2 [ 3.479421] Bluetooth: hci0: BCM: Patch brcm/BCM-0a5c-6410.hcd not found
morhook

5
ผู้ใช้ DUALBOOT: โปรดทราบว่าคุณสามารถแตกเฟิร์มแวร์ที่ถูกต้องจากระบบปฏิบัติการ Windows ของคุณ ในการดำเนินการดังกล่าวให้ไปที่ Windows Device Manager ค้นหาอุปกรณ์บลูทู ธ ของคุณคลิกขวาคุณสมบัติไดรเวอร์รายละเอียดไดร์เวอร์ คุณจะพบพา ธ ไปยัง.hexไฟล์ของคุณซึ่งคุณสามารถคัดลอกไปยังระบบ Linux ของคุณได้ หลังจากนั้นทำตามขั้นตอนที่ 5-8 คำตอบนี้ยอดเยี่ยมโดยวิธีการ
มนู CJ

18

นี่คือโครงการที่มีจุดมุ่งหมายเพื่อทำให้กระบวนการเป็นบิตโดยอัตโนมัติ: https://github.com/winterheart/broadcom-bt-firmware

คัดลอก BCM ไปยัง dir / ชื่อที่ถูกต้องขึ้นอยู่กับเคอร์เนล (ดังอธิบายข้างต้น)

ใน 4.8 ฉันไม่ต้องการรีบูตเพียงแค่ใน terminal:

sudo modprobe -r btusb
sudo modprobe btusb

dmesg | grep -i blu

ควรแสดงว่ามีการโหลดหรือไม่ ตรวจสอบให้แน่ใจว่า ID ฮาร์ดแวร์ตรงกับไฟล์ มันสามารถพบได้กับ:

lsusb

ซึ่งแสดงสิ่งนี้บน Lenovo ของฉัน (เฉพาะบรรทัดนั้น):

Bus 001 Device 006: ID 105b:e065 Foxconn International, Inc. BCM43142A0 Bluetooth module

ฉันหวังว่าจะช่วย :)


1
ในกรณีของฉัน (UtechSmart USB Bluetooth 4.0 รหัสอุปกรณ์: 0a5c: 21e8) ไดรเวอร์ Winterheart ที่โหลด แต่hcitool devยังไม่แสดงอุปกรณ์ใด ๆ และมีข้อผิดพลาดใน syslog พบไดรเวอร์อื่นที่plugable.com/2014/06/23/…ที่ใช้งานได้
Greg Bray

8

นั่นคือทั้งหมดที่คุณต้องการ: https://github.com/winterheart/broadcom-bt-firmware

บนพื้นที่เก็บข้อมูลนี้คุณสามารถหารายละเอียดเพิ่มเติมและไดรเวอร์การ์ดไร้สายของ Broadcom จำเป็น


เพื่อเป็นรูปธรรมมากขึ้นฉันให้คำแนะนำที่ฉันเขียนเอง:

บทช่วยสอนนี้มีจุดประสงค์เพื่อให้การ์ดเครือข่ายไร้สาย / บลูทู ธ Broadcom Corporation BCM43142 802.11b / g / n (รอบ 01) (รหัสอุปกรณ์: 0a5c: 216d) ทำงานบนระบบ Linux (ฉันลองใช้งานบนระบบปฏิบัติการประถมศึกษา 0.4.1 โลกิ บน Ubuntu 16.04.3 LTS)

ไม่สามารถใช้งานได้กับอุปกรณ์อื่น แต่ไม่ควรแตกต่างจากขั้นตอนนี้มากเกินไปสำหรับอุปกรณ์ Broadcom อื่น ๆ ไดรเวอร์ Broadcom ที่จำเป็นอยู่ในโฟลเดอร์ reposity ของ GitHubนี้ในรูปแบบ. hcd

  1. ป้อนคำสั่งต่อไปนี้เพื่อค้นหาชื่อไดรเวอร์ที่เคอร์เนลค้นหาเมื่อโหลดไดรฟ์ขณะบู๊ต:

    dmesg | grep -i 'firmware load'
    

    ลองอันนี้ถ้ามันไม่พบอะไรเลย:

    dmesg | grep -i 'bluetooth'
    

    ผลลัพธ์ควรเป็นดังนี้:

    bluetooth hci0: Direct firmware load for brcm/BCM.hcd failed with error -2
    

    คำอธิบาย: ในกรณีของฉันเคอร์เนลกำลังมองหาไฟล์BCM.hcdภายใต้ไดเรกทอรี/lib/firmware/brcmที่คาดว่าไดรเวอร์ Broadcom จะเป็น หากเคอร์เนลค้นหาชื่อไดรเวอร์อื่นคุณต้องเปลี่ยนชื่อไฟล์ไดรเวอร์ ( BCM43142A0-0a5c-216c.hcdในกรณีของฉันสำหรับ BCM43142 (0a5c: 216d)) เป็นชื่อที่จำเป็นโดยเคอร์เนล

  2. ย้ายไดร์เวอร์ที่เปลี่ยนชื่อ (BCM.hcd) ไปที่โฮมไดเร็กตอรี่ของคุณ (/ home / YourUsername /) และเรียกใช้คำสั่งต่อไปนี้เพื่อย้ายไปยังโฟลเดอร์ที่เคอร์เนลค้นหาในขณะทำการบูท:

    sudo mv ~/BCM.hcd /lib/firmware/brcm
    

    คุณต้องใช้ไดรเวอร์ที่เกี่ยวข้องโดยขึ้นอยู่กับอุปกรณ์ของคุณและเปลี่ยนชื่อหากมีการร้องขอสำหรับเคอร์เนล

  3. รีบูทคอมพิวเตอร์ของคุณและมันก็ใช้งานได้! * (คุณสามารถเข้าได้dmesg | grep -i 'bluetooth'อีกครั้งเพื่อดูว่าได้โหลดไดรเวอร์แล้ว)


มันได้ผล! ขอบคุณมาก! ในกรณีของฉันรุ่น "BCM43142 802.11b / g / n [14e4: 4365] (rev 01)" ไม่มีอยู่ในโฟลเดอร์ github แต่ฉันเพิ่งลองกับ BCM43142A0-185f-2167.hcd และใช้งานได้!
Sriram Kannan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.