记一次更新网卡驱动的过程

驱动编译

本机已经编译了内核,想要在该内核版本的网卡驱动中加一些调试信息,由于使用的是的intel的ixgbe驱动,于是自己修改了相关的代码,然后使用如下命令进行编译:

make SUBDIRS=./drivers/net/ethernet/intel/ modules

安装驱动

编译生成的 ixgbe.ko 新驱动在./drivers/net/ethernet/intel/目录中,直接把该驱动模块替换到系统的模块安装目录。可以通过modinfo命令来查看相关驱动信息:

[root@localhost ~]# modinfo ixgbe
filename:       /lib/modules/3.10.0-1127.el7.x86_64/kernel/drivers/net/ethernet/intel/ixgbe/ixgbe.ko
version:        5.1.0-k-rh7.7
license:        GPL v2
description:    Intel(R) 10 Gigabit PCI Express Network Driver
author:         Intel Corporation, <linux.nics@intel.com>
retpoline:      Y
rhelversion:    7.8
srcversion:     078A5B00FF3436596A816DC
alias:          pci:v00008086d000015E5sv*sd*bc*sc*i*
alias:          pci:v00008086d000015E4sv*sd*bc*sc*i*
alias:          pci:v00008086d000015CEsv*sd*bc*sc*i*
alias:          pci:v00008086d000015C8sv*sd*bc*sc*i*
alias:          pci:v00008086d000015C7sv*sd*bc*sc*i*
alias:          pci:v00008086d000015C6sv*sd*bc*sc*i*
alias:          pci:v00008086d000015C4sv*sd*bc*sc*i*
alias:          pci:v00008086d000015C3sv*sd*bc*sc*i*
alias:          pci:v00008086d000015C2sv*sd*bc*sc*i*
alias:          pci:v00008086d000015AEsv*sd*bc*sc*i*
alias:          pci:v00008086d000015ACsv*sd*bc*sc*i*
alias:          pci:v00008086d000015ADsv*sd*bc*sc*i*
alias:          pci:v00008086d000015ABsv*sd*bc*sc*i*
alias:          pci:v00008086d000015B0sv*sd*bc*sc*i*
alias:          pci:v00008086d000015AAsv*sd*bc*sc*i*
alias:          pci:v00008086d000015D1sv*sd*bc*sc*i*
alias:          pci:v00008086d00001563sv*sd*bc*sc*i*
alias:          pci:v00008086d00001560sv*sd*bc*sc*i*
alias:          pci:v00008086d0000154Asv*sd*bc*sc*i*
alias:          pci:v00008086d00001557sv*sd*bc*sc*i*
alias:          pci:v00008086d00001558sv*sd*bc*sc*i*
alias:          pci:v00008086d0000154Fsv*sd*bc*sc*i*
alias:          pci:v00008086d0000154Dsv*sd*bc*sc*i*
alias:          pci:v00008086d00001528sv*sd*bc*sc*i*
alias:          pci:v00008086d000010F8sv*sd*bc*sc*i*
alias:          pci:v00008086d0000151Csv*sd*bc*sc*i*
alias:          pci:v00008086d00001529sv*sd*bc*sc*i*
alias:          pci:v00008086d0000152Asv*sd*bc*sc*i*
alias:          pci:v00008086d000010F9sv*sd*bc*sc*i*
alias:          pci:v00008086d00001514sv*sd*bc*sc*i*
alias:          pci:v00008086d00001507sv*sd*bc*sc*i*
alias:          pci:v00008086d000010FBsv*sd*bc*sc*i*
alias:          pci:v00008086d00001517sv*sd*bc*sc*i*
alias:          pci:v00008086d000010FCsv*sd*bc*sc*i*
alias:          pci:v00008086d000010F7sv*sd*bc*sc*i*
alias:          pci:v00008086d00001508sv*sd*bc*sc*i*
alias:          pci:v00008086d000010DBsv*sd*bc*sc*i*
alias:          pci:v00008086d000010F4sv*sd*bc*sc*i*
alias:          pci:v00008086d000010E1sv*sd*bc*sc*i*
alias:          pci:v00008086d000010F1sv*sd*bc*sc*i*
alias:          pci:v00008086d000010ECsv*sd*bc*sc*i*
alias:          pci:v00008086d000010DDsv*sd*bc*sc*i*
alias:          pci:v00008086d0000150Bsv*sd*bc*sc*i*
alias:          pci:v00008086d000010C8sv*sd*bc*sc*i*
alias:          pci:v00008086d000010C7sv*sd*bc*sc*i*
alias:          pci:v00008086d000010C6sv*sd*bc*sc*i*
alias:          pci:v00008086d000010B6sv*sd*bc*sc*i*
depends:        mdio,ptp,dca
intree:         Y
vermagic:       3.10.0-1127.el7.x86_64 SMP mod_unload modversions
signer:         CentOS Linux kernel signing key
sig_key:        69:0E:8A:48:2F:E7:6B:FB:F2:31:D8:60:F0:C6:62:D8:F1:17:3D:57
sig_hashalgo:   sha256
parm:           max_vfs:Maximum number of virtual functions to allocate per physical function - default is zero and maximum value is 63 (uint)
parm:           allow_unsupported_sfp:Allow unsupported and untested SFP+ modules on 82599-based adapters (uint)
parm:           debug:Debug level (0=none,...,16=all) (int)

