收起左侧

最新飞牛系统安装后板载 Realtek 网卡无法获取 IP 的排查与修复

2
回复
52
查看
[ 复制链接 ]

1

主题

3

回帖

0

牛值

江湖小虾

 # 飞牛系统安装后板载 Realtek 网卡无法获取 IP 的排查与修复

  ## 飞牛系统吃灰很久没用,升级后Photos无法启动,垃圾系统,应用软件升级的兼容性都做不好,备份数据后重装最新的系统,板载网卡无IP我也是服了,临时使用 usb 网卡连上网,让 Codex 帮忙修复这个问题,给大家一个参考
  ## 问题现象

  全新安装飞牛系统后,板载有线网卡无法获取 IP,路由器后台也看不到该设备。临时插入 USB 网卡后,系统可以正常联网。

  系统中查看网卡状态:

  ip -br link
  ip -br addr
  nmcli device status

  异常表现类似:

  enp1s0  DOWN  <NO-CARRIER,BROADCAST,MULTICAST,UP>
  enp1s0  unavailable

  即使网口灯亮、网线插着,系统仍显示 NO-CARRIER。

  ## 环境信息

  本次遇到的硬件和系统:

  OS: 飞牛系统,Debian 12 bookworm 基础
  Kernel: 6.18.18-trim
  板载网卡: Realtek RTL8111/8168/8411
  默认驱动: r8169

  查看网卡型号:

  lspci -nnk | grep -A3 -Ei 'Ethernet|Network'

  问题网卡显示:

  Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
  Kernel driver in use: r8169

  ## 根因

  这不是 DHCP 问题,而是 r8169 驱动与这块 Realtek 网卡/PHY 兼容性异常。

  关键日志:

  sudo dmesg -T | grep -Ei 'r8169|enp1s0|rtl|firmware|phy'

  可以看到类似:

  r8169 ... rtl_ocp_gphy_cond == 1
  r8169_apply_firmware failed: -110
  phy_poll_reset failed: -110
  r8169 ... Link is Down

  系统没有检测到物理链路,所以不会进入正常 DHCP 流程。

  ## 修复思路

  用 Realtek 专用驱动 r8168 替代内核自带的 r8169。

  建议先插 USB 网卡作为临时网络通道,避免操作过程中 SSH 断开。

  安装依赖和驱动:

  sudo apt-get update
  sudo apt-get install -y r8168-dkms

  如果你的内核较新,例如 6.18.18-trim,Debian 源里的 r8168-dkms 8.051.02 可能会编译失败。可查看日志:

  sudo tail -n 200 /var/lib/dkms/r8168/8.051.02/build/make.log

  本次失败点包括:

  strlcpy implicit declaration
  ethtool_eee / ethtool_keee 类型不兼容
  del_timer_sync / from_timer / skb_gso_segment API 变化

  ## 兼容补丁

  先备份源码:

  sudo cp -a /usr/src/r8168-8.051.02/r8168_n.c \
    /usr/src/r8168-8.051.02/r8168_n.c.bak

  编辑 /usr/src/r8168-8.051.02/r8168_n.c。

  在 #include <linux/completion.h> 后加入:

  #if LINUX_VERSION_CODE >= KERNEL_VERSION(6,18,0)
  #include <linux/string.h>
  #include <net/gso.h>
  #ifndef strlcpy
  #define strlcpy(dst, src, size) strscpy((dst), (src), (size))
  #endif
  #define del_timer_sync(timer) timer_delete_sync(timer)
  #ifndef from_timer
  #define from_timer(var, callback_timer, timer_fieldname) \
        container_of((callback_timer), typeof(*(var)), timer_fieldname)
  #endif
  #endif

  然后把 .get_eee 和 .set_eee 那段条件从:

  #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)

  改成:

  #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0) && LINUX_VERSION_CODE < KERNEL_VERSION(6,18,0)

  重新构建并安装 DKMS 模块:

  sudo dkms build r8168/8.051.02 -k $(uname -r)
  sudo dkms install r8168/8.051.02 -k $(uname -r)
  sudo dpkg --configure r8168-dkms
  sudo update-initramfs -u -k $(uname -r)

  确认模块别名已经指向 r8168:

  modprobe -R pci:v000010ECd00008168sv*sd*bc*sc*i*

  应返回:

  r8168

  ## 重启验证

  重启:

  sudo reboot

  重启后检查:

  lspci -nnk -s 01:00.0
  ip -br addr
  ethtool -i enp1s0
  ethtool enp1s0

  正常结果应类似:

  Kernel driver in use: r8168
  driver: r8168
  Speed: 1000Mb/s
  Duplex: Full
  Link detected: yes
  enp1s0  UP  192.168.x.x/24

  也可以测试板载网口到路由器:

  sudo ping -I enp1s0 -c 3 192.168.x.1

  ## 注意事项

  - 操作前建议插 USB 网卡作为临时联网通道。
  - 不要只看网口灯,系统里的 carrier 和 Link detected 更关键。
  - 如果安装后仍用 r8169,检查 /etc/modprobe.d/r8168-dkms.conf 是否存在。
  - 内核升级后,DKMS 需要为新内核重新编译 r8168,如果升级后网卡再次失效,优先检查:

  sudo dkms status

  ## 最终结果

  修复后板载网卡恢复正常:

  驱动: r8168
  链路: 1000Mb/s Full
  状态: connected
  DHCP: 正常获取 IPv4 地址
  路由器后台: 可以看到板载网卡
收藏
送赞
分享

感谢反馈!我们先转给技术同事进一步评估确认,也感谢你把排查思路一并分享出来。

能顺便补充一下,fnos版本号,还有网卡的性能模式是否开启。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则