GNU/Linux >> Znalost Linux >  >> Linux

Jsou hlavní, vedlejší číslo jedinečné?

Jsou major, minor Číslo jedinečné?

Máme nějaké citace a odkazy na to?

NAME   MAJ:MIN RM   SIZE RO MOUNTPOINT
sda      8:0    0 465.8G  0 
├─sda1   8:1    0 298.2M  0 
├─sda2   8:2    0     3G  0 
├─sda3   8:3    0 458.7G  0 /
├─sda4   8:4    0     1K  0 
└─sda5   8:5    0   3.8G  0 
sr0     11:0    1  1024M  0 

Přijatá odpověď:

Z Linuxového programovacího rozhraní , §14.1

Každý soubor zařízení má hlavní ID číslo a vedlejší ID číslo. Hlavní ID identifikuje obecnou třídu zařízení a používá jej jádro k vyhledání vhodného
ovladače pro tento typ zařízení. Vedlejší ID jednoznačně identifikuje konkrétní zařízení
v rámci obecné třídy. Hlavní a vedlejší ID souboru zařízení se zobrazí pomocí příkazu
ls -l.

[…]

Každý ovladač zařízení registruje své přidružení k určitému hlavnímu ID zařízení a toto přidružení zajišťuje spojení mezi speciálním souborem zařízení a zařízením. Název souboru zařízení nemá žádný význam, když jádro hledá ovladač zařízení.

tj. záměrem je poskytnout jedinečné mapování major:minor to device:instance pro každý typ zařízení. Přesněji řečeno, můžete mít dvě různá zařízení se stejnou hlavní:vedlejší, pokud jedno je znak a druhé blok:

# ls -l /dev/ram1 /dev/mem
crw-r----- 1 root kmem 1, 1 Jan  1  1970 /dev/mem
brw-rw---- 1 root disk 1, 1 Jan  1  1970 /dev/ram1

V systému Linux kdykoli v jednom systému hlavní:vedlejší čísla pro každý typ zařízení jsou jedinečné. Čísla se však mohou v průběhu času měnit a nemusí být stejná na různých systémech Linux (dokonce i na stejné distribuci, jádře a hardwaru). Všimněte si, že znaková a bloková zařízení mají odlišné číslovací mezery, např. blok major 1 je přiřazen RAM diskům, char major 1 je přiřazen sadě jaderných zařízení včetně null a zero.

Historicky byly hlavní zařízení (většinou) staticky přidělené prostřednictvím registru (také stále přítomen, i když neudržovaný, ve zdrojovém kódu jádra Documentation/devices.txt ). V dnešní době je mnoho zařízení alokováno dynamicky, toto je spravováno udev a mapování lze zobrazit v /proc/devices . Pevná zařízení stále existují v incude/uapi/linux/major.h (nedávno přesunuto z include/major.h )

Nyní, ačkoli kombinace major:minor jedinečně identifikuje konkrétní instance zařízení, nic vám nebrání ve vytváření více uzlů zařízení (souborů), které odkazují na stejné zařízení. Nemusí být ani vytvořeny v /dev (ale musí být na souborovém systému, který podporuje vytváření uzlů zařízení a není připojen pomocí nodev možnost).

Běžným použitím je vytváření duplicitních nulových, nulových a náhodných zařízení v chrootu:

# find /dev /var/chroot -regextype posix-extended -regex ".*/(zero|null|random)" -type c | 
xargs ls -l
crwxrwxrwx 1 root root 1, 3 2012-11-21 03:22 /dev/null
crw-rw-r-- 1 root root 1, 8 2012-05-07 10:35 /dev/random
crw-rw-rw- 1 root root 1, 5 2012-11-21 03:22 /dev/zero
crwxrwxrwx 1 root root 1, 3 2012-11-21 03:22 /var/chroot/sendmail/dev/null
crw-rw-r-- 1 root root 1, 8 2012-05-07 10:35 /var/chroot/sendmail/dev/random
crw-rw-rw- 1 root root 1, 5 2012-11-21 03:22 /var/chroot/sendmail/dev/zero

Jména jsou jen aliasy, jádro se moc nestará o většinu jmen nebo umístění, stará se o hlavní číslo, aby mohlo vybrat správný ovladač, a ovladač (obvykle) se stará o vedlejší číslo, aby mohl vybrat správná instance.

Související:Učte se anglicky – Když je za číslem použito „silné“, odkazuje to na toto přesné číslo nebo na přibližné číslo?

Většina jmen je prostě konvence (ačkoli některá jsou definována POSIXem). Pamatujte také, že jedno zařízení se může zaregistrovat pro více hlavních čísel, zkontrolujte sd ovladač v /proc/devices; název modulu ovladače (.ko ) nemusí být stejný jako název zařízení a nemusí být stejný jako uzel zařízení v /dev a jeden modul ovladače může spravovat více logických/fyzických zařízení nebo názvů zařízení.

Pro rekapitulaci:můžete mít dva nebo více uzlů zařízení (v /dev/ nebo jinde), které mají stejná hlavní:vedlejší čísla, ale pokud jsou stejného typu, odkazují na stejné zařízení. Můžete mít jeden ovladač, který zvládne více hlavních instancí, ale v jádře a v ovladači je pro každý typ (znak nebo blok) číslo major:minor považováno za odkaz na konkrétní zařízení (hlavní) a konkrétní instanci ( minor) zařízení.

Nemůžete mít dva uzly zařízení stejného typu a major:minor a očekávat, že budou mít přístup ke dvěma různým logickým nebo fyzickým zařízením. Když se přistupuje k zařízení, jádro vybere jeden ovladač podle typu a hlavního čísla (a ne na základě názvu uzlu zařízení) a podle konvence vedlejší číslo deterministicky vybírá konkrétní instanci nebo podfunkci.

Aktualizovat Některou zajímavou historii a určitou *BSD perspektivu lze nalézt v BSDCon Poul-Henning Kampa z roku 2002 prezentace:https://www.usenix.org/legacy/events/bsdcon/full_papers/kamp/kamp_html/

Pokud se vrátíte v čase do roku 1978 (s laskavým svolením Alcatel-Lucent, Bell System Technical Journal červenec-srpen 1978) „Unixový systém sdílení času “ uvádí to jasně (str. 1937):

Zařízení jsou charakterizována hlavním číslem zařízení, vedlejším číslem zařízení a třídou (blok nebo znak). Pro každou třídu existuje řada vstupních bodů do ovladačů zařízení. Hlavní číslo zařízení se používá k indexování pole při volání kódu pro konkrétní ovladač zařízení. Číslo vedlejšího zařízení je předáno ovladači zařízení jako argument. Vedlejší číslo nemá žádný jiný význam než ten, který mu přisuzuje řidič. Obvykle ovladač používá vedlejší číslo pro přístup k jednomu z několika identických fyzických zařízení.


Linux
  1. Omezení počtu připojených klientů na VirtualHost v Apache

  2. Jak zvýšit počet inodů v souborovém systému Ext4?

  3. Praktický limit na počet snímků Btrfs?

  1. Linux – Tty hlavní číslo vašeho Unixu?

  2. Linux – Jak linuxové jádro zná hlavní a vedlejší čísla zařízení?

  3. Fedora vs Ubuntu:Jaké jsou klíčové rozdíly?

  1. Jak identifikovat hlavní a vedlejší číslo pro bloková zařízení v Unixu

  2. Číslo zařízení ve výstupu stat příkazu

  3. Jaké jsou rozdíly mezi hlavními distribucemi Linuxu? Všimnu si?