ThinkPad E580无线网卡/蓝牙问题(RTL8821CE)

包含网卡/无线网的网络问题和ADSL/校园网/宽带拨号支持及代理/共享等网络使用问题
回复
ry7740kptv
帖子: 6
注册时间: 2016-10-02 11:39
系统: Win10/Ubuntu

ThinkPad E580无线网卡/蓝牙问题(RTL8821CE)

#1

帖子 ry7740kptv » 2018-12-25 10:19

安装Ubuntu 16.04 LTS,内核版本4.15.29,无线网卡和蓝牙皆无法使用。下载8821ce.zip驱动包make&make install后Wi-Fi可用,但蓝牙依然不能用。dmesg查看:
[ 2.161007] usb 1-5: Product: Bluetooth Radio
[ 3.696383] Bluetooth: Core ver 2.22
[ 3.696398] Bluetooth: HCI device and connection manager initialized
[ 3.696400] Bluetooth: HCI socket layer initialized
[ 3.696403] Bluetooth: L2CAP socket layer initialized
[ 3.696407] Bluetooth: SCO socket layer initialized
[ 4.238052] usb 1-5: Product: Bluetooth Radio
[ 4.239681] Bluetooth: hci0: rtl: examining hci_ver=08 hci_rev=000c lmp_ver=08 lmp_subver=8821
[ 4.239683] Bluetooth: hci0: rtl: loading rtl_bt/rtl8821a_config.bin
[ 4.242683] Bluetooth: hci0: rtl: loading rtl_bt/rtl8821a_fw.bin
[ 4.244675] Bluetooth: hci0: rom_version status=0 version=1
[ 4.244679] Bluetooth: hci0: cfg_sz 0, total size 17428
[ 6.336061] Bluetooth: hci0: command 0xfc20 tx timeout
[ 6.740798] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[ 6.740799] Bluetooth: BNEP filters: protocol multicast
[ 6.740801] Bluetooth: BNEP socket layer initialized
[ 14.560076] Bluetooth: hci0: download fw command failed (-110)
求解。。。因为要用蓝牙鼠标~~~
头像
astolia
论坛版主
帖子: 6450
注册时间: 2008-09-18 13:11

Re: ThinkPad E580无线网卡/蓝牙问题(RTL8821CE)

#2

帖子 astolia » 2018-12-25 11:34

既然能联网了,先把系统软件升级到最新吧。最新版固件应该解决这个问题了
sudo apt update
sudo apt install linux-firmware
sudo apt full-upgrade
然后重启
ry7740kptv
帖子: 6
注册时间: 2016-10-02 11:39
系统: Win10/Ubuntu

Re: ThinkPad E580无线网卡/蓝牙问题(RTL8821CE)

#3

帖子 ry7740kptv » 2018-12-25 12:12

astolia 写了: 2018-12-25 11:34 既然能联网了,先把系统软件升级到最新吧。最新版固件应该解决这个问题了
sudo apt update
sudo apt install linux-firmware
sudo apt full-upgrade
然后重启
已经apt-get update & apt-get upgrade了,貌似当前16.04LTS最新的内核就是这个版本了。之前试过18.04LTS,一开始也是不行,但不知道怎么搞的后来好了。。。不想升级到18.04系统,这个版本的系统变化太大,且之前用的一些软件在这上面不能用比如Eclipse Indigo。。。
ry7740kptv
帖子: 6
注册时间: 2016-10-02 11:39
系统: Win10/Ubuntu

Re: ThinkPad E580无线网卡/蓝牙问题(RTL8821CE)

#4

帖子 ry7740kptv » 2018-12-25 14:14

