网卡驱动移植型号确认及模式设置在移植网卡驱动前,首先得知道它的型号。如果是USB网卡的话,可以通过lsusb命令查看
12345lsusb ...Bus 001 Device 003: ID 0bda:1a2b Realtek Semiconductor Corp. RTL8188GU 802.11n WLAN Adapter (Driver CDROM Mode...
很多网卡在未使用时,可能被初始化成U盘的模式,这时还需要我们将其转成网卡模式
这里RTL8188GU并不是真正的型号,因为它此时不是真正的网卡模式,RTL8188GU是Realtek常用“老型号马甲”
可以通过以下的指令,将USB网卡切换到真正的网卡模式
12345sudo apt install usb-modeswitch usb-modeswitch-datasudo usb_modeswitch \ -v 0bda -p 1a2b \ -M "5553424312345678000000000000061b000000020000000000000000000000"
-v / -p 是当前 VID/PID(MSC 模式)
-M 是发送给设备的切换命令(MessageContent)
执行完后再执行lsusb,就可以发现USB设备的vendor_id、pid、描述符都变了
12345lsusb...Bus 001 Device 006: ID 0bda:b851 Realtek Semiconductor Corp. 802.11ax WLAN Adapter...
0bda → Realtek 官方 VID
b851 → Realtek RTL8851BU 专用 PID
驱动签名如果编译Linux内核时开了内核模块签名校验,那么在驱动安装之前,需要手动对驱动进行签名操作,不然驱动会安装失败
如何看Linux内核到底看没开驱动签名校验
1zcat /proc/config.gz | grep MODULE_SIG
CONFIG_MODULE_SIG=y:启用模块签名支持
CONFIG_MODULE_SIG_FORCE=y:强制所有模块必须签名才能加载
CONFIG_MODULE_SIG_KEY="...":内核自带签名密钥
要进行驱动签名,需要以下准备文件
密钥对:
私钥(Private Key):用于给模块生成签名,只能被开发者或受信任方持有,一般是.pem格式
公钥(Public Key):内核用它来验证模块签名,一般是 .x509 或 .der格式
一般放在/lib/modules/$(uname -r)/build/certs/下
签名工具(由Linux提供):
一般放在路径/lib/modules/$(uname -r)/build/scripts/sign-file下
准备好后,通过下面指令进行驱动签名
123456cd /lib/modules/6.1.112-rt43-DR-4.0.4-2510152230-gb381cb-g6c4511/build./scripts/sign-file sha256 \./certs/module_signature.pem \./certs/module_signature.x509\~/Desktop/rtl8851bu-master/8851bu.ko
驱动安装驱动签名完之后,就可以直接将驱动加载进内核了,有2种方式
12345# 法1sudo insmod /path/to/8851bu.ko# 法2sudo modprobe 8851bu
如果签名失败,会报以下错误
1sudo modprobe 8851bu modprobe: ERROR: could not insert '8851bu': Key was rejected by service
网卡状态验证12345# 查看网卡接口ip link# 查看无线接口iwconfig