记一次Gentoo系统问题(无法连wifi)排查过程

安装Gentoo进入系统后无法连接wifi

在安装Gentoo过程中遇到的一个小问题,让我有种豁然开朗的感觉(对系统的进一步了解),所以记录下来。

在我漫长的编译安装之后,终于进到了Gentoo的系统里面。

  1. 但是,联网的时候我发现ip link set wlp2s0 up怎么都无法将wlp2s0激活,但是能够在ip link看到该网卡说明肯定是正常识别了。这个时候肯定得看日志了,因为我的网卡是Realtek(可以用lspci查看,不过这都不知道的话在安装那一步就失败了吧),所以运行dmesg | grep rtl查看,发现有这么一条错误信息 rtl8723be 0000:02:00.0: Direct firmware load for rtlwifi/rtl8723befw.bin failed with error -2
  2. 从字面意思上来说就是固件加载错误,思考一下为什么会加载固件错误?往常来说我们安装的系统都是将我们的无线网卡当成一个模块来加载的,模块有一个特点,就是动态加载,所以我们并没有把他作为一个固件编译进内核里。
  3. 首先你看下是你没有加载wifi模块还是没有把wifi当成模块编译而是当成固件编译。lsmod | grep rtl如果没有rtlwifi相关的输出,没有的话再试试modprobe rtlwifi,如果报错或者再看lsmod | grep rtlwifi还是没有的话那就是没有将wifi作为模块编译。
  4. 找到问题了,怎么解决呢?两种方案。 一,把wifi作为一个模块编译进内核,在make menuconfig里面找到网卡相关的设置按M让网卡作为模块加载,路径在Device Drivers → Network device support → Wireless LAN → Realtek rtlwifi family of devices,可以通过/搜索你的网卡找到路径,按大写M改成用模块加载。 因为我这是老电脑了,换下一台电脑肯定要重新编译,所以没必要考虑移植性,直接写死进内核,所以我用第二种。 二,配置的时候告诉编译器把网卡编译进内核。 # 进入内核源码路径 cd /usr/src/linux/ make menuconfig Device Drivers → Generic Driver Options → Firmware loader在第二项你会看到这样一句()Build named firmware blobs into the kernel binary,回车进入输入框,输入rtlwifi/rtl8723befw.bin回车,下面就会出现一个新的选项,回车输入/lib/firmware/,具体如下。 保存退出。也可以直接把这个配置写进.config CONFIG_EXTRA_FIRMWARE_DIR="/lib/firmware/" CONFIG_EXTRA_FIRMWARE="rtlwifi/rtl8723befw.bin" 重新编译make -j12,安装模块(如果有重新添加模块的话)make modules_install安装内核make install,安装initramfsgenkernel --install initramfs

后记

这篇博客最大的意义在于,这一过程其实是可以不用google就能搞定的,通过查询日志,找出源头,思考解决,解决问题之后爽值拉满。

经验分享 程序员 微信小程序 职场和发展