Jetson Xavier NX(ubuntu18.04)实战:编译安装RTL8152与RTL8192FU双网卡驱动
1. 为什么需要手动编译网卡驱动?
最近在折腾Jetson Xavier NX的时候,发现一个挺头疼的问题:官方源里的网卡驱动要么版本太老,要么压根没有。特别是当我需要同时使用RTL8152有线网卡和RTL8192FU无线网卡时,系统自带的驱动根本识别不了。这种情况在嵌入式开发中其实挺常见的,毕竟厂商不可能为所有硬件都预装驱动。
我查了下资料,发现Jetson Xavier NX用的是ARM64架构(也就是aarch64),而很多驱动默认是为x86平台编译的。这就导致直接apt install安装的驱动经常会出现兼容性问题。最典型的症状就是插上网卡后,ifconfig根本看不到新设备,dmesg里一堆报错信息。
手动编译驱动的好处很明显:你可以获得最新版本的驱动,而且能针对特定硬件平台优化。不过这个过程也确实踩了不少坑,特别是处理内核头文件和交叉编译的问题。下面我就把完整的解决过程分享出来,帮你避开我踩过的那些雷。
2. 环境准备与依赖安装
2.1 检查硬件连接状态
在开始之前,先用lsusb命令确认你的网卡已经被系统识别。我的输出大概是这样的:
$ lsusb Bus 002 Device 003: ID 0bda:8153 Realtek Semiconductor Corp. RTL8153 Gigabit Ethernet Adapter Bus 002 Device 004: ID 0bda:f192 Realtek Semiconductor Corp. RTL8192FU Wireless LAN 802.11ac NIC如果看不到这些设备,先检查USB接口是否正常工作。Jetson Xavier NX的USB3.0接口有时候供电不足,可以尝试换接口或者使用带电源的USB Hub。
2.2 安装编译工具链
ARM平台的驱动编译需要一些特殊的工具链。在Ubuntu 18.04上,你需要安装这些基础包:
sudo apt update sudo apt install -y build-essential git libelf-dev linux-headers-$(uname -r)特别注意:这里安装的linux-headers必须和你当前运行的内核版本完全一致。可以用uname -r查看内核版本,我的是4.9.140-tegra。
3. 编译安装RTL8152有线网卡驱动
3.1 获取驱动源码
Realtek官方其实没有直接提供RTL8152的Linux驱动源码,但社区维护得不错。我测试过最稳定的版本是这个:
git clone https://github.com/awesometic/realtek-r8152-linux.git cd realtek-r8152-linux这个仓库已经适配了ARM64架构,省去了很多交叉编译的麻烦。如果遇到404,也可以试试mirror站点。
3.2 解决内核头文件路径问题
编译时最常见的错误就是找不到内核头文件。Jetson Xavier NX默认的头文件路径有点特殊,需要先确认:
ls /usr/src/linux-headers-$(uname -r)如果提示目录不存在,可能需要先安装完整的内核开发包:
sudo apt install linux-headers-generic3.3 实际编译与安装
编译命令比想象中简单:
make -j$(nproc) ARCH=arm64 sudo make install sudo depmod -a sudo modprobe r8152-j$(nproc)表示使用所有CPU核心并行编译,能显著加快速度。如果一切顺利,现在插上网线应该就能自动获取IP了。可以用ethtool验证:
ethtool eth14. 编译安装RTL8192FU无线网卡驱动
4.1 获取无线驱动源码
无线驱动的编译要复杂一些,因为涉及802.11协议栈。我推荐使用这个维护活跃的fork:
git clone https://github.com/Mange/rtl8192fu.git cd rtl8192fu这个版本已经修复了ARM64下的很多兼容性问题,特别是解决了WPA3加密的稳定性问题。
4.2 处理内核符号冲突
编译无线驱动时最常遇到的就是内核符号版本问题。解决方法是在Makefile里加上:
CONFIG_PLATFORM_ARM_JETSON = y EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG802114.3 完整编译流程
实际编译步骤和有线驱动类似:
make -j$(nproc) ARCH=arm64 sudo make install sudo depmod -a sudo modprobe 8192fu安装完成后需要重新插拔无线网卡。验证驱动是否加载成功:
dmesg | grep 8192fu iwconfig5. 常见问题排查指南
5.1 驱动加载失败问题
如果modprobe报错"Unknown symbol",可能是内核符号不匹配。解决方法:
sudo rmmod 8192fu 2>/dev/null sudo modprobe cfg80211 sudo insmod ./8192fu.ko5.2 无线网络频繁断开
这个问题通常和电源管理有关。创建/etc/modprobe.d/8192fu.conf文件:
options 8192fu rtw_power_mgnt=0 rtw_enusbss=0然后重新加载驱动。
5.3 性能优化技巧
对于RTL8152有线网卡,可以启用巨型帧提升吞吐量:
sudo ethtool -K eth1 gso on tso on gro on sudo ethtool -C eth1 rx-usecs 0 tx-usecs 0无线网卡则建议锁定5GHz频段:
sudo iw dev wlan0 set freq 51806. 持久化配置与自动化
6.1 防止驱动被系统更新覆盖
Ubuntu的自动更新有时会覆盖手动安装的驱动。解决方法:
sudo apt-mark hold linux-headers-$(uname -r) sudo apt-mark hold linux-modules-extra-$(uname -r)6.2 开机自动加载驱动
创建/etc/modules-load.d/realtek.conf文件:
r8152 8192fu6.3 监控驱动状态
我习惯用这个脚本监控网卡状态:
#!/bin/bash watch -n 1 'dmesg | tail -20; echo ""; lsmod | grep -E "8152|8192"; echo ""; ifconfig'保存为netmon.sh并赋予执行权限即可。
