• 全部
  • 经验案例
  • 典型配置
  • 技术公告
  • FAQ
  • 漏洞说明
  • 全部
  • 全部
  • 大数据引擎
  • 知了引擎
产品线
搜索
取消
案例类型
发布者
是否解决
是否官方
时间
搜索引擎
匹配模式
高级搜索

Repo

2天前提问
  • 0关注
  • 0收藏,73浏览
粉丝:0人 关注:0人

问题描述:

Repo没有某一个网卡的固件版本包,但是我有这个网卡的固件包,我能下载一个repo有的网卡版本,然后把里面的固件替换一下使用嘛?

1 个回答
粉丝:27人 关注:2人

场景:YUM/DNF repo 仓库里没有你目标网卡固件 rpm 包,但你手里有独立的固件二进制文件;repo 里有另一款同系列网卡的固件 rpm,想下载这个 rpm,拆开替换里面的固件文件,再安装使用。
结论:技术上可以做,但不建议直接 rpm 内替换文件直接安装,有坑;分两种思路:拆包修改重建 rpm / 直接手动部署固件。

1、能不能直接下载 repo 的 rpm,解压替换固件,再装?

不建议直接改 rpm 内部文件,不重新打包就拷到系统使用
rpm 包除了存放固件二进制,还包含:
  • 文件路径、文件权限、md5 校验
  • %post脚本(固件加载触发、modprobe、depmod、initramfs 更新)
  • 依赖关系、Provides 冲突标记
如果你直接rpm2cpio解压,替换 firmware 下 bin 文件,直接把文件丢到 /lib/firmware/
  1. rpm 数据库不知道这个文件存在,后续yum update会覆盖删掉你的固件;
  2. 升级内核 / 固件包时,系统会把你手动替换的固件冲掉;
  3. initramfs 里的旧固件不会自动更新,开机早期驱动依然加载旧固件;
  4. 缺少 post 脚本,不会自动刷新固件缓存,驱动可能识别不到新固件。
⚠严禁:直接修改 rpm 包内部文件,不重新构建 rpm 就 rpm‑ivh 强行安装,rpm 校验会失败,系统包数据库损坏风险。

2、正确两种实操方案

方案 A:重建 RPM 包(规范,适合批量、生产环境)

拿 repo 上已有的同系列网卡固件 rpm 作为模板,替换固件二进制,重新编译生成新 rpm。
  1. 下载源 rpm
bash
yumdownloader --source firmware-xxx.src.rpm # 或者下载二进制rpm,拆出spec文件 rpm -ivh firmware‑xxx.src.rpm
  1. 进入 rpmbuild 目录,把你自己的网卡固件二进制替换 SOURCES/ 下对应的固件文件;
  2. 修改.spec:改固件文件名、版本号,不要和原有包版本冲突;
  3. rpmbuild -ba xxx.spec,生成新的自定义 rpm;
  4. 安装自定义 rpm:dnf install ./custom‑firmware‑xxx.rpm
安装后 rpm 数据库完整,yum 升级不会乱覆盖,% post 脚本自动执行 depmod、更新 initramfs。

方案 B:手动部署固件(应急,临时调试,不进 rpm 数据库)

适合测试验证固件是否可用,生产不推荐长期使用,升级会丢失
  1. 将你的网卡固件 bin 文件放到 /lib/firmware/<厂商目录>/
  2. 设置正确权限:
bash
chmod 644 /lib/firmware/xxx‑nic‑fw.bin
  1. 更新固件依赖缓存
bash
depmod -a
  1. 更新 initramfs,非常关键! 内核启动阶段会从 initramfs 读固件,不更新重启还是旧固件
bash
dracut -f /boot/initramfs-$(uname -r).img $(uname -r)
  1. 重新加载驱动模块
bash
rmmod 驱动名 && modprobe 驱动名
缺点:
  • rpm 数据库无记录,后续dnf update firmware‑*会删除你手动放的固件;
  • 内核升级后 initramfs 重新生成,你的自定义固件丢失,需要重复操作。

3、重要风险点(踩坑高频)

  1. 固件文件名必须严格匹配驱动请求的文件名
    dmesg 可以看驱动需要加载什么固件名字:
