Pokud vím, jádro detekuje hardware, přidá informace do sysfs, vytvoří zařízení v /dev a poté vygeneruje událost udev. Moje otázka zní, dělají to vše ovladače zařízení nebo je to samotné jádro? Pokud to ovladače udělají, budou znát hlavní a vedlejší číslo zařízení pro vytvoření souboru v devtmps.
Také chápu (možná špatně), že je to udev, kdo volá modprobe, aby nahrál ovladače, které obsluhují zařízení.
Bylo mi řečeno, že tak činí s obsahem proměnné prostředí uevent MODALIAS, čímž se načítají všechny moduly, jejichž aliasy odpovídají tomuto řetězci (správnému ovladači). Stručně řečeno:jaké jsou kroky detekce hardwaru v linuxu a WHO každý krok provádí:samotné jádro, ovladač uvnitř jádra nebo udev v uživatelském prostoru. Děkuji.
Přijatá odpověď:
Jádro zná čísla zařízení, protože rozhoduje o číslech zařízení. Každý ovladač registruje čísla zařízení, která spravuje. Čísla jsou buď pevně zakódována ve zdrojovém kódu, nebo v některých případech přidělována dynamicky. Souborový systém sysfs umožňuje aplikacím, jako je udev, objevit zařízení podporovaná jádrem. Viz Jak udev získává čísla zařízení pro zařízení, která vytváří? pro více podrobností.
Inicializační kód ovladače zjišťuje hardware a registruje zařízení podle toho, jaký hardware našel během testování. Některé typy hardwaru nepodporují sondování; například sběrnice ISA (z velké části zastaralá sběrnice na počítačích typu PC) neposkytuje žádný způsob, jak vypsat připojený hardware, takže se řidič může pouze pokusit komunikovat a modlit se, aby na stejné adrese nebyla připojena jiná periferie. Na některých platformách zavaděč obsahuje strom zařízení popisující dostupná periferní zařízení a jejich mapování a linuxové jádro na základě těchto informací aktivuje ovladače. Ovladač pro periferní zařízení lze načíst třemi způsoby.
- Ovladač může být součástí obrazu jádra.
- Ovladač může být zkompilován jako modul a načten explicitně (např. jeho zahrnutím do
/etc/modules
nebo v initramfs). - Existuje mechanismus pro automatické načítání určitých ovladačů na základě informací hlášených typy sběrnic, které mohou uvést připojená periferní zařízení spolu s univerzálním identifikačním číslem, jako je PCI (hlavní sběrnice v moderních počítačích) a USB. V jádře běží
modprobe
a předá mu symbolický název, který zakóduje identifikaci periferie, což je alias pro „skutečné“ jméno modulu ovladače. Viz Jsou moduly ovladače zaváděny a odebírány automaticky?