情况是这样的:我的 Debian 机器上有一个工作网络设置,有两个以太网接口报告ifconfig
- eth0 和 eth1。 eth0 是板载 Realtek 网卡,eth1 是 D-Link PCI 网卡。然而,声音在系统上不起作用。
遵循以下建议这一页, 我去了瑞昱的网站并下载了“适用于内核 3.x、2.6.x 和 2.4.x 的 LINUX 驱动程序”。我将其解压缩,并安装了必要的构建和 Linux 标头包后,我r8168-8.037.00/autorun.sh
以 root 身份运行。 经审查,我这里犯了一个很大的错误。 我点击了“Realtek PCIe GBE Family Controller Series Drivers”而不是“HD Audio Codec Driver”,因此我安装了他们的网络驱动程序而不是音频驱动程序。哎呀。无论如何,我现在正在寻找一种方法来挽回这个混乱。
似乎没有输出错误消息,但声音仍然不起作用,所以我重新启动了机器。当它再次出现时,ifconfig -a
现在只显示eth0
界面而不显示eth1
。另外,find /sys/devices/ -type d | grep eth
只返回给我eth0
设备,而不返回eth1
任何设备。也不dmesg | grep eth1
给出任何输出。不知何故,新的 Realtek 驱动程序已阻止eth1
被检测到!顺便说一句,声音仍然无法正常工作。
这是怎么发生的以及我该如何解决它?我想我将不得不生活在没有声音的情况下,但我想恢复我的工作eth0
和eth1
配置。如何让 Linuxeth1
重新检测到?
如果有帮助的话,它看起来可能已经安装了一些东西/lib/modules/3.2.0-4-amd64/kernel/drivers/net/ethernet/realtek
。例如,该r8168.ko
文件既位于src
我解压缩的驱动程序的目录中,又位于该/lib...
目录中。
答案1
不知何故,新的 Realtek 驱动程序阻止了 eth1 被检测到!
有点遗憾,因为显然树内内核驱动程序首先正在工作。为什么要安装新的?
如果界面显示ifconfig
,然后内核为网卡加载了驱动程序。 这并不一定意味着驱动程序能够完美地完成您计划使用它执行的任何操作,但在 99% 以上的情况下,它会。 Realtek 以太网芯片很常见,内核对它们有足够的支持。
它可能似乎就像“最好的”驱动程序是来自制造商的驱动程序,但我认为这实际上通常是不对。问题是制造商在 Linux 驱动程序上的投资很少或根本没有——无论是从它对他们的重要性来看(很少,因为 Linux 的市场份额微不足道),还是从他们为此投入多少资源来看。更远:
因为它们不是官方内核树的一部分,所以不直接参与实际的内核开发。这意味着,几乎任何小丑都可以做到这一点。它们不属于正常的审查和同行评审等范围。
因为它们是闭源的,所以没有人可以查看代码并说“这是错误的”等。因此,无论存在什么错误,都是隐藏的。如果出现问题,而制造商懒得花钱请人来妥善维护驱动器,那么没有其他人可以站到盘子上,因为盘子是出界的。
简而言之,没有对产品的监督,也没有提供产品的人员的承诺。 Linux 开发人员对此非常明确:最好使用的驱动程序是官方树内驱动程序,而不是专有驱动程序。 只有当内核自己的驱动程序不起作用时,您才应该开始寻找其他地方。
答案2
好吧,我设法修复了它,但它是一个真正的 PITA(Linux 迫切需要一个更成熟的驱动程序安装系统,并且具有内置的回滚功能)。就是这样:
cd /lib/modules/3.2.0-4-amd64/kernel/drivers/net/ethernet/realtek/
该目录有r8169.bak
和r8168.ko
。如果 Realtek 的安装程序只是删除了 r8169 而不是备份它,我就完蛋了。
/sbin/rmmod r8168
ifconfig -a
现在两者都eth0
消失eth1
了。
mv r8168.ko r8168.bak
mv r8169.bak r8169.ko
/sbin/depmod `uname -r`
/sbin/modprobe r8169
ifconfig -a
eth0
eth1
回来并开始工作。
综上所述; Linux 下的驱动安装和升级很糟糕。最好希望你的安装程序足够好,能够备份你以前的驱动程序,因为 Linux 基本上说“做你想做的事来安装新驱动程序”。应该调用一些服务来安装驱动程序,Linux 可以通过这些服务来跟踪以前的版本,以便可以回滚它们。