bash
dmesg | grep firmware
failed to load firmware "xxx/abc.bin",你的固件文件名必须和这个完全一致,大小写敏感,名字错了驱动不会加载。哪怕固件内容是对的,文件名不对直接报错找不到固件。
  1. 不要跨硬件型号混用固件。
    哪怕是同厂商,不同网卡型号固件不能乱刷,会导致网卡硬件挂起、网卡无法识别。
  2. initramfs 一定要刷新。很多人替换完固件,reboot 后又变回旧版本,就是 initramfs 里面还打包了旧固件。
  3. 如果系统启用 secure boot,自定义固件需要签名,否则内核拒绝加载外部固件。

4、什么时候不建议这么干

  1. 生产环境长期运行,优先找官方对应 rpm 包,自制 rpm 只是应急手段;
  2. Secure Boot 开启,你没有密钥签名,自定义固件无法加载;
  3. 网卡固件存在硬件兼容性校验,固件版本和网卡硬件 PCB 版本不匹配,直接会网卡失联。

快速排查命令,替换完固件验证是否生效

bash
# 查看驱动加载的固件版本 ethtool -i ethX # 看固件加载日志 dmesg -T | grep -E 'firmware|nic|driver'

总结

  1. 可以借用 repo 现有 rpm 做模板,但是必须重新构建 rpm,不能简单解压替换文件直接用
  2. 应急调试可以手动丢 firmware 目录,但务必执行 depmod + dracut 更新 initramfs;
  3. 文件名必须和驱动请求完全一致,secure boot 环境还要考虑签名。

暂无评论

编辑答案

你正在编辑答案

如果你要对问题或其他回答进行点评或询问,请使用评论功能。

分享扩散:

提出建议

    +

亲~登录后才可以操作哦!

确定

亲~检测到您登陆的账号未在http://hclhub.h3c.com进行注册

注册后可访问此模块

跳转hclhub

你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作

举报

×

侵犯我的权益 >
对根叔社区有害的内容 >
辱骂、歧视、挑衅等(不友善)

侵犯我的权益

×

泄露了我的隐私 >
侵犯了我企业的权益 >
抄袭了我的内容 >
诽谤我 >
辱骂、歧视、挑衅等(不友善)
骚扰我

泄露了我的隐私

×

您好,当您发现根叔知了上有泄漏您隐私的内容时,您可以向根叔知了进行举报。 请您把以下内容通过邮件发送到pub.zhiliao@h3c.com 邮箱,我们会尽快处理。
  • 1. 您认为哪些内容泄露了您的隐私?(请在邮件中列出您举报的内容、链接地址,并给出简短的说明)
  • 2. 您是谁?(身份证明材料,可以是身份证或护照等证件)

侵犯了我企业的权益

×

您好,当您发现根叔知了上有关于您企业的造谣与诽谤、商业侵权等内容时,您可以向根叔知了进行举报。 请您把以下内容通过邮件发送到 pub.zhiliao@h3c.com 邮箱,我们会在审核后尽快给您答复。
  • 1. 您举报的内容是什么?(请在邮件中列出您举报的内容和链接地址)
  • 2. 您是谁?(身份证明材料,可以是身份证或护照等证件)
  • 3. 是哪家企业?(营业执照,单位登记证明等证件)
  • 4. 您与该企业的关系是?(您是企业法人或被授权人,需提供企业委托授权书)
我们认为知名企业应该坦然接受公众讨论,对于答案中不准确的部分,我们欢迎您以正式或非正式身份在根叔知了上进行澄清。

抄袭了我的内容

×

原文链接或出处

诽谤我

×

您好,当您发现根叔知了上有诽谤您的内容时,您可以向根叔知了进行举报。 请您把以下内容通过邮件发送到pub.zhiliao@h3c.com 邮箱,我们会尽快处理。
  • 1. 您举报的内容以及侵犯了您什么权益?(请在邮件中列出您举报的内容、链接地址,并给出简短的说明)
  • 2. 您是谁?(身份证明材料,可以是身份证或护照等证件)
我们认为知名企业应该坦然接受公众讨论,对于答案中不准确的部分,我们欢迎您以正式或非正式身份在根叔知了上进行澄清。

对根叔社区有害的内容

×

垃圾广告信息
色情、暴力、血腥等违反法律法规的内容
政治敏感
不规范转载 >
辱骂、歧视、挑衅等(不友善)
骚扰我
诱导投票

不规范转载

×

举报说明