在新买的联想ideapad-330C笔记本上,安装Ubuntu 18.04后,悲催的发现,没有无线网络,幸好有线还能用,然后网上搜一波,发现不少人遇到这种问题,也有人给出解决方案

参考的链接: Thinkpad E470C(集成网卡rlt8111/8618/8411系列) 无线网卡rtl8821CE系列 安装ubuntu 和win10双系统没有无线网问题 (侵删)

在以上链接中给出了解决方案及无线网卡rtl8821ce源码压缩包的下载地址,有需要的自行去下载

系统:Ubuntu 18.04.2  

内核: linux4.18

网卡:Realtek 8821CE Wireless LAN 802.11ac PCI-E NIC

按照参考链接的方法,成功安装网卡驱动,在此电脑中也不用重启就能连接wifi,但后来系统更新……到Ubuntu18.04.3,内核更新到linux5.0.0.31时,重启后发现又没有无线网卡的驱动

此时系统:Ubuntu 18.04.3

内核: linux5.0.0.31

只好按照原来的方法重新做一次,发现编译就出错了,配置没有更改,make出现以下错误

rtl8821ce/os_dep/linux/os_intfs.c::: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
.ndo_select_queue = rtw_select_queue,

看这错误,也不知道发生什么事啊,只好网上在找一下,找到了有人说是类型不匹配,然后在内核源码中查找ndo_select_queue的声明,找到了是这样的

u16            (*ndo_select_queue)(struct net_device *dev,
struct sk_buff *skb,
struct net_device *sb_dev,
select_queue_fallback_t fallback);

而网卡里的代码 rtl8821ce/os_dep/linux/os_intfs.c:1192 是这样的

static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0)
, void *accel_priv
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)
, select_queue_fallback_t fallback
#endif
#endif

这样只能修改网卡驱动的源码了,改成适配linux5.0以上内核的,改为后代码如下,添加了对内核linux5.0.0以上的判断

static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0)
, struct net_device *sb_dev
, select_queue_fallback_t fallback
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0)
, void *accel_priv
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)
, select_queue_fallback_t fallback
#endif
#endif

改为保存,继续make,又报错

