硬件检测如何在 linux 中工作?

les*_*nik 6 pci udev dmesg

每当我必须解决 linux 中的“wifi 无法正常工作”、“视频无法正常工作”等问题时,我真的不明白如何正确执行。我的方法很混乱:尝试lspci,查看dmesg,查看一些日志,谷歌,希望你能找到解决方案。我真正想要的是了解正在发生的事情并能够追踪整个路径并找出什么时候出了问题。

假设wifi坏了。

我跑去lspci看看我的电脑里有什么样的网卡。通常我可以在lspci的输出中看到与 wifi 相关的内容。这个“东西”包括我的卡的名称和型号。但它是如何工作的?此命令是否仅列出先前由其他设备成功发现的设备(可能是 udev?)它从何处获取设备的名称/描述?它是否存储在硬件内部的某个地方?lspci如果前面的步骤出现问题,是否有可能不会报告我的硬件?

现在我需要了解我的硬件是否存在合适的内核模块。我所做的是进入内核源代码,运行make menuconfig并搜索我的硬件名称。这是否意味着内核必须知道地球上所有的网卡型号?这看起来很奇怪,因为这样的模型太多了。我猜所有的网卡都应该有类似的接口,它们之间有什么不同,以至于需要为不同类型的网卡配备不同的模块?

有没有更好的方法来为我的卡找出合适的内核模型?找到的模块编译安装后卡还是不能用怎么办?我如何确保模块是正确的(这意味着问题发生在某些后期阶段)?

现在我运行ifconfigiwconfig. 这些命令显示网络接口。如果我在结果中看到wifi接口,是否意味着内核成功检测到硬件并创建了接口,以便其他程序现在可以使用它?是不是说明现在的问题更高级了(比如密码错误或者smthn之类的)?

/dev/目录的内容能否以某种方式帮助我了解出了什么问题(或确保某些事情肯定是正确的)?

对不起,如果这个问题看起来很乱,它反映了我脑子里的混乱。请帮我摆脱这个烂摊子。