[Internal testing communication] Deepin 系统下配置 make 工具与编译无线网卡驱动新手教程
Tofloor
poster avatar
LiuYongzhang
deepin
2025-11-24 14:45
Author

Deepin 系统下配置 make 工具与编译无线网卡驱动新手教程

作为一名 Deepin 用户,你可能会遇到需要手动编译某些硬件驱动的情况,特别是无线网卡驱动。本文将详细介绍如何在 Deepin 系统下配置 make 工具环境,并以无线网卡驱动为例,带你完成从环境搭建到驱动编译安装的全过程。

一、make 工具与编译环境配置

1.1 什么是 make 工具

make 是一个自动化构建工具,它可以根据 Makefile 文件中的指令,自动编译程序。在 Linux 系统中,make 工具是编译源代码的重要工具,尤其对于硬件驱动程序的编译安装至关重要。

1.2 安装基础编译工具

在 Deepin 系统中,我们首先需要安装基础的编译工具链。打开终端,执行以下命令:

sudo apt update && sudo apt dist-upgrade -y && sudo apt install build-essential dkms git linux-headers-$(uname -r)  gcc g++ make libc6-dev libncurses5-dev libncursesw5-dev flex bison openssl libssl-dev dwarves bc libelf-dev  fakeroot dpkg-dev libtool autoconf automake libdw-dev debhelper -y

命令解释:

  • build-essential:包含了 gcc、g++、make 等基础编译工具
  • dkms:Dynamic Kernel Module Support,用于管理内核模块的动态编译
  • git:版本控制工具,用于获取驱动源代码
  • linux-headers-$(uname -r):与当前内核版本匹配的内核头文件,这是编译驱动的必要组件

1.3 验证编译环境

安装完成后,我们需要验证编译环境是否配置正确:

# 检查gcc版本
gcc --version
# 检查g++版本
g++ --version
# 检查make版本
make --version
# 检查内核头文件是否安装成功
ls -la /usr/src/ | grep linux-headers-$(uname -r)

如果以上命令都能正常显示版本信息,则说明编译环境已经基本配置完成。

deepin25记得关闭磐石只读保护(必须重新启动电脑)

sudo deepin-immutable-writable enable

1.4 make 工具基本使用方法

make 工具的基本使用方法如下:

# 基本用法make [选项] [目标]
# 常用选项
-f <文件>  # 指定Makefile文件
-n   # 只显示执行命令,不实际执行
-p  # 输出Makefile中的所有宏定义和目标描述
-d   # 启用调试模式
-c <目录>   # 在读取Makefile前切换到指定目录

在大多数情况下,我们只需要在包含 Makefile 的目录下直接执行make命令即可开始编译。

二、识别无线网卡型号

在编译无线网卡驱动之前,我们需要先确定自己的无线网卡型号。

2.1 查看无线网卡型号

打开终端,执行以下命令查看无线网卡信息:

# 查看PCI接口的无线网卡lspci -nnk | grep Net -A3
# 查看USB接口的无线网卡lsusb

对于 PCI 接口的无线网卡,你会看到类似以下的输出:

image.png

这里的RTL8821CE就是无线网卡的型号。

对于 USB 接口的无线网卡,你会看到类似以下的输出:

image.png

这里的RTL88x2bu就是无线网卡的型号。

三、无线网卡驱动编译安装

3.1 下载对应驱动源代码

根据上一步获取的无线网卡型号,我们需要下载对应的驱动源代码。常见的无线网卡驱动可以在 GitHub 上找到。

以下是一些常见无线网卡型号及其对应的 GitHub 驱动仓库:

网卡型号 GitHub 仓库地址
RTL8821CE https://github.com/tomaspinho/rtl8821ce
RTL8821CU https://github.com/whitebatman2/rtl8821CU
RTL8812AU https://github.com/gnab/rtl8812au
RTL88x2BU https://github.com/EntropicEffect/rtl88x2bu
BCM43142 系统自带 broadcom-sta-dkms

以 RTL8821CU 为例,下载驱动源代码:

git clone https://github.com/whitebatman2/rtl8821CU.gitcd rtl8821CU

3.2 使用 DKMS 方式编译安装驱动

DKMS(Dynamic Kernel Module Support)是一种管理内核模块的框架,它可以在内核更新时自动重新编译驱动模块。这是推荐的驱动安装方式。

3.2.1 安装 DKMS(如未安装)

sudo apt install dkms -y

3.2.2 配置并安装驱动

以 RTL8821CU 为例:

