问题
又填一E480的大坑!
rtl8821ce集成蓝牙与wlan功能,Win10系统可以正常工作,Ubuntu蓝牙失效(一开始wifi也没有)。找不到蓝牙适配器。
解决
在forum上找到了大佬的解决方法。
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!
最后是已经配置好的驱动。
bt_8821ce.tar.bz2