Home
Categories
WIKI
Topic
User
LANGUAGE:
中文
English
【转帖】ThinkPad E580无线网卡/蓝牙问题(RTL8821CE)
Experiences and Insight
2211
views ·
2
replies ·
To
floor
Go
cscxk
deepin
2019-04-05 02:05
Author
我用的E580,也遇到同样问题。自己不会搞,从网上找的文章,最后发现要下载内核源码编译,却步。转帖给大家看看。下面是原文:
无线网卡和蓝牙皆无法使用。下载8821ce.zip驱动包make&make install后Wi-Fi可用,但蓝牙依然不能用。
解决方法:
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
Reply
Like 0
Favorite
View the author
All Replies
kylvyou
deepin
2019-04-30 18:34
#1
在哪里下载啊 亲
Reply
Like 0
View the author
xinghuating
deepin
2019-05-23 00:19
#2
我是小白哦
这都是啥啊,咋办啊
Reply
Like 0
View the author
Please
sign
in first
Featured Collection
Change
[Tutorial] deepin25 WSL Offline Installation Guide
UOS AI 2.8 Released! Three New Intelligent Agents & Major Evolution
Solid Q&A | deepin 25 Common Questions – The Immutable System Edition
New Thread
Popular Events
More
无线网卡和蓝牙皆无法使用。下载8821ce.zip驱动包make&make install后Wi-Fi可用,但蓝牙依然不能用。
解决方法:
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