# 设置驱动名称和版本
DRV_NAME=rtl8821CUDRV_VERSION=5.2.5.3
# 创建DKMS源目录
sudo mkdir /usr/src/${DRV_NAME}-${DRV_VERSION}
# 将驱动源码复制到DKMS源目录
git archive master | sudo tar -x -C /usr/src/${DRV_NAME}-${DRV_VERSION}
# 添加驱动到DKMS
sudo dkms add -m ${DRV_NAME} -v ${DRV_VERSION}
# 编译驱动sudo dkms build -m ${DRV_NAME} -v ${DRV_VERSION}
# 安装驱动sudo dkms install -m ${DRV_NAME} -v ${DRV_VERSION}

3.3 使用传统 Make 方式编译安装驱动

如果 DKMS 方式不适合你,也可以使用传统的 make 方式编译安装驱动。

3.3.1 编译驱动

进入驱动源代码目录,执行以下命令:

# 编译驱动(替换 -j8中的「8」为实际cpu核心数)
make -j8
# 如果遇到多线程编译错误,可以尝试单线程编译
# make -j1

3.3.2 安装驱动

编译成功后,安装驱动:

# 安装驱动
sudo make install
# 加载驱动模块
sudo modprobe <驱动模块名>

驱动模块名通常与网卡型号相关,例如 RTL8812AU 的模块名为88XXau,RTL8821CE 的模块名为8821ce。

3.4 常见无线网卡驱动安装示例

3.4.1 Realtek RTL8812AU 驱动安装

 # 克隆驱动仓库
git clone https://github.com/gnab/rtl8812au.git
cd rtl8812au
# 编译安装
sudo make -j8
sudo make install
# 加载驱动
sudo modprobe 88XXau

3.4.2 Realtek RTL8821CE 驱动安装


# 克隆驱动仓库
git clone https://github.com/tomaspinho/rtl8821ce.git
cd rtl8821ce
# 添加执行权限
chmod +x *.sh
# 使用DKMS安装
./dkms-install.sh

3.4.3 Broadcom 网卡驱动安装

Deepin 系统已经集成了 Broadcom 网卡驱动,可以直接安装:

sudo apt install broadcom-sta-dkms -y

如果遇到编译错误,如 "asm/unaligned.h: 没有那个文件或目录",可以尝试以下解决方法:

 关闭磐石只读保护(必须重新启动电脑)
sudo deepin-immutable-writable enable 
# 重新启动后执行
sudo dkms remove broadcom-sta/6.30.223.271 --all
#替换头文件
sudo sed -i 's|#include |#include |g' /usr/src/broadcom-sta-6.30.223.271/src/wl/sys/wl_linux.c
# 重新安装
sudo dkms add broadcom-sta/6.30.223.271
sudo dkms build broadcom-sta/6.30.223.271 -k $(uname -r)
sudo dkms install broadcom-sta/6.30.223.271 -k $(uname -r)
sudo modprobe wl

四、常见问题与解决方案

4.1 编译环境问题

4.1.1 缺少内核头文件

问题现象:

make: *** /lib/modules/xxx/build: No such file or directory. Stop.

解决方案:

安装与当前内核版本匹配的内核头文件:

sudo apt install linux-headers-$(uname -r) -y

4.1.2 编译器版本不兼容

问题现象:

error: implicit declaration of function

解决方案:

这通常是由于编译器版本过高,对旧代码的兼容性问题。可以尝试降低编译器版本,或者修改代码以适应新编译器。

4.2 驱动编译问题

4.2.1 Makefile 配置错误

问题现象:

make: *** No rule to make target 'clean'. Stop.

解决方案:

检查 Makefile 文件是否存在,或者尝试修改 Makefile 中的平台配置:

# 编辑Makefile
nano Makefile

# 确保PLATFORM设置正确
ifeq ($(PLATFORM),)
PLATFORM := PLATFORM_LINUX
endif

4.2.2 内核 API 变更导致的编译错误

问题现象:

error: incompatible function pointer types initializing

解决方案:

这通常是由于内核版本更新导致的 API 变更。可以尝试:

  1. 寻找更新版本的驱动源码
  2. 手动修改代码以适配新的 API
  3. 降低内核版本到驱动支持的版本

例如,对于 Linux 6.13.0 内核上的 rtl8821ce 驱动问题,可以应用以下补丁:

diff --git a/os_dep/linux/ioctl_cfg80211.c b/os_dep/linux/ioctl_cfg80211.c
index d91bbbb..017661b 100644
--- a/os_dep/linux/ioctl_cfg80211.c
+++ b/os_dep/linux/ioctl_cfg80211.c
@@ -5868,7 +5868,10 @@ static int cfg80211_rtw_set_channel(struct wiphy *wiphy
 }
 
 static int cfg80211_rtw_set_monitor_channel(struct wiphy *wiphy
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0))
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 13, 0))
+ , struct net_device *dev
+ , struct cfg80211_chan_def *chandef
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0))
 , struct cfg80211_chan_def *chandef
 #else
 , struct ieee80211_channel *chan