问题已解决,通过分析日志发现实际上是因为没有正确给蓝牙模块加载固件和配置文件导致的~~
解决方法:
1.下载内核源码,修改drivers/bluetooth/btrtl.c,覆盖掉8821A的相关代码:
line 30:
#define RTL_EPATCH_SIGNATURE "Realtech"
#define RTL_ROM_LMP_3499 0x3499
#define RTL_ROM_LMP_8723A 0x1200
#define RTL_ROM_LMP_8723B 0x8723
#define RTL_ROM_LMP_8821A 0xFFFF //blocked for 8821c
#define RTL_ROM_LMP_8821C 0x8821
#define RTL_ROM_LMP_8761A 0x8761
#define RTL_ROM_LMP_8822B 0x8822

这里我添加了一个RTL_ROM_LMP_8821C的宏定义,因为8821A和8821C的LMP子版本号都是8821,所以为了能用C尾缀的需要把A尾缀的值改成别的。
然后把后面的代码分别添加上RTL_ROM_LMP_8821C的相关内容:
line 83:
//添加8821C的project_id = 10
static const struct {
__u16 lmp_subver;
__u8 id;
} project_id_to_lmp_subver[] = {
{ RTL_ROM_LMP_8723A, 0 },
{ RTL_ROM_LMP_8723B, 1 },
{ RTL_ROM_LMP_8821A, 2 },
{ RTL_ROM_LMP_8821C, 10 },
{ RTL_ROM_LMP_8761A, 3 },
{ RTL_ROM_LMP_8822B, 8 },
};
line 337:
//添加8821C的配置文件路径
switch (lmp_subver) {
case RTL_ROM_LMP_8723B:
cfg_name = "rtl_bt/rtl8723b_config.bin";
break;
case RTL_ROM_LMP_8821A:
cfg_name = "rtl_bt/rtl8821a_config.bin";
break;
case RTL_ROM_LMP_8821C:
cfg_name = "rtl_bt/rtl8821c_config.bin";
break;
case RTL_ROM_LMP_8761A:
cfg_name = "rtl_bt/rtl8761a_config.bin";
break;
case RTL_ROM_LMP_8822B:
cfg_name = "rtl_bt/rtl8822b_config.bin";
config_needed = true;
break;
default:
BT_ERR("%s: rtl: no config according to lmp_subver %04x",
hdev->name, lmp_subver);
break;
}
line 457:
//添加8821C的固件路径
switch (lmp_subver) {
case RTL_ROM_LMP_8723A:
case RTL_ROM_LMP_3499:
return btrtl_setup_rtl8723a(hdev);
case RTL_ROM_LMP_8723B:
return btrtl_setup_rtl8723b(hdev, lmp_subver,
"rtl_bt/rtl8723b_fw.bin");
case RTL_ROM_LMP_8821A:
return btrtl_setup_rtl8723b(hdev, lmp_subver,
"rtl_bt/rtl8821a_fw.bin");
case RTL_ROM_LMP_8821C:
return btrtl_setup_rtl8723b(hdev, lmp_subver,
"rtl_bt/rtl8821c_fw.bin");
case RTL_ROM_LMP_8761A:
return btrtl_setup_rtl8723b(hdev, lmp_subver,
"rtl_bt/rtl8761a_fw.bin");
case RTL_ROM_LMP_8822B:
return btrtl_setup_rtl8723b(hdev, lmp_subver,
"rtl_bt/rtl8822b_fw.bin");
default:
BT_INFO("rtl: assuming no firmware upload needed.");
return 0;
}

2.编译为btrtl.ko,替换掉系统原模块(记得备份一下以免需要还原的时候找不到了~~);
3.把8821C的配置文件和固件放到/lib/firmware/rtl_bt下;
4.重启,enjoy it!

最后附上固件文件和修改好后的驱动~~(固件提取自Debian的firmware-realtek软件包)
bt_8821ce.tar.bz2
(39.17 KiB) 已下载 385 次
cscxk
帖子: 82
注册时间: 2005-06-29 22:14

Re: ThinkPad E580无线网卡/蓝牙问题(RTL8821CE)

#5

帖子 cscxk » 2019-04-04 18:17

要用这个需要编译内核吗?
回复