# RTL8192-linux6.1 **Repository Path**: han_gx/rtl8192-linux6.1 ## Basic Information - **Project Name**: RTL8192-linux6.1 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-07 - **Last Updated**: 2026-02-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RTL8192EU WiFi 驱动 - Linux 6.x 内核适配版 ## 项目简介 本项目是 Realtek RTL8192EU WiFi 驱动的 Linux 6.x 内核适配版本,支持 Ubuntu 24.04 等较新的 Linux 发行版。驱动已针对 Linux 6.14 内核进行了适配和测试。 ## 支持的硬件 - **芯片型号**: RTL8192EU / RTL8192FU - **设备ID**: 0bda:a192 (存储模式) / 2357:0135 (WiFi模式) - **典型设备**: TP-Link TL-WN823N ## 支持的系统版本 ### Linux 内核版本 | 内核版本 | 支持状态 | 说明 | |---------|---------|------| | 6.14.x | ✅ 完全支持 | 已测试通过 | | 6.13.x | ✅ 完全支持 | 理论支持 | | 6.12.x | ✅ 完全支持 | 理论支持 | | 6.11.x | ✅ 完全支持 | 理论支持 | | 6.10.x | ✅ 完全支持 | 理论支持 | | 6.0.x - 6.9.x | ✅ 完全支持 | 理论支持 | | 5.x | ⚠️ 部分支持 | 需要调整内核版本判断 | | 4.x | ❌ 不支持 | 需要大量修改 | ### Ubuntu 版本 | Ubuntu 版本 | 内核版本 | 支持状态 | |-----------|---------|---------| | Ubuntu 24.04 LTS | 6.8.x | ✅ 完全支持 | | Ubuntu 24.10 | 6.11.x | ✅ 完全支持 | | Ubuntu 25.04 (开发中) | 6.14.x | ✅ 完全支持 | | Ubuntu 23.10 | 6.5.x | ✅ 完全支持 | | Ubuntu 23.04 | 6.2.x | ✅ 完全支持 | | Ubuntu 22.04 LTS | 5.15.x | ⚠️ 部分支持 | ### 其他发行版 - ✅ Debian 12+ (内核 6.x) - ✅ Fedora 39+ (内核 6.x) - ✅ Arch Linux (内核 6.x) - ✅ openSUSE Tumbleweed (内核 6.x) ## 主要特性 ### 驱动适配 - ✅ 修复 Linux 6.x 内核 API 变化 - ✅ 移除已废弃的 `complete_and_exit` 函数 - ✅ 移除已废弃的 `get_fs()` / `set_fs()` 函数 - ✅ 替换 `prandom_u32()` 为 `get_random_u32()` - ✅ 替换 `strlcpy()` 为 `strscpy()` - ✅ 适配 `netif_napi_add()` 参数变化 - ✅ 适配 `struct usb_driver` 结构变化 - ✅ 修复 `proc_create_data()` 参数类型 - ✅ 修复 `PDE_DATA()` 函数调用 - ✅ 修复 `GRO_DROP` 未定义问题 - ✅ 禁用不兼容的 cfg80211 支持 ### 功能特性 - ✅ WiFi 网络连接 - ✅ 自动 USB 模式切换(存储模式 → WiFi 模式) - ✅ 开机自动连接 WiFi - ✅ 网络连接验证(ping 测试) - ✅ 完整的日志记录 - ✅ systemd 服务集成 ## 编译说明 ### 系统要求 - Linux 内核 6.0 或更高版本 - GCC 编译器 - Linux 内核头文件 - make 工具 ### 编译步骤 ```bash # 1. 进入驱动目录 cd rtl8192EU_WiFi_linux_v5.11.2-6-g17aaefb.20200723_COEX20171113-0047 # 2. 清理旧的编译文件 make clean # 3. 编译驱动 make # 4. 编译成功后会生成 8192eu.ko 文件 ``` ### 编译选项 在 `Makefile` 中可以配置以下选项: ```makefile # HCI 接口类型 CONFIG_USB_HCI = y # USB 接口 CONFIG_PCI_HCI = n # PCI 接口 CONFIG_SDIO_HCI = n # SDIO 接口 # 功能选项 CONFIG_AP_MODE = n # AP 模式 CONFIG_P2P = n # P2P 功能 CONFIG_MP_INCLUDED = n # MP 测试模式 CONFIG_POWER_SAVING = n # 省电模式 CONFIG_BT_COEXIST = n # 蓝牙共存 CONFIG_RTW_NAPI = n # NAPI 支持 CONFIG_RTW_GRO = n # GRO 支持 ``` ## 安装说明 ### 方法一:使用安装脚本(推荐) ```bash # 运行安装脚本 sudo ./install.sh ``` 安装脚本会自动完成以下操作: 1. 设置脚本执行权限 2. 安装 systemd 服务 3. 启用开机自启 4. 询问是否立即启动服务 ### 方法二:手动安装 #### 1. 加载驱动 ```bash # 如果使用编译的驱动 sudo insmod 8192eu.ko # 或者使用系统自带驱动(推荐) # 系统会自动识别并加载 rtl8xxxu 驱动 ``` #### 2. 切换 USB 设备模式 ```bash # 检查设备状态 lsusb | grep Realtek # 如果显示为 DISK(存储模式),需要切换 sudo usb_modeswitch -v 0x0bda -p 0xa192 -K ``` #### 3. 连接 WiFi ```bash # 使用 NetworkManager 连接 sudo nmcli device wifi connect "你的WiFi名称" password "你的密码" # 或者使用自动连接脚本 sudo ./wifi_autoconnect.sh ``` ### 方法三:安装为 systemd 服务 ```bash # 1. 复制服务文件 sudo cp wifi-autoconnect.service /etc/systemd/system/ # 2. 重新加载 systemd sudo systemctl daemon-reload # 3. 启用开机自启 sudo systemctl enable wifi-autoconnect.service # 4. 启动服务 sudo systemctl start wifi-autoconnect.service ``` ## 配置说明 ### WiFi 配置文件 编辑 `wifi_config.conf` 文件: ```bash nano wifi_config.conf ``` 配置内容: ```conf SSID=你的WiFi名称 PASSWORD=你的WiFi密码 ``` 示例: ```conf SSID=jszt1234 PASSWORD=88888888 ``` ## 使用说明 ### 手动启动 WiFi 连接 ```bash sudo ./wifi_autoconnect.sh ``` ### 查看服务状态 ```bash sudo systemctl status wifi-autoconnect.service ``` ### 查看连接日志 ```bash # 查看系统日志 sudo journalctl -u wifi-autoconnect.service -f # 查看连接日志 sudo tail -f /var/log/wifi_autoconnect.log ``` ### 测试网络连接 ```bash # 测试 IP 连通性 ping -c 4 8.8.8.8 # 测试 DNS 解析 ping -c 4 www.baidu.com ``` ## 工作原理 ### 自动连接脚本流程 1. **系统启动**:systemd 在系统启动后自动启动服务 2. **加载驱动**:检查并加载 RTL8192EU 驱动 3. **切换模式**:如果检测到 USB 存储设备,使用 usb_modeswitch 切换到 WiFi 模式 4. **等待接口**:等待 WiFi 接口(wlx*)出现 5. **启动接口**:启动 WiFi 接口 6. **连接 WiFi**:使用 nmcli 连接到配置的 WiFi 网络 7. **验证连接**:获取 IP 地址并测试 ping www.baidu.com ### USB 模式切换 RTL8192EU 设备出厂时默认为存储模式(CD-ROM),需要切换到 WiFi 模式: ```bash # 使用 usb_modeswitch 切换 sudo usb_modeswitch -v 0x0bda -p 0xa192 -K ``` 切换成功后,设备 ID 会从 `0bda:a192` 变为 `2357:0135`。 ## 故障排除 ### 问题 1:编译错误 #### 错误:`net/ipx.h: No such file or directory` **原因**:BR_EXT 功能需要已移除的 ipx.h 头文件 **解决方法**: ```makefile # 在 Makefile 中禁用 BR_EXT CONFIG_BR_EXT = n ``` #### 错误:`macro 'crc32' requires 3 arguments` **原因**:自定义 crc32 函数与内核宏冲突 **解决方法**: ```c // 将 crc32 函数重命名为 rtw_crc32 u32 rtw_crc32(const u8 *frame, size_t frame_len); ``` #### 错误:`implicit declaration of function 'complete_and_exit'` **原因**:Linux 5.17+ 移除了 complete_and_exit 函数 **解决方法**: ```c // 使用 complete() + return 替代 complete(comp); return; ``` #### 错误:`unknown type name 'mm_segment_t'` **原因**:Linux 5.10+ 移除了 mm_segment_t 相关函数 **解决方法**: ```c // 移除 get_fs() / set_fs() 调用 // 使用 copy_from_user() / copy_to_user() 替代 ``` #### 错误:`implicit declaration of function 'prandom_u32'` **原因**:Linux 6.0+ 将 prandom_u32 替换为 get_random_u32 **解决方法**: ```c #if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)) return get_random_u32(); #else return prandom_u32(); #endif ``` #### 错误:`implicit declaration of function 'strlcpy'` **原因**:Linux 6.4+ 将 strlcpy 替换为 strscpy **解决方法**: ```c #if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 4, 0)) strscpy(dest, src, sizeof(dest)); #else strlcpy(dest, src, sizeof(dest)); #endif ``` #### 错误:`too many arguments to function 'netif_napi_add'` **原因**:Linux 6.1+ 移除了 netif_napi_add 的 weight 参数 **解决方法**: ```c #if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)) netif_napi_add(ndev, &adapter->napi, rtw_recv_napi_poll); #else netif_napi_add(ndev, &adapter->napi, rtw_recv_napi_poll, RTL_NAPI_WEIGHT); #endif ``` #### 错误:`'struct usb_driver' has no member named 'drvwrap'` **原因**:Linux 6.4+ 移除了 usb_driver.drvwrap 成员 **解决方法**: ```c #if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 4, 0)) .usbdrv.driver.shutdown = rtw_dev_shutdown, #else .usbdrv.drvwrap.driver.shutdown = rtw_dev_shutdown, #endif ``` #### 错误:`'GRO_DROP' undeclared` **原因**:Linux 6.0+ 移除了 GRO_DROP 常量 **解决方法**: ```c #if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)) rtw_napi_gro_receive(&padapter->napi, pskb); rx_ok = _TRUE; #else if (rtw_napi_gro_receive(&padapter->napi, pskb) != GRO_DROP) rx_ok = _TRUE; #endif ``` #### 错误:`passing argument 4 of 'proc_create_data' from incompatible pointer type` **原因**:Linux 5.6+ 将 file_operations 改为 proc_ops **解决方法**: ```c #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)) struct proc_ops *proc_fops = (struct proc_ops *)fops; entry = proc_create_data(name, S_IFREG | S_IRUGO | S_IWUGO, parent, proc_fops, data); #else entry = proc_create_data(name, S_IFREG | S_IRUGO | S_IWUGO, parent, fops, data); #endif ``` #### 错误:`implicit declaration of function 'PDE_DATA'` **原因**:Linux 5.17+ 将 PDE_DATA 改为 pde_data **解决方法**: ```c #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0)) index = (ssize_t)pde_data(inode); #else index = (ssize_t)PDE_DATA(inode); #endif ``` ### 问题 2:驱动加载失败 **症状**:insmod 失败或驱动未加载 **解决方法**: ```bash # 检查内核版本 uname -r # 查看驱动信息 modinfo 8192eu.ko # 查看内核日志 sudo dmesg | tail -20 # 检查依赖 lsmod | grep -E "usbcore|cfg80211" ``` ### 问题 3:USB 设备未切换到 WiFi 模式 **症状**:lsusb 显示为 DISK 而不是 WLAN Adapter **解决方法**: ```bash # 手动切换模式 sudo usb_modeswitch -v 0x0bda -p 0xa192 -K # 检查切换结果 sleep 3 lsusb | grep Realtek ``` ### 问题 4:WiFi 连接失败 **症状**:nmcli 连接失败 **解决方法**: ```bash # 检查 WiFi 接口 ip link show | grep wlx # 启动接口 sudo ip link set wlx18f22ce1c7fa up # 扫描网络 sudo nmcli device wifi list # 手动连接 sudo nmcli device wifi connect "SSID" password "密码" ``` ### 问题 5:无法 ping 通外网 **症状**:已连接 WiFi 但无法访问互联网 **解决方法**: ```bash # 检查 IP 地址 ip addr show wlx18f22ce1c7fa # 检查路由 ip route show # 检查 DNS cat /etc/resolv.conf # 测试网关 ping -c 4 192.168.0.1 # 测试 DNS ping -c 4 8.8.8.8 # 测试域名解析 nslookup www.baidu.com ``` ## 项目文件说明 | 文件名 | 说明 | |-------|------| | `8192eu.ko` | 编译后的驱动模块 | | `Makefile` | 编译配置文件 | | `wifi_config.conf` | WiFi 连接配置文件 | | `wifi_autoconnect.sh` | WiFi 自动连接脚本 | | `wifi-autoconnect.service` | systemd 服务配置 | | `install.sh` | 一键安装脚本 | | `README.md` | 本说明文档 | ## 依赖工具 ### 编译依赖 - gcc - make - linux-headers-$(uname -r) ### 运行依赖 - NetworkManager - nmcli - usb_modeswitch - systemd 安装依赖: ```bash # Ubuntu/Debian sudo apt update sudo apt install build-essential linux-headers-$(uname -r) network-manager usb-modeswitch # Fedora/RHEL sudo dnf install gcc make kernel-devel NetworkManager usb_modeswitch # Arch Linux sudo pacman -S base-devel linux-headers networkmanager usb_modeswitch ``` ## 性能优化 ### 禁用不必要功能 在 `Makefile` 中禁用不需要的功能可以减小驱动大小和提高性能: ```makefile CONFIG_AP_MODE = n # 不需要 AP 模式 CONFIG_P2P = n # 不需要 P2P CONFIG_MP_INCLUDED = n # 不需要 MP 测试 CONFIG_POWER_SAVING = n # 不需要省电 CONFIG_BT_COEXIST = n # 不需要蓝牙共存 CONFIG_RTW_NAPI = n # 不需要 NAPI CONFIG_RTW_GRO = n # 不需要 GRO ``` ### 启用电源管理 如果需要省电功能: ```makefile CONFIG_POWER_SAVING = y CONFIG_IPS_MODE = default CONFIG_LPS_MODE = default ``` ## 安全建议 1. **不要在配置文件中存储明文密码**:考虑使用 NetworkManager 的密钥环 2. **限制配置文件权限**: ```bash chmod 600 wifi_config.conf ``` 3. **定期更新驱动**:关注内核更新和驱动更新 4. **使用 WPA3**:如果路由器支持,使用更安全的加密方式 ## 已知问题 1. **系统自带驱动**:Linux 6.x 内核自带了 rtl8xxxu 驱动,可能优先使用系统驱动 2. **cfg80211 兼容性**:为兼容性禁用了 cfg80211,某些高级功能可能不可用 3. **USB 模式切换**:每次重新插拔设备都需要切换模式 ## 贡献指南 欢迎提交 Issue 和 Pull Request! ### 提交 Issue 请包含以下信息: - Linux 内核版本:`uname -r` - Ubuntu 版本:`lsb_release -a` - 设备信息:`lsusb | grep Realtek` - 错误信息:完整的错误日志 - 复现步骤:详细的操作步骤 ### 代码贡献 1. Fork 本项目 2. 创建特性分支:`git checkout -b feature/your-feature` 3. 提交更改:`git commit -m 'Add some feature'` 4. 推送分支:`git push origin feature/your-feature` 5. 提交 Pull Request ## 许可证 本驱动基于 Realtek 原始驱动,遵循 GPL v2 许可证。 ## 致谢 - Realtek Semiconductor Corp. - 原始驱动代码 - Linux 内核社区 - 内核 API 文档和支持 - 所有贡献者 - Bug 修复和改进 ## 更新日志 ### v1.0.0 (2026-02-07) - ✅ 适配 Linux 6.14 内核 - ✅ 修复所有内核 API 变化 - ✅ 添加自动 WiFi 连接脚本 - ✅ 添加 systemd 服务支持 - ✅ 添加 USB 模式自动切换 - ✅ 完善文档和使用说明 - ✅ 添加故障排除指南 ## 联系方式 - 项目地址:[Gitee 仓库地址] - 问题反馈:提交 Issue --- **注意**:本驱动仅供学习和个人使用,使用本驱动造成的任何损失,作者不承担责任。