ฉันประสบปัญหาเดียวกันกับอะแดปเตอร์ Tp-Link UB500 และฉันสามารถแก้ปัญหานี้ได้ตามคำแนะนำของ Pilot6 ทำตามขั้นตอนด้านล่าง ขอบคุณ Pilot6
ขั้นตอนที่ 1: ดาวน์โหลดและแตกไฟล์ซอร์สเคอร์เนล Linux
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.11.tar.xz
tar xpvf ลินุกซ์-5.11.tar.xz
ตรวจสอบให้แน่ใจว่าใช้เวอร์ชันเคอร์เนลตามระบบของคุณ (ตรวจสอบได้กับ ชื่อ -r)
ขั้นตอนที่ 2: แก้ไข btusb.c
cd linux-5.11/drivers/bluetooth
gedit btusb.c
เพิ่มต่อไปนี้
/* ทีพีลิงค์ UB500 */
{ USB_DEVICE(0x2357, 0x0604), .driver_info = BTUSB_REALTEK },
ภายใต้ส่วน "static const struct usb_device_id blacklist_table[]" หลังจาก /* อุปกรณ์ที่ใช้ Silicon Wave */.
ขั้นตอนที่ 3: แก้ไข hci_ldisc.c
(อาจไม่จำเป็นสำหรับเคอร์เนลบางเวอร์ชัน)
แทนที่
คง ssize_t hci_uart_tty_read (struct tty_struct * tty, ไฟล์ struct * ไฟล์,
ถ่านที่ไม่ได้ลงนาม __user * buf, size_t nr)
ถึง
คง ssize_t hci_uart_tty_read (struct tty_struct * tty, ไฟล์ struct * ไฟล์,
ถ่านที่ไม่ได้ลงนาม __user * buf, size_t nr,
เป็นโมฆะ **คุกกี้ offset ยาวที่ไม่ได้ลงนาม)
ขั้นตอนที่ 4: รวบรวมโมดูล
ทำให้ -C /lib/modules/$(uname -r)/build M=$(pwd) สะอาด
cp /usr/src/linux-headers-$(uname -r)/.config ./
cp /usr/src/linux-headers-$(uname -r)/Module.symvers Module.symvers
สร้างโมดูล -C /lib/modules/$(uname -r)/build M=$(pwd)
sudo cp btusb.ko /lib/modules/$(uname -r)/kernel/drivers/bluetooth
หากคุณมีการบู๊ตแบบปลอดภัย ก็จำเป็นต้องเซ็นชื่อโมดูลด้วย ค้นหา "วิธีการเซ็นสิ่งต่างๆ สำหรับการเริ่มต้นระบบแบบปลอดภัย"
ขั้นตอนที่ 5: แทนที่โมดูลเก่า
sudo cp btusb.ko /lib/modules/$(uname -r)/kernel/drivers/bluetooth
ขั้นตอนที่ 6: โหลด btusb ใหม่
sudo modprobe -r btusb
sudo modprobe -v btusb
มันได้ผลสำหรับฉัน!