[Share Experiences] RTL8761BU蓝牙芯片在Deepin上无法搜到设备的问题-爬坑记录
Tofloor
poster avatar
zcj20080882
deepin
2023-10-02 02:10
Author

RTL8761BU蓝牙芯片在Deepin上无法搜到设备的问题-爬坑记录

问题背景

在某东买了一个USB 蓝牙dongle(芯片是RTL8761BU)。如下:

截图_选择区域_20231001174654.png

在windows下运行正常,但在Deepin下(包括Deepin20和Deepin23)上,系统可以发现蓝牙控制器,但是就是扫不到其他设备,而内核日志又没有相关的错误日志,纠结很久后,认为该USB dongle不支持linux。

直到,我安装了Ubuntu22.04后,发现功能正常。通过对比内核日志发现:

  1. Ubuntun内核版本是6.2.x,而Deepin20是5.18.x,Deepin23是6.1.x
  2. Ubuntu 启动内核日志关于蓝牙部分,有如下日志,而Deepin上没有:
[   77.362001] Bluetooth: hci0: RTL: loading rtl_bt/rtl8761bu_fw.bin
[   77.362731] Bluetooth: hci0: RTL: loading rtl_bt/rtl8761bu_config.bin

而“rtl_bt/rtl8761bu_fw.binrtl_bt/rtl8761bu_config.bin在Deepin下也有,那么可能的原因就是内核版本过低不支持RTL8761BU这颗芯片。

于是,开始更换内核。

解决尝试

一、安装必备软件

$ sudo apt  install libncurses5-dev openssl libssl-dev build-essential openssl pkg-config libc6-dev bison libidn11-dev libidn11 minizip flex libelf-dev zstd -y
$ sudo apt install plymouth* console-setup -y

除了上述必须包外,还需要zlibc, 但在deepin23的源里是没有zlibc, 参考deepin论坛https://bbs.deepin.org/post/247537 ,到中科大源 去下载后手动安装。

在Deepin20下可以直接用命令 sudo apt install zlibc -y来安装。

二、准备源码

  1. 到Linux官网kernel.org 下载源码,截止2023-9-30,最新的版本稳定版本为6.6.5。索性就用最新内核吧(因为我的电脑比较新,CPU 是 Intel I7 12700H,新版内核可能更佳)。下载后解压:
$ tar -xvf linux-6.5.5.tar.xz

  1. 然后清理一下源码:
$ cd linux-6.5.5/
$ make mrproper

三、编译安装

  1. 准备config文件
$ cd linux-6.5.5
$ sudo cp /boot/config-$(uname -r) .config
$ make menuconfig #按需修改

  1. 编译内核
$ make bzImage -j16 #根据自己电脑配置修改j后面的值
#或者
$ make bzImage -j$(cat /proc/cpuinfo | grep "processor" | wc -l)

  1. 编译驱动模块
$ make modules -j$(cat /proc/cpuinfo | grep "processor" | wc -l)
  1. 安装驱动模块
$ sudo make INSTALL_MOD_STRIP=1 modules_install
  1. 安装内核
$ sudo make install

若遇到如下错误:

  INSTALL /boot
run-parts: executing /etc/kernel/postinst.d/dkms 6.5.5-amd64-desktop-hwe /boot/vmlinuz-6.5.5-amd64-desktop-hwe
dkms: running auto installation service for kernel 6.5.5-amd64-desktop-hwe:Sign command: /lib/modules/6.5.5-amd64-desktop-hwe/build/scripts/sign-file
Signing key: /var/lib/dkms/mok.key
Public certificate (MOK): /var/lib/dkms/mok.pub

Building module:
Cleaning build area...(bad exit status: 2)
env NV_VERBOSE=1 make -j20 modules KERNEL_UNAME=6.5.5-amd64-desktop-hwe...(bad exit status: 2)
Error! Bad return status for module build on kernel: 6.5.5-amd64-desktop-hwe (x86_64)
Consult /var/lib/dkms/nvidia-current/530.41.03/build/make.log for more information.
Error! One or more modules failed to install during autoinstall.
Refer to previous errors for more information.
 failed!
run-parts: /etc/kernel/postinst.d/dkms exited with return code 11
make[1]: *** [arch/x86/Makefile:292:install] 错误 1
make: *** [Makefile:234:__sub-make] 错误 2

执行如下:

$ cd /var/lib/dkms/nvidia-current/530.41.03
$ sudo cp -rf $(uname -r) 6.5.5-amd64-desktop-hwe

该问题的原因是安装Deepin时选择了闭源NVIDIA驱动,而在 “/var/lib/dkms/nvidia-current/530.41.03 ”中没有6.5.5内核对应的ko。该解决办法(应该还有别的办法)虽然可以解决错误,但是没有验证系统稳定性!!

然后再执行:

$ sudo make install

  1. 重启查看版本

image.png

但是重启后,蓝牙适配器都找不到了,emo。。。

查看日志发现HCI命令发送失败,USB 低层报错,那么可能是当前蓝牙dongle已经处于异常状态了吧,重新插拔一下USB 蓝牙dongle,不出所料的工作正常了。

工作正常后的日志:

image.png

Reply Favorite View the author
All Replies
阿尼樱奈奈
Moderator
2023-10-02 02:20
#1

applaud

Reply View the author
辉辉
deepin
2023-10-02 18:12
#2

Linux系统的最终归宿就是自己编译?

Reply View the author
昨夜的星辰
deepin
2023-10-02 19:04
#3

目前已知6.5系列内核比前面的都要好,比如V23默认的6.1和源里的6.4

Reply View the author
zcj20080882
deepin
2023-10-04 04:19
#4
辉辉

Linux系统的最终归宿就是自己编译?

也不一定。有个不得不承认的事实:linux发行版对新硬件的支持要比WIndows落后很多。这个还有部分原因是硬件厂商大多对linux支持力度不高,Intel除外。

Reply View the author
zcj20080882
deepin
2023-10-04 04:22
#5
zcj20080882

也不一定。有个不得不承认的事实:linux发行版对新硬件的支持要比WIndows落后很多。这个还有部分原因是硬件厂商大多对linux支持力度不高,Intel除外。

经过几天的使用,没有出现系统稳定性问题。

关于稳定性,除了内核因素之外,系统应用软件也是主要因素。

这个要给Deepin点个赞了,虽然Deepin23是Beta版,但是在我的电脑上居然比Ubuntu22.04稳定的多。

Ubuntu22.04在我当前这台台式机上,总是出现问题。

Reply View the author