可以看到驱动目录存在于如下目录中:

/lib/modules/3.10.0-1127.el7.x86_64/kernel/drivers/net/ethernet/intel/ixgbe/ixgbe.ko

那么直接把驱动拷贝替换过去,执行重启试一下。

结果并不符合预期,我修改的代码并没有生效,调试信息完全没有打印出来,到底怎么回事?

经过进一步调研发现,为了支持NFS启动,网卡驱动属于在系统启动比较早期就需要加载的,因此它是被打包的initramfs中加载,因此我只把相关的ko替换到系统目录中,重启并不会生效,而需要重新生成initramfs把更新后的ko打包进去。对于centos 6来说直接执行如下命令:

dracut --force

执行完成后,reboot重启试一下,终于生效了。

更新显卡驱动时,出现错误提示“The feature you are trying”通常与系统兼容性、权限问题或驱动程序本身不完整有关。以下是几种常见的解决方法: ### 检查系统兼容性 确保所下载的显卡驱动版本与操作系统版本相匹配。如果尝试安装的驱动仅支持特定版本的 Windows 或 Linux 内核,则可能导致此错误。对于 Windows 系统,可以使用设备管理器检查当前显卡型号和已安装驱动版本;对于 Linux 系统,需确认内核是否支持该驱动[^3]。 ### 以管理员权限运行安装程序 在 Windows 上,右键点击驱动安装程序并选择“以管理员身份运行”,这将提升执行权限,避免因权限不足导致的安装失败。在 Linux 系统中,使用 `sudo` 命令来运行安装脚本,例如: ```bash sudo ./NVIDIA-Linux-x86_64-<version>.run ``` ### 清理旧驱动残留文件 如果之前尝试过安装但失败,建议彻底卸载现有显卡驱动,并删除所有相关文件。在 Windows 上可以使用 DDU(Display Driver Uninstaller)工具进行深度清理;在 Linux 中,可以通过以下命令卸载 NVIDIA 驱动: ```bash sudo apt-get purge nvidia-* ``` 然后重启系统再尝试新驱动安装[^1]。 ### 使用官方推荐方式安装驱动 对于 Windows 用户,推荐通过 NVIDIA 官方网站下载最新驱动并按照指引操作。对于 Linux 用户,尤其是使用 WSL2 的情况,由于其内核为单体式设计且不支持模块化加载,因此需要手动编译包含所需驱动的内核镜像[^2]。具体步骤可参考 GitHub 上提供的指南链接。 ### 关闭安全启动(Secure Boot) 某些情况下,UEFI 安全启动功能会阻止非签名驱动程序的加载。进入 BIOS 设置界面禁用 Secure Boot 功能后再试一次驱动安装过程。 ### 更新操作系统补丁 保持操作系统处于最新状态有助于提高兼容性和稳定性。Windows 用户应确保已安装所有重要更新;Linux 用户则可通过包管理器获取最新的内核及依赖库更新[^3]。 ### 调整组策略设置 若企业环境中启用了某些限制软件安装的组策略规则,则可能触发此类错误。联系 IT 管理员调整相关策略或者临时关闭防病毒软件/防火墙试试看能否解决问题。 ### 查阅日志文件定位具体原因 无论是 Windows 还是 Linux 平台,在驱动安装过程中都会生成详细的日志录。仔细阅读这些信息可以帮助快速找到出错根源所在。例如,在 NVIDIA 驱动安装失败时生成的日志文件通常位于 `/var/log/nvidia-installer.log` 或 `%TEMP%\nvidia-installer.log` 中。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值