Đây là một tập lệnh thực hiện tất cả các bước của Aeolun.
Ngoài ra, Driver được tải xuống và sao chép, như Laion đã mô tả.
(Tôi chỉ đang học bash script và tôi đã thử cái này và mặc dù tôi chia sẻ.)
#!/bin/bash
# Khởi tạo
FIX_UB_500_BT_Stick () {
echo -e "Tập lệnh này nhằm sửa lỗi BT Stick UB 500 không hoạt động của TP-Link"
tiếng vang -e ""
echo -e "Như được mô tả trong https://askubuntu.com/questions/1370663/bluetooth-scan-doesnt-detect-any-device-on-ubuntu-21-10"
tiếng vang -e ""
echo -e "Tập lệnh này hướng dẫn bạn qua tất cả các bước cần thiết. Tuy nhiên, hãy cẩn thận. Điều này có thể phá vỡ hệ thống của bạn hoặc ít nhất là phá vỡ bluetooth của bạn."
tiếng vang -e ""
echo -e "\033[33mBước 1: Tải xuống và giải nén tệp nguồn nhân Linux."
tiếng vang -e "\033[0m"
tiếng vang -e ""
echo -e "Phiên bản hạt nhân của bạn:"
phiên bản=$(uname -r)
tiếng vang phiên bản $
echo -e "Nếu không phải 5.13, hãy thay đổi tập lệnh và khởi động lại! (Chỉ cần tìm kiếm và thay thế 5.13 bằng Phiên bản của bạn, miễn là nó là 5.x)"
read -n 1 -p "Bạn có muốn tiếp tục không? [y/n]" bắt đầu
nếu [ "$start" = "y" ] ; sau đó
cd /nhà/tối đa/
mkdir FIX_UB_500_BT_Stick
cd FIX_UB_500_BT_Stick
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.13.tar.xz
tar xpvf linux-5.13.tar.xz
echo -e "\033[33mTải xuống vị trí và tệp:"
tiếng vang -e "\033[0m"
pwd
ls
echo -e "\033[33mVị trí của các tập tin sẽ được thay đổi:"
tiếng vang -e "\033[0m"
cd linux-5.13/trình điều khiển/bluetooth
pwd
echo -e "\033[33mBước 2: Chỉnh sửa btusb.c"
tiếng vang -e "\033[31m"
tiếng vang "Thêm:"
tiếng vang -e "\033[0m"
echo "/* Tp-Link UB500 */"
echo "{ USB_DEVICE(0x2357, 0x0604), .driver_info = BTUSB_REALTEK },"
tiếng vang -e "\033[33m"
tiếng vang "Dưới phần"
tiếng vang -e "\033[0m"
echo "static const struct usb_device_id blacklist_table[]"
tiếng vang -e "\033[33m"
lặp lại "Sau"
tiếng vang -e "\033[0m"
echo "/* Thiết bị dựa trên Silicon Wave */"
tiếng vang -e "\033[33m"
tiếng vang "trong btusb.c"
tiếng vang ""
echo "Nó sẽ giống như thế này:"
tiếng vang -e "\033[0m"
echo "/* Thiết bị dựa trên Silicon Wave */"
echo "{ USB_DEVICE(0x0c10, 0x0000), .driver_info = BTUSB_SWAVE },"
echo "/* Tp-Link UB500 */"
tiếng vang "{ USB_DEVICE(0x2357, 0x0604), .driver_info = BTUSB_REALTEK },"
echo "{ }/* Chấm dứt mục nhập */"
tiếng vang ""
echo -e "\033[31m An toàn và đóng KWrite."
ngủ 5
kwrite btusb.c
read -n 1 -p "Bạn đã thay đổi tập tin và muốn tiếp tục? [y/n]" filechange1
nếu [ "$filechange1" = "y" ]; sau đó
tiếng vang -e "\033[33m"
tiếng vang "Ok, tiếp tục."
tiếng vang -e "\033[0m"
elif [ "$filechange1" = "n" ];thì
sudo rm -r /home/max/FIX_UB_500_BT_Stick
lối ra
khác
echo -e "\033[31mBạn đã thay đổi tệp và muốn tiếp tục? [y/n]; Nhấn ctrl+c để hủy bỏ."
tiếng vang -e "\033[0m"
đọc -n 1
fi
echo -e "\033[33mBước 3: Chỉnh sửa hci_ldisc.c"
tiếng vang -e "\033[0m"
tiếng vang -e ""
Tệp="hci_ldisc.c"
if grep -q "void **cookie, unsigned long offset)" "$File"; sau đó
echo -e "\033[33mBước không cần thiết. Tệp đã chính xác."
tiếng vang -e "\033[0m"
khác
echo -e "\033[33mChange:"
tiếng vang -e "\033[0m"
echo "static ssize_t hci_uart_tty_read(struct tty_struct *tty, struct file *file,"
echo " unsigned char __user *buf, size_t nr)"
tiếng vang ""
echo -e "\033[33minto"
tiếng vang -e "\033[0m"
echo "static ssize_t hci_uart_tty_read(struct tty_struct *tty, struct file *file,"
echo " unsigned char __user *buf, size_t nr, "
echo " void **cookie, unsigned long offset) "
tiếng vang -e "\033[33m"
tiếng vang "trong hci_ldisc.c"
tiếng vang ""
echo "An toàn và Đóng KWrite. (Bước này có thể không cần thiết đối với một số phiên bản)"
ngủ 5
kwrite hci_ldisc.c
read -n 1 -p "Bạn đã thay đổi tập tin và muốn tiếp tục? [y/n]" filechange2
nếu [ "$filechange2" = "y" ]; sau đó
tiếng vang -e "\033[33m"
tiếng vang "Ok, tiếp tục."
tiếng vang -e "\033[0m"
elif [ "$filechange2" = "n" ];thì
sudo rm -r /home/max/FIX_UB_500_BT_Stick
lối ra
khác
echo -e "\033[31mBạn đã thay đổi tệp và muốn tiếp tục? [y/n];"
đọc -n 1
fi
fi
echo -e "\033[33mBước 4: Biên dịch mô-đun."
tiếng vang -e "\033[0m"
làm sạch -C /lib/modules/$(uname -r)/build M=$(pwd)
echo -e "\033[33mLàm 1 xong."
tiếng vang -e "\033[0m"
cp /usr/src/linux-headers-$(uname -r)/.config ./
cp /usr/src/linux-headers-$(uname -r)/Module.symvers Module.symvers
tạo các mô-đun -C /lib/modules/$(uname -r)/build M=$(pwd)
echo -e "\033[33mLàm 2 xong."
echo -e "\033[33mBước 5: Thay thế mô-đun cũ."
tiếng vang -e "\033[0m"
Sudo cp btusb.ko /lib/modules/$(uname -r)/kernel/drivers/bluetooth
echo -e "\033[33mĐã sao chép vào Kernel hiện tại"
tiếng vang -e ""
echo -e "\033[33mBước 6: Tải btusb mới."
tiếng vang -e "\033[0m"
Sudo modprobe -r btusb
sudo modprobe -v btusb
echo -e "\033[33mModprobe done"
tiếng vang -e "\033[0m"
nếu [[ ! -f "/lib/firmware/rtl_bt/rtl8761b_fw.bin" ]]
sau đó
echo -e "\033[33mBước 7: Tải xuống chương trình cơ sở cho UB500 từ Realteks GIT."
read -n 1 -p "FW cho UB500 BT-Dongle không có trong /lib/firmware/rtl_bt/./n Bạn có muốn tải xuống tệp từ Realteks Git và sao chép tệp đó vào hệ thống của mình không? [y/n]" FW_Cài đặt
nếu [ "$FW_Install" = "y" ]; sau đó
tiếng vang -e "\033[33m"
tiếng vang "Ok, tiếp tục."
tiếng vang -e "\033[0m"
cd /home/max/FIX_UB_500_BT_Stick
mkdir FW
đĩa CD FW
wget https://github.com/Realtek-OpenSource/android_hardware_realtek/raw/rtk1395/bt/rtkbt/Firmware/BT/rtl8761b_fw
Sudo cp /home/max/FIX_UB_500_BT_Stick/FW/rtl8761b_fw /lib/firmware/rtl_bt/rtl8761b_fw.bin
nếu [[ -f "/lib/firmware/rtl_bt/rtl8761b_fw.bin" ]]; sau đó
echo -e "\033[33mFW đã được sao chép thành công. Khởi động lại và thử thanh bluetooth của bạn. Nó sẽ hoạt động ngay bây giờ."
khác
echo -e "\033[33mĐã xảy ra lỗi. Bạn sẽ phải tự tải xuống FW và đặt nó vào thư mục /lib/firmware/rtl_bt/ với tên rtl8761b_fw.bin /n Bạn sẽ tìm thấy tệp trong Repo này: https://github.com/Realtek-OpenSource/android_hardware_realtek/raw/rtk1395/bt/rtkbt/Firmware/BT/rtl8761b_config /n Nếu bạn đã đặt tệp ở đó, hãy khởi động lại và UB500 của bạn sẽ hoạt động ngay bây giờ."
fi
elif [ "$fFW_Install" = "n" ];sau đó
sudo rm -r /home/max/FIX_UB_500_BT_Stick
echo -e "\033[33mFW không được tải xuống. Bạn sẽ phải tự tải xuống FW và đặt nó vào thư mục /lib/firmware/rtl_bt/ với tên rtl8761b_fw.bin /n Bạn sẽ tìm thấy tệp trong Repo này : https://github.com/Realtek-OpenSource/android_hardware_realtek/raw/rtk1395/bt/rtkbt/Firmware/BT/rtl8761b_config /n Nếu bạn đã đặt tệp ở đó, hãy khởi động lại và UB500 của bạn sẽ hoạt động ngay bây giờ."
tiếng vang -e "\033[0m"
lối ra
khác
echo -e "\033[31mTải xuống FW? [y/n];"
đọc -n 1
fi
khác
echo -e "\033[33mCó vẻ như /lib/firmware/rtl_bt/rtl8761b_fw.bin đã tồn tại. Không cần thực hiện thêm bước nào nữa.Khởi động lại và dùng thử UB500 BT-Stick của bạn."
fi
sudo rm -r /home/max/FIX_UB_500_BT_Stick
echo -e "\033[33mĐã xóa các tệp và thư mục đã tải xuống /home/max/FIX_UB_500_BT_Stick"
tiếng vang -e "\033[0m"
elif [ "$start" = "n" ];sau đó
sudo rm -r /home/max/FIX_UB_500_BT_Stick
lối ra
khác
echo -e "\033[33mBạn đã nhập một lựa chọn không hợp lệ!"
echo -e "\033[33mVui lòng thử lại!"
tiếng vang -e ""
echo -e "\033[31mNhấn phím bất kỳ để tiếp tục..."
đọc -n 1
fi
}
FIX_UB_500_BT_Stick
Đáng tiếc là ở Bước 3, kiểm tra trong hci_ldisc.c không hoạt động. Vì vậy, bạn phải kiểm tra thủ công.
Nó sử dụng kwrite làm texteditor.
Không chạy tập lệnh dưới dạng sudo. Đợi nó hỏi bạn sudo.
Nếu bạn giống như tôi, mới làm quen với tất cả:
Để làm việc này, hãy tạo một tệp văn bản nhưng sử dụng tiện ích mở rộng .sh chứ không phải .txt
Sao chép tất cả các mã trong đó và an toàn.
Trong thư mục của bạn mở một thiết bị đầu cuối.
chmod a+x YOURFILE.sh
bash TỆP CỦA BẠN.sh
Làm theo hướng dẫn một cách chính xác.
Tôi đã chỉnh sửa câu trả lời của mình khá nhiều, vì vậy nó hữu ích hơn.