Iată un script care face toți pașii lui Aeolun.
De asemenea, driverul este descărcat și copiat, așa cum a descris Laion.
(Tocmai învăț să bash script și am încercat asta și cred că împărtășesc.)
#!/bin/bash
# Inițializare
FIX_UB_500_BT_Stick () {
echo -e „Acest script este destinat să repare BT Stick UB 500 care nu funcționează de la TP-Link”
echo -e ""
echo -e „Așa cum este descris în https://askubuntu.com/questions/1370663/bluetooth-scan-doesnt-detect-any-device-on-ubuntu-21-10”
echo -e ""
echo -e „Acest script vă ghidează prin toți pașii necesari. Cu toate acestea, vă rugăm să aveți grijă. Acest lucru vă poate deteriora sistemul sau cel puțin vă poate distruge bluetooth-ul.”
echo -e ""
echo -e „\033[33mPasul 1: Descărcați și extrageți fișierul sursă kernel Linux”.
echo -e „\033[0m”
echo -e ""
echo -e "Versiunea dvs. de kernel: "
versiune=$(uname -r)
echo $versiune
echo -e „Dacă nu 5.13, schimbați scriptul și reporniți! (Doar căutați și înlocuiți 5.13 cu versiunea dvs., atâta timp cât este 5.x)”
citiți -n 1 -p „Doriți să continuați? [da/n]” începe
if [ "$start" = "y" ] ; atunci
cd /home/max/
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[33mDescărcați locația și fișierele:”
echo -e „\033[0m”
pwd
ls
echo -e „\033[33mLocația fișierelor de schimbat:”
echo -e „\033[0m”
cd linux-5.13/drivers/bluetooth
pwd
echo -e „\033[33mPasul 2: Editați btusb.c”
echo -e „\033[31m”
echo „Adăugați:”
echo -e „\033[0m”
echo "/* Tp-Link UB500 */"
echo „{ USB_DEVICE(0x2357, 0x0604), .driver_info = BTUSB_REALTEK },”
echo -e „\033[33m”
ecou „Sub secțiune”
echo -e „\033[0m”
echo „static const struct usb_device_id blacklist_table[]”
echo -e „\033[33m”
ecou „După”
echo -e „\033[0m”
echo "/* Dispozitive bazate pe Silicon Wave */"
echo -e „\033[33m”
ecou „în btusb.c”
ecou ""
echo „Ar trebui să arate cam așa:”
echo -e „\033[0m”
echo "/* Dispozitive bazate pe 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 „{ }/* Se încheie intrarea */”
ecou ""
echo -e „\033[31m În siguranță și închideți KWrite”.
somn 5
kwrite btusb.c
citiți -n 1 -p „Ați schimbat fișierul și doriți să continuați? [da/n]” filechange1
if [ "$filechange1" = "y" ]; atunci
echo -e „\033[33m”
echo „Ok, continuăm”.
echo -e „\033[0m”
elif [ "$filechange1" = "n" ];atunci
sudo rm -r /home/max/FIX_UB_500_BT_Stick
Ieșire
altfel
echo -e „\033[31mAți schimbat fișierul și doriți să continuați? [y/n]; Apăsați ctrl+c pentru a anula.”
echo -e „\033[0m”
citiți -n 1
fi
echo -e „\033[33mPasul 3: Editați hci_ldisc.c”
echo -e „\033[0m”
echo -e ""
File="hci_ldisc.c"
if grep -q "void **cookie, unsigned long offset)" "$File"; atunci
echo -e "\033[33mPasul nu este necesar. Fișierul este deja corect."
echo -e „\033[0m”
altfel
echo -e „\033[33mModificare:”
echo -e „\033[0m”
echo "static ssiize_t hci_uart_tty_read(struct tty_struct *tty, struct file *file,"
echo " unsigned char __user *buf, size_t nr)"
ecou ""
echo -e „\033[33minto”
echo -e „\033[0m”
echo "static ssiize_t hci_uart_tty_read(struct tty_struct *tty, struct file *file,"
echo " unsigned char __user *buf, size_t nr, "
echo " void **cookie, offset lung nesemnat) "
echo -e „\033[33m”
echo „în hci_ldisc.c”
ecou ""
echo „Safe and Close KWrite. (Acest pas poate să nu fie necesar pentru unele versiuni)”
somn 5
kwrite hci_ldisc.c
citiți -n 1 -p „Ați schimbat fișierul și doriți să continuați? [da/n]” filechange2
if [ "$filechange2" = "y" ]; atunci
echo -e „\033[33m”
echo „Ok, continuăm”.
echo -e „\033[0m”
elif [ "$filechange2" = "n" ];atunci
sudo rm -r /home/max/FIX_UB_500_BT_Stick
Ieșire
altfel
echo -e "\033[31mAți schimbat fișierul și doriți să continuați? [da/n];"
citiți -n 1
fi
fi
echo -e „\033[33mPasul 4: Compilați module”.
echo -e „\033[0m”
face -C /lib/modules/$(uname -r)/build M=$(pwd) curat
echo -e „\033[33mFă 1 gata”.
echo -e „\033[0m”
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) module
echo -e „\033[33mMake 2 done.”
echo -e „\033[33mPasul 5: Înlocuiți modulul vechi”.
echo -e „\033[0m”
sudo cp btusb.ko /lib/modules/$(uname -r)/kernel/drivers/bluetooth
echo -e „\033[33mCopiat în Kernelul curent”
echo -e ""
echo -e "\033[33mPasul 6: Încărcați btusb nou."
echo -e „\033[0m”
sudo modprobe -r btusb
sudo modprobe -v btusb
echo -e „\033[33mModprobe terminat”
echo -e „\033[0m”
dacă [[ ! -f „/lib/firmware/rtl_bt/rtl8761b_fw.bin” ]]
atunci
echo -e „\033[33mPasul 7: Descărcați firmware pentru UB500 de la Realteks GIT”.
citiți -n 1 -p „FW-ul pentru UB500 BT-Dongle nu este prezent în /lib/firmware/rtl_bt/./n Doriți să descărcați fișierul din Realteks Git și să îl copiați în sistemul dvs.? [da/n]" FW_Install
if [ "$FW_Install" = "y" ]; atunci
echo -e „\033[33m”
echo „Ok, continuăm”.
echo -e „\033[0m”
cd /home/max/FIX_UB_500_BT_Stick
mkdir FW
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
dacă [[ -f "/lib/firmware/rtl_bt/rtl8761b_fw.bin" ]]; atunci
echo -e „\033[33mFW a fost copiat cu succes. Reporniți și încercați stick-ul Bluetooth. Ar trebui să funcționeze acum.”
altfel
echo -e "\033[33mCeva a mers prost. Va trebui să descărcați singur FW-ul și să-l plasați în folderul /lib/firmware/rtl_bt/ cu numele rtl8761b_fw.bin /n Veți găsi fișierul în acest Repo: https://github.com/Realtek-OpenSource/android_hardware_realtek/raw/rtk1395/bt/rtkbt/Firmware/BT/rtl8761b_config /n Dacă ați plasat fișierul acolo, reporniți și UB500 ar trebui să funcționeze acum.”
fi
elif [ "$fFW_Install" = "n" ];atunci
sudo rm -r /home/max/FIX_UB_500_BT_Stick
echo -e "\033[33mFW nu a fost descărcat. Va trebui să descărcați singur FW-ul și să-l plasați în folderul /lib/firmware/rtl_bt/ cu numele rtl8761b_fw.bin /n Veți găsi fișierul în acest Repo : https://github.com/Realtek-OpenSource/android_hardware_realtek/raw/rtk1395/bt/rtkbt/Firmware/BT/rtl8761b_config /n Dacă ați plasat fișierul acolo, reporniți și UB500 ar trebui să funcționeze acum.”
echo -e „\033[0m”
Ieșire
altfel
echo -e "\033[31mDescărcați FW-ul? [da/n];"
citiți -n 1
fi
altfel
echo -e „\033[33mSe pare că /lib/firmware/rtl_bt/rtl8761b_fw.bin există deja. Nu este nevoie de alți pași.Reporniți și încercați UB500 BT-Stick.”
fi
sudo rm -r /home/max/FIX_UB_500_BT_Stick
echo -e „\033[33mFișierele descărcate și directorul șterse /home/max/FIX_UB_500_BT_Stick”
echo -e „\033[0m”
elif [ "$start" = "n" ];atunci
sudo rm -r /home/max/FIX_UB_500_BT_Stick
Ieșire
altfel
echo -e "\033[33mAți introdus o selecție invalidă!"
echo -e "\033[33mVă rugăm să încercați din nou!"
echo -e ""
echo -e „\033[31mApăsați orice tastă pentru a continua...”
citiți -n 1
fi
}
FIX_UB_500_BT_Stick
În pasul 3, din păcate, verificarea în hci_ldisc.c nu funcționează. Deci trebuie să verificați manual.
Folosește kwrite ca editor de text.
Nu rulați scriptul ca sudo. Așteptați să vă ceară sudo.
Dacă ești ca mine nou în toate acestea:
Pentru ca acest lucru să funcționeze, creați un fișier text, dar utilizați extensia .sh, nu .txt
Copiați tot codul din el și în siguranță.
În directorul dvs. deschideți un terminal.
chmod a+x YOURFILE.sh
bash YOURFILE.sh
Urmați instrucțiunile cu precizie.
Mi-am editat destul de mult răspunsul, așa că este mai util.