起因
台式机原本用着 VMware Workstation,想要搭建 AI 环境时发现虚拟机无法直接调用 nvidia 显卡资源 (如下命令输出为 False),于是决定安装 windows11 + Linux 双系统。
>> print(torch.cuda.is_available())
U盘+ Rufus 制作 Ubuntu 24.04 LTS 镜像。进入 BIOS 按步骤操作后成功安装 Ubuntu,看起来很顺利,然后来到最关键的一步安装 Nvidia驱动,哐哐一顿操作后发现显卡驱动是装上了,但网卡驱动掉了!没网了!
下载网卡官方网卡驱动
这里很自然的一个思路就是重新装网卡驱动。但是,网卡厂商通常 release driver for Linux 需要用户下载后在本地编译才能安装 (不如 windows11 那样友好)。
因此也要求 Linux 系统有基础编译环境,即 gcc, g++, make 等工具。
还需要知道网卡硬件的型号等信息,在 Linux 终端输入以下命令查看,RTL8125 是常见的消费端网卡型号。然后再去 Realtek 官网找到对应驱动下载。
>> lspci | grep -i "net"
Intel Corporation Wi-Fi 6 AX200 (xxx)
Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (xxx)
接下来,就是为了装上驱动而经历的一系列坎坷经历和学习过程~
(基础知识一) GRUB引导启动
GRUB 是 Unix 系统中常用的启动引导程序,负责在启动时加载操作系统内核。安装双系统后也是每次开机在这一步选择进入 Windows11 还是 Ubuntu 系统。
面对上述安装显卡驱动后连不上网的问题,搜索资料得知可以 GRUB 界面选择 “Advanced mode for Ubuntu” 进入旧版 kernel 的操作系统恢复联网。
具体来说,安装显卡驱动以前 kernel 版本是 Linux 6.14.0-27-generic, 安装显卡驱动以后是 Linux 6.17.0-14-generic (这里据说是 nvidia 驱动会自动将 kernel 升级到新版本),因此,无论是有线还是无线网卡驱动都对应旧版本 kernel,新版 kernel 需要对应新的驱动。
以下命令查看本机 kernel version:
>> hostnamectl
Static hostname: xxx
...
Operating System: Ubuntu 24.04.3 LTS
Kernel: Linux 6.17.0-14-generic
Architecture: x86-64
...
(此处写点边角料)
在研究 Linux packages 过程中疑惑 Noble Numbat 是什么?
Noble Numbat 是 Ubuntu 发行版本 24.04 LTS 的代号,同样 Ubuntu 发行版本 22.04 LTS 代号叫 Jummy Jellyfish. 尝试手动下载离线安装 packages 的时候版本不要搞错了.
附上 Ubuntu package 下载链接:https://ubuntu.pkgs.org/
(基础知识二) apt / dpkg
dpkg 是 Debian 软件包管理工具。它主要处理文件格式为 .deb 的安装包, 但不解决包之间的依赖问题。如果安装的软件包缺少依赖项, dpkg 会给出提示,但并不会自动下载和安装缺失的依赖。
>> dpkg -i <package_name>.deb // -i: install package
apt, 全名 Advanced Package Tool,也是 Debian 软件包管理器。
apt 相比 dpkg 更适合实际使用,因为它可以自动解决和下载依赖问题 (需要联网),使软件安装更为轻松。
>> apt-get install <package_name>
(基础知识三) make / build-essential
build-essential 是 Ubuntu 和其他基于 Debian 的 Linux 发行版中的一个元包,它包含了编译软件所必需的工具和库。
安装网卡驱动,需要先想办法装上 build-essential。其包含以下工具和库:
- gdb: 用于调试程序。
- gcc, g++: 用于编译 C 和 C++ 程序。
- make: 用于自动化编译过程。
- libc6-dev: GNU C 库,包含处理和编译 C 和 C++ 脚本所需的头文件和开发库。
- dpkg-dev: 用于解压、构建甚至上传 DEB 源包
离线安装的最终解决办法
该方法的前提是双系统已经成功安装,即前文提到的 GRUB 引导启动 "Advanced mode for Ubuntu" ,选择旧版本 kernel 后可以进入系统且可以正常联网!
1. 在旧版 kernel 系统准备下载目录
>> cd /media/<user_name>/E_Disk // 进到磁盘E盘目录
>> mkdir offline_package
2. 更新软件源
>> apt update
3. 下载 build-essential 和 cmake
注意,加上选项 --download-only, 只下载不安装!
apt 下载的 package 默认在 /var/cache/apt/archives 目录。
>> apt-get install --download-only -y build-essential cmake
>> cp /var/cache/apt/archives/*.deb /media/<user_name>/E_Disk/offline_package/
4. 重启并进入到新版 kernel 系统安装 build-essential
进入到 offline_package 目录进行离线编译和安装。
>> cd offline_package
>> apt install ./*.deb
(如果提示有依赖问题或顺序问题,可执行 apt --fix-broken install)。
我在这一步发现 apt install 失败,但是用 dpkg 安装一次成功。
>> dpkg -i ./*.deb
5. 检查安装是否成功
输入以下命令,若正常显示版本则安装成功。
>> gcc --version
>> g++ --version
>> make --version
>> cmake --version
6. 编译安装网卡驱动
进到下载的 Realtek 驱动目录下,运行 autorun 脚本编译并安装。
>> cd ~/Downloads/realtek_r8125_driver/r8125-9.016.01/
>> ./autorun.sh
...
Error: /lib/modules/6.17.0-14-generic/build/: No such file or directory
...
报错了!这是因为 make 命令在尝试编译驱动时,找不到当前 kernel (6.17.0-14-generic) 对应的源代码头文件 (Header Files),需要安装 linux-headers package。
于是重复一遍步骤1~4,在能联网的系统上下载源代码头文件,再切到离线的系统安装。
>> apt-get install --download-only -y linux-headers-6.17.0-14-generic
再运行 autorun 脚本就不再报错,同时看到桌面右上角网络连接图标出现。
使用 apt 更新其他软件包
成功安装网卡驱动!
马上用 apt 更新一遍能更新的 package,避免重蹈覆辙!

3609

被折叠的 条评论
为什么被折叠?



