Ubuntu 22.04内核更新后编译RTL8852BE手动驱动报错求助
Ubuntu 22.04内核更新后编译RTL8852BE手动驱动报错求助
兄弟,我太懂你每次Ubuntu内核更新后都要手动重新编译RTL8852BE驱动的麻烦了,这次的报错其实是因为内核5.19+版本移除了旧的PCI DMA相关函数,换成了通用的DMA接口,驱动代码里的旧函数调用就失效了。给你两个可行的解决办法,按步骤来就行:
方法一:手动修改驱动代码适配新内核
你只需要修改报错的platform/platform_linux_pc_pci.c文件里的函数调用,把旧的pci前缀函数替换成对应的dma前缀函数:
- 打开该文件:
nano /home/user/rtl8852be/platform/platform_linux_pc_pci.c - 找到以下几行代码,逐个替换函数名:
- 把
pci_dma_sync_single_for_device替换成dma_sync_single_for_device - 把
pci_dma_sync_single_for_cpu替换成dma_sync_single_for_cpu - 把
pci_map_single替换成dma_map_single - 把
pci_unmap_single替换成dma_unmap_single - 把
pci_free_consistent替换成dma_free_coherent
- 把
- 保存退出(按
Ctrl+O,回车,再Ctrl+X) - 重新执行编译命令:
这样应该就能编译通过,WiFi也能正常工作了。make clean make sudo make install
方法二:更新驱动仓库到最新版本(更省心)
大概率驱动仓库已经更新了适配新内核的代码,你可以先拉取最新代码再编译:
- 进入驱动目录:
cd /home/user/rtl8852be - 拉取最新代码:
git pull - 然后再执行编译安装命令:
make clean make sudo make install
额外建议:用DKMS自动管理驱动(一劳永逸)
以后不想每次内核更新都手动编译的话,可以用DKMS(Dynamic Kernel Module Support)来管理驱动,它会在每次内核更新后自动重新编译驱动:
- 先安装DKMS:
sudo apt install dkms - 把驱动添加到DKMS:
sudo dkms add ./rtl8852be - 安装驱动到DKMS:
以后再更内核,重启后驱动就会自动适配,不用再手动操作了。sudo dkms install rtl8852be/1.0.0 # 这里的版本号要对应你驱动的实际版本,可以看Makefile里的定义
备注:内容来源于stack exchange,提问作者cauliflower251
相关产品推荐
相关产品推荐

