设备启动顺序导致OpenWrt找不到网卡错误

       先说结论,固态硬盘和U盘存在新旧不同版本OpenWrt,错误的启动顺序看上去像正常从U盘启动,但实际从固态硬盘启动了旧版本的系统内核,从U盘启动了新版本Openwrt的其他程序,二者不一致导致网卡等无法正确驱动。只有在机器存在多个不同版本OpenWrt固件时存在这个问题,启动时注意U盘启动顺序,或手动选择U盘启动。

一、问题现象

       起因是最近考虑升级x86软路由的OpenWrt版本,自己的机器系统存在固态硬盘里,而非U盘。升级方式就是重装,采用的方法是找一个U盘中写入OpenWrt镜像,然后从U盘启动后用dd命令写入镜像到机器的固态硬盘里。机器之前应该设置了U盘优先,所以重启后没有手动选择启动项,插入U盘后正常启动到了新版系统命令行,但ifconfig看不到网卡。

二、分析问题

       机器的网卡是Realtek RTL8168,之前一直运行稳定。用lspci -v命令查看可以看到正确的网卡信息,但未加载显示驱动。用dmesg | grep -i eth查看没有任何信息输出。期间走了一些弯路,一开始以为是镜像的驱动集成问题,又找了其他版本镜像问题依旧,这时候感觉应该不是镜像问题。

       回到原点,搜索了解dmesg的用途,知道dmesg命令会读取缓冲区中的信息,主要记录了包括内核初始化时的信息、系统调用的结果信息、设备的插拔信息等,所以网卡驱动的加载或者加载出错的信息在dmesg应该必须留痕,dmesg | grep -i eth找不到说明有问题。

       用笨方法一行行阅读dmesg返回信息,发现kmodloader: no module folders for kernel version 5.4.175这行比较醒目,想到之前搜索网卡驱动是kmod-r8168,这个kmodloader肯定是大大有关。搜索了解到kmodloader用于加载kmod,这时候才注意到5.4.175并非U盘中的新版本。反过来,注意dmesg信息第一行Linux version确实也是旧版本。kmodloader加载时到/lib/modules/目录中找是否有系统版本号命名目录,系统版本不匹配所以无法加载。

你可能感兴趣的:(网络设备,openwrt)