Как работает обнаружение оборудования в Linux?

Как работает обнаружение оборудования в Linux?

Всякий раз, когда мне приходится устранять неполадки типа "wifi не работает", "видео не работает" и т. д. в Linux, я действительно не понимаю, как это правильно делать. Мой подход беспорядочный: пробовать lspci, искать dmesg, смотреть в какие-то логи, гуглить и, надеюсь, вы найдете решение. На самом деле я хочу понять, что происходит, и иметь возможность проследить весь путь и выяснить, когда именно что-то идет не так.

Допустим, Wi-Fi сломался.

Я бегу lspci, чтобы узнать, какая сетевая карта установлена ​​на моем компьютере. Обычно я вижу что-то, связанное с Wi-Fi, в lspciвыводе . Это «что-то» включает в себя имя и модель моей карты. Но как это работает? Эта команда выводит список только устройств, которые ранее успешно были обнаружены чем-то другим (может быть, udev?) Где она берет имя/описание устройства? Хранится ли оно где-то внутри оборудования? Возможно ли, что это lspciне сообщит о моем оборудовании, если что-то пошло не так на предыдущих шагах?

Теперь мне нужно понять, присутствует ли соответствующий модуль ядра для моего оборудования. Я захожу в исходники ядра, запускаю make menuconfigи ищу имя моего оборудования. Означает ли это, что ядро ​​должно знать обо всех моделях сетевых карт на Земле? Это кажется странным, потому что таких моделей слишком много. Я полагаю, что все сетевые карты должны иметь похожие интерфейсы, что же между ними такого разного, что делает необходимым иметь разные модули для разных типов карт?

Есть ли лучший способ узнать подходящую модель ядра для моей карты? Что делать, если даже после компиляции и установки найденного мной модуля карта все еще не работает? Как убедиться, что модуль правильный (это будет означать, что проблема возникает на более поздних этапах)?

Теперь я запускаю ifconfigили iwconfig. Эти команды отображаютсетевые интерфейсы. Если я вижу интерфейс Wi-Fi в результате, означает ли это, что ядро ​​успешно обнаружило оборудование и создалоинтерфейстак что другие программы теперь могут его использовать? Означает ли это, что проблема теперь более высокого уровня (например, неправильный пароль или что-то в этом роде)?

Может ли содержимое /dev/каталога помочь мне как-то понять, что идет не так (или убедиться, что что-то определенно идет правильно)?

Извините, если этот вопрос выглядит сумбурным, он отражает беспорядок в моей голове. Пожалуйста, помогите мне избавиться от этого беспорядка.

Связанный контент