rtl8821ce/os_dep/linux/rtw_android.c::: error: macro "access_ok" passed  arguments, but takes just
if (!access_ok(VERIFY_READ, priv_cmd.buf, priv_cmd.total_len)) {
^
rtl8821ce/os_dep/linux/rtw_android.c::: error: ‘access_ok’ undeclared (first use in this function)
if (!access_ok(VERIFY_READ, priv_cmd.buf, priv_cmd.total_len)) {

方法同上,继续找access_ok在内核头文件的声明发现在linux5.0以上的 access_ok的参数只有2个,而网卡驱动上使用时有3个参数

手动修改网卡驱动源码,文件: rtl8821ce/os_dep/linux/rtw_android.c :629,修改后如下:(删除原来  if (!access_ok(VERIFY_READ, priv_cmd.buf, priv_cmd.total_len)) {  这行代码,添加以下代码)

#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0)
if (!access_ok(priv_cmd.buf, priv_cmd.total_len)) {
#else
if (!access_ok(VERIFY_READ, priv_cmd.buf, priv_cmd.total_len)) {
#endif

保存,继续make,又报错,如下:

rtl8821ce/os_dep/linux/ioctl_cfg80211.c: In function ‘rtw_get_systime_us’:
rtl8821ce/os_dep/linux/ioctl_cfg80211.c::: error: implicit declaration of function ‘get_monotonic_boottime’; did you mean ‘getboottime’? [-Werror=implicit-function-declaration]
get_monotonic_boottime(&ts);
^~~~~~~~~~~~~~~~~~~~~~
getboottime

这里已经给了修改的提示了,不过同样方法发现找不到 get_monotonic_boottime 这个函数,不过能找到提示的 getboottime函数,那就替换以下了,不过考虑到内核低于5.0的版本,那就加一个判断了

同上删除 rtl8821ce/os_dep/linux/ioctl_cfg80211.c:339 这行代码,添加以下代码

    #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0)
getboottime(&ts);
#else
get_monotonic_boottime(&ts);
#endif

这次make终于成功了!

make
sudo make install
sudo modprobe -a 8821ce

这台电脑不用重启就直接连上原来的wifi了

没几天,电脑又更新了,重启后发现又没有了无线网卡驱动,看了一下,原来内核又升级了,这次是:

系统:Ubuntu 18.04.3

内核:Linux 5.0.0.32

内核一个小小改动,都让原来的网卡驱动没了,幸好上次的网卡驱动源码的改动还在,重复以下操作

make
sudo make install
sudo modprobe -a 8821ce

哈哈,又可以了

联想ideapad-330C 在Ubuntu18.04 上安装Realtek 8821CE无线网卡驱动的更多相关文章

  1. 在ubuntu18.04上安装EOS

    在ubuntu18.04上安装EOS 在ubuntu18.04上安装EOS的目的: 把交易所的eos转到eos主网,防止交易所跑路或者交易所被黑客攻击 在不联网的安全环境下,用eos官方的命令行工具, ...

  2. 在Ubuntu18.04上安装Nvidia驱动

    拿到了一台新机子,带显卡的那种,当然是各种倒腾了!于是我又一天装了三遍机子来进行各种尝试熟悉配置啥的. 所以首先是在裸机上安装Nvidia驱动. 环境:Ubuntu18.04 刚安装完系统,当然是把软 ...

  3. Ubuntu18.04上安装NS-3

    目录 第一步:处理gcc/g++版本 第二步:安装相关依赖 第三步:正式安装 第四步:测试 我自己前后安装过好几次NS3了,网上其他相关的博客质量都不是很好,因此自己总结了一个ns3的安装过程. 首先 ...

  4. Ubuntu18.04上安装CUDA_10.1(nvidia-driver)和cuDNN_7.6.5

    本文是在Ubuntu18.04.5服务器上安装CUDA_10.1(nvidia-driver455)和cuDNN_7.6.5, Ubuntu 18.04.5 CUDA_10.1 (nvidia-dri ...

  5. Ubuntu18.04上安装Docker CE

    建立 REPOSITORY 1.更新索引包 更新 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的地址,这样才能获取到最新的软件包 sudo ...

  6. Ubuntu18.04上安装N卡驱动、CUDA、CUDNN三连

    环境:Ubuntu18.04 显卡驱动真的挺方便的,CUDA和CUDNN还是踩了一些坑2333 1.安装显卡驱动 安装ubuntu更新或sudo apt-get update & sudo a ...

  7. Ubuntu18.04上安装java

    安装java8 sudo add-apt-repository ppa:webupd8team/javasudo apt-get updatesudo apt-get install oracle-j ...

  8. Ubuntu18.04上安装Docker-Compose

    1.进入https://github.com/docker/compose/releases 查看最新版本,当前版本为1.23.1 sudo curl -L https://github.com/do ...

  9. ubuntu 16.04 编译安装 trl8291cu系列 无线网卡驱动

    1 先 下载git包 和相关编译工具 sudo apt-get update sudo apt-get install git linux-headers-generic build-essentia ...

随机推荐

  1. nuxtjs如何部署cdn及区分发布环境

    1.部署cdn nuxt  build 后的前端资源都会存放在.nuxt/dist/ 文件夹下面 img 目录存放的是使用到的图片资源,无论是开发中存放在 assets 文件夹里的,还是static里 ...

  2. ZROI 暑期高端峰会 A班 Day5 杂题选讲

    CF469E \(n\) 个需要表示的数,请使用最少的 \(2^k\) 或 \(-2^k\) 表示出所有需要表示的数.输出方案. \(n\le 10^5,|a_i|\le 10^5\). 首先每个数肯 ...

  3. 09-排序2 Insert or Merge (25 分)

    According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...

  4. git中ignore文件配置

    在项目中我们有一些文件是不能公开的,或者说是每个人需要单独配置的,那么这个时候使用 git 就不能上传这些文件.此时就需要对 .gitignore 文件进行配置. git 的忽略原则:参考 廖雪峰的g ...

  5. Eclipse启动发生的错误:An internal error occurred during: "Initializing Java Tooling".

    1.启动Eclipse时,初始化异常:An internal error occurred during: "Initializing Java Tooling". 解决方案:wi ...

  6. React_01_ECMAScript6

    ECMAScript6 1.ES6简介 1.1.什么是ES6 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了.它的目 ...

  7. [C#]AdvPropertyGrid的使用示例(第三方控件:DevComponents.DotNetBar2.dll)

    开发环境:Visual Studio 2019 .NET版本:4.5.2 效果如下: 1.初始化界面: 2.属性“人物”-自定义控件显示: 3.属性“地址”-自定义窗体显示: 4.属性“性别”-枚举显 ...

  8. [原创]Android Monkey 在线日志分析工具开发

    [原创]Android Monkey 在线日志分析工具开发 在移动App测试过程中,Monkey测试是我们发现潜在问题的一种非常有效手段,但是Android原生的Monkey有其天然的不足,数据不能有 ...

  9. C#】通过遍历IFrame访问页面元素

    最近在做一个小项目,期间需要用到C#去操作IE页面中的元素,实现自动填写表单并且提交的功能,想这网上关于这方面的东西肯定很多,于是开始在网上找资料. 在逆心的博客上找到些东西对自己帮助很大,原文链接: ...

  10. Keras 入门实例

    使用Keras构建神经网络的基本工作流程主要可以分为 4个部分.(而这个用法和思路,很像是在使用Scikit-learn中的机器学习方法) Model definition → Model compi ...