在 ubuntu 18.04 中找不到 Wifi 适配器;没有设备 rtl8822ce 的驱动程序

yar*_*160 5 wireless realtek drivers 18.04

更新

以下是我的原始问题以及补充信息。最初我以为我的硬件是 rtl8821ce 芯片,但是从lspci这篇文章的输出比较,看来我拥有的无线设备实际上是 8822ce 芯片。以前这个问题的标题没有反映这个事实,所以我编辑了它。


我有一个无法解决的问题,我希望得到一些帮助。我有一台全新的联想 IdeaPad 笔记本电脑,我最近在上面安装了 Ubuntu 18.04.4。不幸的是,Ubuntu 无法识别我的 wifi,说:“找不到 wifi 适配器”。

一些输出:

lspci -nnk | grep 0280 -A3

01:00.0 Network controller [0280]: Realtek Semiconductor Co., Ltd. Device [10ec:c82f]
    Subsystem: Lenovo Device [17aa:c02f]
Run Code Online (Sandbox Code Playgroud)

rfkill list all

0: ideapad_wlan: Wireless LAN
    Soft blocked: no
    Hard blocked: no
1: ideapad_bluetooth: Bluetooth
    Soft blocked: yes
    Hard blocked: no
5: hci0: Bluetooth
    Soft blocked: yes
    Hard blocked: no
Run Code Online (Sandbox Code Playgroud)

sudo lshw -C network

  *-network UNCLAIMED       
   description: Network controller
   product: Realtek Semiconductor Co., Ltd.
   vendor: Realtek Semiconductor Co., Ltd.
   physical id: 0
   bus info: pci@0000:01:00.0
   version: 00
   width: 64 bits
   clock: 33MHz
   capabilities: pm msi pciexpress cap_list
   configuration: latency=0
   resources: ioport:4000(size=256) memory:93000000-9300ffff
Run Code Online (Sandbox Code Playgroud)

值得注意的是,在其他帖子中类似命令的输出中,网络适配器显示:“RTL8821CE”,而我的输出没有。

到目前为止我尝试过的:

首先,我尝试rtl8821ce-dkms像这样安装:

sudo apt-get install rtl8821ce-dkms
sudo modprobe rtl8821ce
sudo modprobe -r ideapad_laptop
Run Code Online (Sandbox Code Playgroud)

而且我还在 BIOS 中禁用了安全启动。这没有效果。Ubuntu 仍然给出相同的消息。

接下来,我尝试像这样直接从 tomaspinho GitHub 安装驱动程序(删除 rtl8821ce-dkms 后):

sudo apt-get install git dkms build-essential linux-headers-$(uname -r)
cd /usr/local/src/
sudo git clone https://github.com/tomaspinho/rtl8821ce
cd rtl8821ce/
sudo chmod +x dkms-install.sh
sudo chmod +x dkms-remove.sh
sudo ./dkms-install.sh
sudo modprobe 8821ce
Run Code Online (Sandbox Code Playgroud)

同样,这没有效果。Ubuntu 仍然给出相同的消息。

有趣的是,现在当我运行时dmesg | grep -i 8821,我得到:

[   94.460377] 8821ce: loading out-of-tree module taints kernel.
[   94.461221] 8821ce: module verification failed: signature and/or required key missing - tainting kernel
Run Code Online (Sandbox Code Playgroud)

我怀疑这个驱动程序可能不支持我的硬件。任何人都可以帮助我了解解决此“无 wifi 适配器”问题需要做些什么?

额外的尝试:

正如这里所建议的,我试图更新linux-firmware我机器上的软件包版本。我尝试了几个不同的版本,但都没有奏效。我做了什么:

wget http://security.ubuntu.com/ubuntu/pool/main/l/linux-firmware/linux-firmware_<version>_all.deb
sudo dpkg -i linux-firmware_<version>_all.deb
Run Code Online (Sandbox Code Playgroud)

<versions>我试过的“ ”是:

  • 1.173.16(这似乎是服务器中最后修改的那个)。
  • 1.178
  • 1.186(这是迄今为止的最新版本)。

我仍然收到“无 wifi 适配器”消息。

yar*_*160 5

终于,我找到了解决办法!(感谢本页的回答)。

事实证明,应该支持我的硬件 (rtw88) 的驱动程序是可用的,并且已经在内核 > 5.2 中与该硬件兼容(我有 5.3.0-46-generic),但它没有设置为识别我的硬件。 为了解决这个问题,我必须在源代码中稍作修改来编译 linux 内核(下面解决方案中的第 2 步)。这是我所做的:

1)获取您选择的 linux 源代码。就我而言,我使用了主线内核:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Run Code Online (Sandbox Code Playgroud)

2)找到文件: ./linux/drivers/net/wireless/realtek/rtw88/pci.c,然后编辑它。查找字符串'0xC822',并将其替换为'0xC82F'

3)按照说明继续编译内核。为了我的答案的完整性,这是我所做的:

  1. cd 到 ./linux 文件夹。

  2. 使用当前内核的配置: cp /boot/config-$(uname -r) .config

  3. make menuconfig. 这里有很多选项可以配置。最好的办法是让它们保持原样(保存并退出)。
  4. 编译和安装:

    i)makemake -j8(并行使用 8 个线程而不是一个)。这将需要一段时间才能完成...

    ii) sudo make modules_install

    三) sudo make install

  5. 启用内核以进行引导:

    一)sudo update-initramfs -c -k 5.7.0-rc1+。当然,使用安装的内核版本(在我的例子中是 5.7.0-rc1+)。如果不确定内核版本:“ls /lib/modules/”并查看安装了哪些内核模块。

    ii) sudo update-grub

就是这样。重新启动并确保启动到新内核。wifi现在应该可以工作了。