Вот скрипт, который делает все шаги Aeolun.
Также драйвер загружается и копируется, как описано Лайоном.
(Я только учусь скрипту bash, и я попробовал это, и хотя я делюсь.)
#!/бин/баш
FIX_UB_500_BT_Stick () {
echo -e "Этот скрипт предназначен для исправления неработающей BT Stick UB 500 от TP-Link"
эхо -е ""
echo -e "Как описано в https://askubuntu.com/questions/1370663/bluetooth-scan-doesnt-detect-any-device-on-ubuntu-21-10"
эхо -е ""
echo -e "Эти сценарии проведут вас через все необходимые шаги. Однако будьте осторожны. Это может привести к поломке вашей системы или, по крайней мере, к поломке Bluetooth."
эхо -е ""
echo -e "\033[33mШаг 1: Загрузите и распакуйте исходный файл ядра Linux."
эхо -е "\033[0м"
эхо -е ""
echo -e "Ваша версия ядра: "
версия = $ (унаме -r)
эхо $версия
echo -e "Если не 5.13, измените скрипт и перезапустите! (Просто найдите и замените 5.13 своей версией, если это 5.x)"
read -n 1 -p "Хотите продолжить? [y/n]" start
если [ "$ start" = "y" ] ; тогда
компакт-диск /дом/макс/
mkdir FIX_UB_500_BT_Stick
компакт-диск 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[33mРасположение и файлы для загрузки:"
эхо -е "\033[0м"
pwd
лс
echo -e "\033[33mРасположение файлов, которые необходимо изменить:"
эхо -е "\033[0м"
cd linux-5.13/драйверы/блютуз
pwd
echo -e "\033[33mШаг 2: Изменить btusb.c"
эхо -е "\033[31м"
эхо "Добавить:"
эхо -е "\033[0м"
echo "/* Tp-Link UB500 */"
echo "{USB_DEVICE(0x2357, 0x0604), .driver_info = BTUSB_REALTEK},"
эхо -е "\033[33м"
эхо "Под разделом"
эхо -е "\033[0м"
echo "статическая константа struct usb_device_id blacklist_table[]"
эхо -е "\033[33м"
эхо "После"
эхо -е "\033[0м"
echo "/* Устройства на базе Silicon Wave */"
эхо -е "\033[33м"
эхо "в btusb.c"
эхо ""
echo "Это должно выглядеть примерно так:"
эхо -е "\033[0м"
echo "/* Устройства на базе Silicon Wave */"
echo "{USB_DEVICE(0x0c10, 0x0000), .driver_info = BTUSB_SWAVE},"
echo "/* Tp-Link UB500 */"
echo "{USB_DEVICE(0x2357, 0x0604), .driver_info = BTUSB_REALTEK}, "
echo "{ }/* Завершение записи */"
эхо ""
echo -e "\033[31m Безопасно и закрыть KWrite."
спать 5
написать btusb.c
read -n 1 -p "Вы изменили файл и хотите продолжить? [y/n]" filechange1
если [ "$filechange1" = "y" ]; тогда
эхо -е "\033[33м"
echo "Хорошо, продолжаем."
эхо -е "\033[0м"
elif [ "$filechange1" = "n" ];тогда
sudo rm -r /home/max/FIX_UB_500_BT_Stick
выход
еще
echo -e "\033[31mВы изменили файл и хотите продолжить? [y/n]; Нажмите ctrl+c, чтобы прервать."
эхо -е "\033[0м"
читать -n 1
фи
echo -e "\033[33mШаг 3: Отредактируйте файл hci_ldisc.c"
эхо -е "\033[0м"
эхо -е ""
Файл="hci_ldisc.c"
if grep -q "void **cookie, длинное смещение без знака)" "$File"; тогда
echo -e "\033[33mШаг не нужен. Файл уже правильный."
эхо -е "\033[0м"
еще
echo -e "\033[33mИзменить:"
эхо -е "\033[0м"
echo "статический ssize_t hci_uart_tty_read(struct tty_struct *tty, struct file *file,"
echo "беззнаковый символ __user *buf, size_t nr)"
эхо ""
echo -e "\033[33minto"
эхо -е "\033[0м"
echo "статический ssize_t hci_uart_tty_read(struct tty_struct *tty, struct file *file,"
echo " беззнаковый символ __user *buf, size_t nr, "
echo "void **cookie, беззнаковое длинное смещение)"
эхо -е "\033[33м"
эхо "в hci_ldisc.c"
эхо ""
echo "Защитите и закройте KWrite. (Для некоторых версий этот шаг может не понадобиться)"
спать 5
kнаписать hci_ldisc.c
read -n 1 -p "Вы изменили файл и хотите продолжить? [y/n]" filechange2
если [ "$filechange2" = "y" ]; тогда
эхо -е "\033[33м"
echo "Хорошо, продолжаем."
эхо -е "\033[0м"
elif [ "$filechange2" = "n" ]; затем
sudo rm -r /home/max/FIX_UB_500_BT_Stick
выход
еще
echo -e "\033[31mВы изменили файл и хотите продолжить? [y/n];"
читать -n 1
фи
фи
echo -e "\033[33mШаг 4: Скомпилируйте модули."
эхо -е "\033[0м"
make -C /lib/modules/$(uname -r)/build M=$(pwd) очистить
echo -e "\033[33mВыполнить 1".
эхо -е "\033[0м"
cp /usr/src/linux-headers-$(uname -r)/.config ./
cp /usr/src/linux-headers-$(uname -r)/Module.symvers Module.symvers
make -C /lib/modules/$(uname -r)/build M=$(pwd) модули
echo -e "\033[33mВыполнить 2".
echo -e "\033[33mШаг 5: Замените старый модуль."
эхо -е "\033[0м"
sudo cp btusb.ko /lib/modules/$(uname -r)/kernel/drivers/bluetooth
echo -e "\033[33mСкопировано в текущее ядро"
эхо -е ""
echo -e "\033[33mШаг 6: Загрузите новый btusb."
эхо -е "\033[0м"
sudo modprobe -r btusb
sudo modprobe -v btusb
echo -e "\033[33mModprobe сделано"
эхо -е "\033[0м"
если [[ ! -f "/lib/прошивка/rtl_bt/rtl8761b_fw.bin" ]]
тогда
echo -e "\033[33mШаг 7: Загрузите прошивку для UB500 из Realteks GIT."
read -n 1 -p "Микропрограмма для BT-донгла UB500 отсутствует в /lib/firmware/rtl_bt/./n Вы хотите загрузить файл из Realteks Git и скопировать его в свою систему? [да/нет]" FW_Install
если [ "$FW_Install" = "y" ]; тогда
эхо -е "\033[33м"
echo "Хорошо, продолжаем."
эхо -е "\033[0м"
cd /home/max/FIX_UB_500_BT_Stick
мкдир FW
компакт-диск 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
если [[ -f "/lib/firmware/rtl_bt/rtl8761b_fw.bin" ]]; тогда
echo -e "\033[33mFW успешно скопирован. Перезагрузитесь и попробуйте Bluetooth-накопитель. Теперь он должен работать."
еще
echo -e "\033[33mЧто-то пошло не так. Вам придется скачать прошивку самостоятельно и поместить ее в папку /lib/firmware/rtl_bt/ с именем rtl8761b_fw.bin /n Вы найдете файл в этом репозитории: https://github.com/Realtek-OpenSource/android_hardware_realtek/raw/rtk1395/bt/rtkbt/Firmware/BT/rtl8761b_config/n Если вы поместили туда файл, перезагрузитесь, и ваш UB500 должен работать».
фи
elif [ "$fFW_Install" = "n" ];тогда
sudo rm -r /home/max/FIX_UB_500_BT_Stick
echo -e "\033[33mFW не был загружен. Вам нужно будет загрузить прошивку самостоятельно и поместить ее в папку /lib/firmware/rtl_bt/ с именем rtl8761b_fw.bin /n Вы найдете файл в этом репозитории : https://github.com/Realtek-OpenSource/android_hardware_realtek/raw/rtk1395/bt/rtkbt/Firmware/BT/rtl8761b_config/n Если вы поместили туда файл, перезагрузите компьютер, и ваш UB500 должен работать».
эхо -е "\033[0м"
выход
еще
echo -e "\033[31mЗагрузить прошивку? [г/н];"
читать -n 1
фи
еще
echo -e "\033[33mПохоже, /lib/firmware/rtl_bt/rtl8761b_fw.bin уже существует. Дальнейшие действия не требуются.Перезагрузитесь и попробуйте BT-Stick UB500».
фи
sudo rm -r /home/max/FIX_UB_500_BT_Stick
echo -e "\033[33mУдалены загруженные файлы и каталог /home/max/FIX_UB_500_BT_Stick"
эхо -е "\033[0м"
elif [ "$start" = "n" ];тогда
sudo rm -r /home/max/FIX_UB_500_BT_Stick
выход
еще
echo -e "\033[33mВы ввели неверный выбор!"
echo -e "\033[33mПожалуйста, попробуйте еще раз!"
эхо -е ""
echo -e "\033[31mНажмите любую клавишу, чтобы продолжить..."
читать -n 1
фи
}
FIX_UB_500_BT_Stick
К сожалению, на шаге 3 проверка в hci_ldisc.c не работает. Так что приходится проверять вручную.
Он использует kwrite в качестве текстового редактора.
Не запускайте скрипт как sudo. Подождите, пока он попросит вас ввести sudo.
Если вы, как и я, новичок во всем этом:
Чтобы это работало, создайте текстовый файл, но используйте расширение .sh, а не .txt.
Скопируйте в него весь код и сохраните.
В вашем каталоге откройте терминал.
chmod a+x ВАШ ФАЙЛ.sh
bash ВАШ ФАЙЛ.sh
Точно следуйте инструкциям.
Я довольно сильно отредактировал свой ответ, так что он более полезен.