Linux apparaten
De volgende informatie is niet noodzakelijk voor beginners, maar gewoon
achtergrond informatie over de mysterieuze directory "/dev".
Nieuwschierig? Lees verder; alle andere gebruikers zouden deze lokatie
moeten onthouden, deze kan later nodig zijn. ;-).
Major en Minor Device nummers
Onder Linux zijn we eerder geneigd om bij apparaten (devices) eerder te denken aan hun naam, zoals /dev/hda, dan aan hun major en minor nummers (in dit geval block-major 3, minor 1).
Maar zo af en toe zijn de major/minor nummers nodig, terwijl wij ons afvragen om welk device het nu gaat. Zo ga een recente melding in /var/log/messages een probleem aan met block-major-97. Hoe weten we waar hier aan wordt gerefereerd?
Als je de kernel documentatie geïnstalleerd hebt, is het antwoord niet verder weg dan /usr/src/linux/Documentation/devices.txt en als die niet geïnstalleerd is, kun je een versie van December 2000 vinden op LinuxHQ: http://www.linuxhq.com/kernel/v2.4/doc/devices.txt.html. Deze lijst wordt door niemand minder dan H. Peter Anvin beheerd, bekend van SYSLINUX.
De lijst bevat block devices en character devices. Hierin is interessante informatie te vinden en kan een of twee problemen voor je oplossen.. (hd)
Alles is een bestand
De UN*X bestandsstructuur bestaat al langere tijd (het is ouder dan MsWin) en is goed over nagedacht. Alles je leest of schrijft op een UN*X systeem, gaat via een bestand. Dit begint met normale bestanden ;) en strekt zich uit tot partities, harde schijven, alle andere massa-opslag apparaten en zelfs de terminals en netwerk apparaten; zelfs daar is er geen einde in zicht.
Maar waarom? Omdat het zo makkelijk is! Voorbeeld: hoe verander je de boot sector van de tweede partitie met een Pascal of C programma onder DOS. Er is natuurlijk ergens een API met veel functies en in het ergste geval moet je het zelf aanpassen met Assembler. Met Linux gaat het zo (in pseudo code):
open(HDD, "/dev/hdb2"); print(HDD, "Deze tekst wordt in de boot sector van de partitie geschreven"); close(HDD);
Als je geen schrijf permissies voor de partie hebt, krijg je een "access denied" (al zou dit voorbeeld geen nut hebben als je wel toegand had!). Op dezelfde manier kun je het seriële apparataat openen: je opent '/dev/sttyS1' (COM2 onder DOS) als een bestand en dan kun je ervan lezen en ernaar schrijven.
De harde schijf/partitie is ook een bestand. Op dezelfde manier waarop terminals werken, werken ook de console- en X-terminal, CHARACTER DEVICES (terminals, seriële poorten, alle niet-opslag" apparaten), enz.
Hoe gaat Linux om met deze "speciale bestanden" en hoe worden ze gemaakt en ge&ium;plementeerd? Ieder bestand in '/dev' (ze hoeven niet per se hier te staan, maar kunnen ook elders voorkomen) heeft 2 nummers, in plaats van een grootte, een major en een minor nummer. Deze zie je als in de directory kijkt met:
>> ls -l /dev
De namen van de bestanden zijn niet belangrijk -- waarvoor ze gebruikt worden, is afhankelijk van de nummers die ze representeren. Deze zijn gedetailleerd beschreven in de documentatie van de kernel, vooral in het bestand ` file:/usr/src/linux/Documentation/devices.txt'. Deze apparaten kunnen (opnieuw) gemaakt worden met het script 'MAKEDEV', deze kun je vinden in '/dev'. Het is gedocumenteerd in de broncode.
Iedereen die per ongeluk zijn '/dev' directory heeft verwijderd, is blij dat het bestaat.
Iedere hardware component die wordt ondersteund door Linux heeft zijn
eigen device nodig. Door de grote hoeveelheid ondersteunde apparaten, is
de '/dev' directory goed gevuld.
Voor een overzicht van deze collectie kun je het volgende gebruiken:
>> ls -l /dev/ | less
In het volgende deel geven we een korte lijst van enkele belangrijke apparaten:
- /dev/mem
Dit device handeld iedere toegang tot het geheugen af. - /dev/null
Alles wat in dit apparaat komt, verdwijnt. Alle bestanden worden verwijderd. Dit appraat kan erg handig zijn om debug berichten te onderdrukken. Als je een programma hebt met ongewenste meldingen, volstaat een simpele>> program > /dev/null
om alle (fout-)uitvoer van het programma te onderdrukken. - /dev/zero
/dev/zero is het tegenovergestelde van /dev/null. Als je een bestand met nullen wilt, /dev/zero is een onuitputtelijke bron. - /dev/random
geeft random (willekeurige) nummers. Als een programma random nummers nodig heeft, kan het dit apparaat gebruiken in plaats van een zelf een algorithme te bouwen. - /dev/urandom
geeft random nummers, net zoals /dev/random, maar met een slechtere distributie. Aan de andere kant is het sneller. - /dev/ram
geeft teogang tot de snelle RAM disk. Dit is een "partitie" die zich in het geheugen bevindt, in plaats van op een fysiek medium; de inhoud ervan gaat verloren als de computer wordt uitgeschakeld.
Een mogelijke snelheidswinst is te verwaarlozen omdat Linux alle lees-en-schrijf benaderingen van de harde schijf cached in het geheugen (en de data pas later wegschrijft).
Meestal is een RAM device niet nodig (als je er een wilt gebruiken, moet je dit eerst activeren in de kernel), maar het kan disk i/o van een floppy of CD-ROM versnellen. - /dev/fd0
verwijst direct naar je eerst floppy drive. Het formaat van de diskette (DD of HD) wordt automatisch gedetecteerd. De tweede floppy drive heeft het apparaat /dev/fd1. - /dev/hda
verwijst naar het eerste massa-opslag apparaat dat (als master) is aangesloten op de de eerste IDE poort (iedere harde schijf of CD-ROm apparaat). - /dev/hdb
komt overeen met de slave op de eerste IDE poort. - /dev/hd?1 - /dev/hd?63
Als je toegang tot een bepaalde partitie wilt, in plaats van de hele harde schijf, gebruik je deze via het nummer 1 tot 62.
De nummer 1 tot 4 komen overeen met de primaire partities en de overige logische partities krijgen het nummer 6 tot 63. - /dev/lp0
Dit is de printer die is verbonden met de eerste parallele poort. - /dev/loop0
is een pseudo netwerk apparaat dat programma's in staat stelt te praten met het IP adres 127.0.0.1. - /dev/sda
eigenaars van SCSI harde schijven benaderen deze op dezelfde manier als de IDE eigenaren, maar dan via /dev/sda tot /dev/sdp (tot en met 16 SCSI apparaten worden ondersteund). - /dev/psaux
is een apparaat dat de data krijgt van de PS/2 muis. - /dev/mouse
krijgt de data van een seriële muis. - /dev/rtc
Dit device wijst naar een realtime clock (moet eerst in de kernel zijn geactiveerd). - /dev/sr0
is een apparaat dat praat met SCSI-CD-Rom drives. De andere CD-Rom apparaten krijgen de bestanden /dev/sr1 en zo verder. Soms kun je het device bestand /dev/scd aantreffen in plaats van /dev/sr. - /dev/js0
Als je een analoge joystick hebt en de drivers in de kernel hebt opgenomen, kun je dit bestand gebruiken om ermee te praten. De tweede joystick zit achter /dev/js1. - /dev/ippp0
Een ISDN kaart kan gebruikt worden voor tranmissies met het syncPPP protocol. Je kunt er mee praten via het device /dev/ippp0. - /dev/pda - /dev/pdd
Als je een IDE schijf op de parallel poort wil gebruiken (bijvoorbeeld op een laptop), kun je deze benaderen via het apparaat /dev/pda (eerste parallele poort) tot /dev/pdd (de vierde parallele poort). - /dev/video0
Je kunt ook een TV kaart gebruiken met Linux. Je kunt de plaatjes vinden via /dev/video0. - /dev/vtx
Als de TV kaart een Teletext decoder heeft, kun je /dev/vtx gebruiken. - /dev/vttuner
Om het kanaal van de TV te veranderen, praat je met de tuner van de TV kaart. - /dev/parport0
De parallele poort kun je uitlezen en naar schrijven via /dev/parport (bijvoorbeeld om met een stuk hardware te praten. Moet worden ingesteld in VmWare). De tweede parallele poort gebruikt /dev/parport2. - /dev/ttyS0 tot /ttyS61
Voor hardware die is verbonden met de seriële poort of om een SLIP connectie op te zetten, gebruik je de ttyS? devices. Tot 61 seriële verbindingen zijn beschikbaar. - /dev/3dfx
Met dit apparaat kun je de 3Dfx kaart en diens acceleratie benaderen, al zijn de juiste drivers aanbevolen.
Delen van deze tekst zijn gebaseerd op de Linux USER FAQ, vriendelijk onder onze aandacht gebracht door Jens Benecke, een van de auteurs van de FAQ.
Links
Homepage van de auteur:
http://www.jensbenecke.de
Linux USER FAQ (Duitse Versie):
http://www.linuxfaq.de