4.3 驱动加载问题

4.3.1 Secure Boot 导致驱动加载失败

问题现象:

Module verification failed: signature and/or required key missing

解决方案:

  1. 进入 BIOS 设置,禁用 Secure Boot
  2. 或者为驱动模块签名

禁用 Secure Boot 的方法:

  • 重启电脑,进入 BIOS 设置(通常按 F2、F10 或 Del 键)
  • 找到 Secure Boot 选项,设置为 Disabled
  • 保存设置并重启

4.3.2 驱动模块冲突

问题现象:

驱动安装成功,但无线网卡仍无法正常工作。

解决方案:

检查是否有冲突的驱动模块:

# 查看已加载的无线网卡驱动模块
lsmod | grep -E 'wifi|80211|rtl|bcm'
# 卸载冲突的模块sudo modprobe -r <冲突模块名>
# 重新加载需要的模块sudo modprobe <需要的模块名>

五、驱动安装后的验证与维护

5.1 验证驱动是否正常工作

驱动安装完成后,我们需要验证是否正常工作:

# 查看网络接口ip link show
# 查看无线网络连接状态iwconfig
# 扫描可用的无线网络sudo iwlist scan
# 查看系统日志,确认驱动加载情况dmesg | grep -i <驱动模块名>

如果一切正常,你应该能看到无线网卡接口(通常以 wlan0 或 wlp 开头),并且能够扫描到附近的无线网络。

5.2 驱动维护与更新

5.2.1 内核更新后的驱动维护

当系统内核更新后,之前编译的驱动模块可能无法继续使用。如果使用 DKMS 方式安装的驱动,系统会自动重新编译驱动模块。如果使用传统方式安装的驱动,则需要手动重新编译。

# 使用DKMS重新编译驱动sudo dkms autoinstall
# 或者手动重新编译cd /path/to/driver/source
make clean
make
sudo make install

5.2.2 驱动更新

定期检查驱动源码仓库,获取最新版本的驱动:

cd /path/to/driver/source
git pull
make clean
make
sudo make install

六、总结

通过本文的学习,你应该已经掌握了在 Deepin 系统下配置 make 工具环境和编译无线网卡驱动的基本方法。虽然手动编译驱动对新手来说可能有些复杂,但只要按照步骤操作,大部分问题都可以解决。

关键点回顾:

  1. 环境准备:安装 build-essential、dkms、git 和 linux-headers 等必要工具
  2. 识别硬件:准确识别无线网卡型号
  3. 选择合适的驱动:根据网卡型号选择对应的驱动源码
  4. 编译安装:使用 DKMS 或传统 make 方式编译安装驱动
  5. 问题排查:遇到问题时,查看日志,分析错误信息,逐步排查

随着 Deepin 系统的不断发展,越来越多的硬件驱动会被集成到系统中,减少手动编译的需求。但掌握手动编译驱动的技能,对于解决一些特殊硬件的兼容性问题仍然非常有用。

如果你在实践过程中遇到本文未涵盖的问题,可以查阅 Deepin 官方论坛、GitHub 驱动仓库的 issue,或向社区寻求帮助。同时要积极使用Ai,把遇到的问题和错误信息喂给Ai 根据提示进行解决

希望本文能帮助你顺利解决 Deepin 系统下的无线网卡驱动问题,享受更好的使用体验!

Reply Favorite View the author
All Replies
deepin-流云
Super Moderator
Community OP
2025-11-24 14:58
#1

@birdcai 大佬给你教程了

Reply View the author
186******75
deepin
2025-11-24 17:02
#2

太全太精辟了,以前都是自己在网上乱找一通,最后弄好了,没想到大佬弄的这么全,真牛!tail

Reply View the author
LiuYongzhang
deepin
2025-11-24 18:13
#3
186******75

太全太精辟了,以前都是自己在网上乱找一通,最后弄好了,没想到大佬弄的这么全,真牛!tail

重在----同时要积极使用Ai,把遇到的问题和错误信息喂给Ai 根据提示进行解决

可以试着把本文喂给Ai 有意想不到惊喜

他会给你分操作步骤 然后按照步骤操作,那步报错直接再喂给Ai ,一步步改进

Reply View the author
yanbowen
deepin
Community Developer
2025-11-25 10:24
#4

很详细,👍

Reply View the author
birdcai
deepin
19 hours ago
#5

谢谢大佬

Reply View the author