Περιφερειακά PCI, ISA, USB, PCMCIA, IEEE 1394

Εικόνα: markos
Submitted by markos on Τρι, 06/03/2007 - 03:14

Η διαχείριση των περιφερειακών συσκευών είναι επίσης ένα σημαντικό θέμα που θα σας απασχολήσει, ειδικά στην αρχή, όταν δηλαδή θα χρειαστεί να ρυθμίσετε τις συσκευές και να τις ενεργοποιήσετε στο Linux. Το Linux, όπως και κάθε λειτουργικό σύστημα, για να επικοινωνήσει με μια συσκευή χρειάζεται ένα ειδικό λογισμικό, τον οδηγό της συσκευής (device driver). Μετά την εγκατάσταση και για τις πρώτες εκκινήσεις, θα χρησιμοποιήσετε τον προκαθορισμένο πυρήνα του Debian που έχει υποστήριξη για τα περισσότερα είδη συσκευών που κυκλοφορούν στην αγορά. Κάποια στιγμή όμως, θα κατασκευάσετε τον δικό σας πυρήνα και τότε θα χρειαστεί να επιλέξετε προσεκτικά τους οδηγούς που θέλετε να φορτώσετε στον πυρήνα σας.

Το πρώτο βήμα για την επιλογή αυτή είναι η αναγνώριση των συσκευών του συστήματος σας. Αυτή η αναγνώριση πιθανόν να έγινε πριν την εγκατάσταση, αλλά υπάρχει περίπτωση να χρειαστεί να γίνει και μια δεύτερη, γιατί πιθανόν να έχει προστεθεί ή αφαιρεθεί υλικό από τον υπολογιστή σας. Για την ακρίβεια, με κάθε αλλαγή στο υλικό του υπολογιστή σας, θα πρέπει να ελέγχετε μήπως είναι απαραίτητη η κατασκευή νέου πυρήνα για την υποστήριξη του νέου υλικού.

Το βασικό υλικό όπως μνήμη και επεξεργαστής αναγνωρίζονται αυτόματα και δεν είναι απαραίτητο να κατασκευάσετε ξανά τον πυρήνα του υπολογιστή σας, αν αναβαθμίσετε ένα από τα δύο. Αν όμως αλλάξετε τη μητρική (motherboard) του υπολογιστή σας, είναι πιθανόν να χρειάζεται νέος πυρήνας για πλήρη υποστήριξη των χαρακτηριστικών της.

Τα περιφερειακά που αλλάζουν πιο συχνά είναι οι συσκευές PCI/AGP (σε παλαιότερους υπολογιστές ίσως και να υπάρχουν και συσκευές ISA), ενώ με την εμφάνιση των διαύλων USB και Firewire (IEEE 1394 ή i.Link) η σύνδεση αντίστοιχων περιφερειακών μπορεί να γίνεται πλέον κατά την διάρκεια λειτουργίας του υπολογιστή και πρέπει να υπάρχει ένας τρόπος για την ανίχνευσή τους.
Όσον αφορά τα περιφερειακά PCI και AGP, είδαμε ήδη έναν τρόπο ανίχνευσής τους κατά την εγκατάσταση, με την εντολή lspci (σελ. ). Η εντολή αυτή μας δίνει όλες τις συσκευές που είναι συνδεδεμένες στον δίαυλο PCI ή AGP του υπολογιστή. Σε αυτήν την περίπτωση αρκεί μόνο να επιλέξουμε τους αντίστοιχους οδηγούς στη ρύθμιση του πυρήνα για να έχουμε υποστήριξη και λειτουργία των συσκευών.

Συνήθως, η lspci θα μας δώσει κατευθείαν ένα όνομα της συσκευής, μοντέλο και κατασκευαστή, αλλά υπάρχει περίπτωση, π.χ. με μία ολοκαίνουρια συσκευή, να μην έχει ενσωμματωθεί ο οδηγός της για το Linux στον πυρήνα που έχετε εγκατεστημένο. Σε αυτήν την περίπτωση θα πρέπει ή να μεταφορτώσετε νέο πυρήνα (αφού ελέγξετε πρώτα για υπάρχουσα έκδοση στο ίδιο το Debian με την apt-cache) που πιθανόν να υποστηρίζει τη συσκευή αυτή ή να αναγνωρίσετε με κάποιον τρόπο τη συμβατότητά της με κάποια άλλη για την οποία ο πυρήνας έχει αντίστοιχο οδηγό.

Για την δεύτερη περίπτωση η lspci μπορεί να βοηθήσει δίνοντας τον κωδικό ταυτότητας της συσκευής.
Για παράδειγμα, μια νέα κάρτα οθόνης ATI που δεν έχει καταχωρηθεί ακόμη στις λίστες των συσκευών PCI του πυρήνα θα εμφανιζόταν ως εξής (σε αναλυτική μορφή με την επιλογή -v):

# lspci -v

00:00.0 Host bridge: ATI Technologies Inc: Unknown device cab0 (rev 13)
	Flags: bus master, 66Mhz, medium devsel, latency 64
	Memory at f4000000 (32-bit, prefetchable) [=64M]
	Memory at f0800000 (32-bit, prefetchable) [=4K]
	I/O ports at a010 [disabled] [=4]
	Capabilities: [a0] AGP version 2.0

Παρόμοια πληροφορία μπορούμε να λάβουμε χρησιμοποιώντας το εικονικό σύστημα αρχείων /proc και συσκεκριμένα το αρχείο /proc/pci και τον κατάλογο /proc/bus/pci. Ο κατάλογος /proc/bus/pci περιέχει όλο το δέντρο των συσκευών στους αντίστοιχους διάυλος (PCI ή AGP) αλλά τα δεδομένα των αρχείων είναι σε δυαδική μορφή και θα χρειαστείτε ειδικό λογισμικό για να χρησιμοποιήσετε την πληροφορία που περιέχουν. Αντίθετα το αρχείο /proc/pci είναι μια λίστα όλων των συσκευών PCI και AGP που είναι συνδεδεμένες στο σύστημα:

# cat /proc/pci
PCI devices found:
  Bus  0, device   0, function  0:
    Host bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 3).
      Master Capable.  Latency=64.
      Prefetchable 32 bit memory at 0x40000000 [0x40ffffff].
  Bus  0, device   1, function  0:
    PCI bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 3).
      Master Capable.  Latency=128.  Min Gnt=140.
  Bus  0, device   7, function  0:
    ISA bridge: Intel Corp. 82371AB/EB/MB PIIX4 ISA (rev 2).
  Bus  0, device   7, function  1:
    IDE interface: Intel Corp. 82371AB/EB/MB PIIX4 IDE (rev 1).
      Master Capable.  Latency=64.
      I/O at 0xfcb0 [0xfcbf].
...

Η lspci μπορεί να επιστρέψει και μια λίστα κωδικών των συσκευών για χρήση κυρίως αναζήτησης σε ειδικές βάσης δεδομένων, με την επιλογή -n:

# lspci -n
00:00.0 Class 0600: 8086:7190 (rev 03)
00:01.0 Class 0604: 8086:7191 (rev 03)
00:07.0 Class 0601: 8086:7110 (rev 02)
00:07.1 Class 0101: 8086:7111 (rev 01)
00:07.2 Class 0c03: 8086:7112 (rev 01)
00:07.3 Class 0680: 8086:7113 (rev 03)
00:08.0 Class 0c00: 104d:8039 (rev 02)
00:09.0 Class 0401: 1073:0010 (rev 02)
00:0a.0 Class 0780: 14f1:2443 (rev 01)
00:0b.0 Class 0200: 8086:1229 (rev 08)
00:0c.0 Class 0607: 1180:0475 (rev 80)
01:00.0 Class 0300: 1002:4c4d (rev 64)

Μια αναζήτηση στο Google με τον κωδικό 14f1:2443, θα μας δείξει γρήγορα ότι η συσκευή αυτή είναι ένα WinModem HSF της Conexant, οπότε γνωρίζουμε ποιον οδηγό πλέον θα χρειαστούμε (βλ. http://www.linmodems.org και http://www.linuxant.com).

Όσον αφορά τις συσκευές ISA, το Debian παρέχει ορισμένα εργαλεία για την ενεργοποίησή τους, τις isapnptools και sndconfig (ειδικά για ενεργοποίηση καρτών ήχου σε ISA). Δε θα ανεφερθούμε περισσότερο στο πρωτόκολλο αυτό, καθώς θεωρείται ξεπερασμένο.

usbview
Για τις συσκευές USB, μπορούμε να χρησιμοποιήσουμε ένα από τα πακέτα usbview ή usbutils που παρέχει μια αντίστοιχη με την εντολή lspci, την lsusb. Με την εντολή αυτή μπορούμε να μάθουμε αντίστοιχα ποιες συσκευές USB έχουμε συνδεδεμένες και να αναζητήσουμε, όπως και στην περίπτωση των συσκευών PCI, τους αντίστοιχους οδηγούς. Η usbview προσφέρει ένα γραφικό περιβάλλον σε παρόμοιες πληροφορίες με την lsusb. Για τη λειτουργία όλων αυτών των πακέτων είναι απαραίτητη η χρήση ενός πυρήνα 2.4.x και η ενεργοποίηση του εικονικού συστήματος αρχείων usbfs, καθώς οι εντολές αυτές δεν κάνουν άλλο από την ερμηνεία των δεδομένων που ήδη προσφέρει ο πυρήνας μέσω του usbfs, στον κατάλογο /proc/bus/usb. Για την ενεργοποίηση του usbfs θα πρέπει να προσθέσετε και την ακόλουθη καταχώρηση στο αρχείο /etc/fstab:

none     /proc/bus/usb   usbfs        defaults         0       0

αμέσως μετά την κατάχώρηση για το procfs.

Με ενεργοποιημένο το usbfs, η εκτέλεση της lsusb θα μας επιστρέφει ένα αποτέλεσμα της μορφής:

# lsusb
Bus 001 Device 001: ID 0000:0000
Bus 001 Device 002: ID 04cc:1122 Philips Semiconductors Hub
Bus 001 Device 008: ID 054c:0032 Sony Corp. MemoryStick MSC-U01 Reader
Bus 001 Device 003: ID 04b4:6560 Cypress Semiconductor Corp.
Bus 001 Device 004: ID 0557:2008 ATEN International Co., Ltd UC-232A Serial Port [pl2303]
Bus 001 Device 005: ID 057b:0000 Y-E Data, Inc. FlashBuster-U Floppy
Bus 001 Device 006: ID 0bf1:0001 Intracom S.A.
Bus 001 Device 007: ID 03f0:1a11 Hewlett-Packard

Με τον ίδιο τρόπο μπορούμε να διαχειριστούμε περιφερειακά που συνδέονται στη θύρα PCMCIA. Λόγω παλαιότερης αρχιτεκτονικής και τα εργαλεία είναι παλαιότερης φιλοσοφίας. Αν είχατε επιλέξει την υποστήριξη PCMCIA κατά την εγκατάσταση (σελ. ) τότε θα έχει εγκατασταθεί το πακέτο pcmcia-cs που περιέχει τα κατάλληλα εργαλεία για την διαχείριση των συσκευών αυτών. Πληροφορίες για την κατάσταση των υποδοχών PCMCIA (Slots ή Sockets) μπορούμε να λάβουμε με την εντολή cardctl:

# cardctl status
Socket 0:
  5V 16-bit PC Card
  function 0: [ready]

ή με το γραφικό πρόγραμμα cardinfo.

Και για τις συσκευές PCMCIA, ο πυρήνας παρέχει έναν κατάλογο με περιορισμένες πληροφορίες στο /proc/bus/pccard. Οι εντολές όμως cardctl και cardinfo παρέχουν σαφώς πιο ολοκληρωμένη διάγνωση της κατάστασης του διαύλου PCMCIA.

Οι συσκευές Firewire ή IEEE 1394 ή i.Link, ακολουθούν το παράδειγμα των συσκευών USB, χωρίς όμως να χρειάζονται ειδικό εικονικό σύστημα αρχείων. Δεν υπάρχει εντολή αντίστοιχη της lsusb, μόνο ένα γραφικό περιβάλλον (gscanbus) που εμφανίζει τις αντίστοιχες συσκευές και τη συνδεσμολογία τους και ο κατάλογος /proc/bus/ieee1394. Ο κατάλογος αυτός προς το παρόν περιέχει μόνο ένα αρχείο, το devices που παρουσιάζει μια αναλυτική περιγραφή των συσκευών που είναι συνδεδεμένες στη θύρα Firewire.

# cat /proc/bus/ieee1394/devices
Node[00:1023]  GUID[0800460300bad042]:
  Vendor ID: `Linux OHCI-1394' [0x000000]
  Capabilities: 0x0083c0
  Bus Options:
    IRMC(1) CMC(1) ISC(1) BMC(0) PMC(0) GEN(0)
    LSPD(2) MAX_REC(2048) CYC_CLK_ACC(0)
  Host Node Status:
    Host Driver     : ohci1394
    Nodes connected : 3
    Nodes active    : 2
    SelfIDs received: 4
    Irm ID          : [00:1023]
    BusMgr ID       : [00:1023]
    In Bus Reset    : no
    Root            : no
    Cycle Master    : no
    IRM             : yes
    Bus Manager     : yes
Node[01:1023]  GUID[0010b920003d7ae3]:
  Vendor ID: `Maxtor' [0x0010b9]
  Capabilities: 0x0083c0
  Bus Options:
    IRMC(0) CMC(0) ISC(0) BMC(0) PMC(0) GEN(2)
    LSPD(2) MAX_REC(64) CYC_CLK_ACC(255)
  Unit Directory 0:
    Vendor/Model ID: Maxtor [0010b9] / 1394 Storage Front Panel* [005000]
    Software Specifier ID: 0010b9
    Software Version: ceb001
    Length (in quads): 5
  Unit Directory 1:
    Vendor/Model ID: Maxtor [0010b9] / 5000DV  v1.00.00 [005000]
    Software Specifier ID: 00609e
    Software Version: 010483
    Driver: SBP2 Driver
    Length (in quads): 11

Οι πληροφορίες αυτές είναι πολύ τεχνικές για να ενδιαφέρουν οποιονδήποτε άλλον πέρα από προγραμματιστές του πυρήνα του Linux. Το πρόγραμμα gscanbus προσφέρει μια σαφώς πιο φιλική εικόνα της συνδεσμολογίας των συσκευών αυτών.

Στο σημείο αυτό πρέπει να αναφέρουμε ότι με τη σύνδεση μιας συσκευής USB, Firewire, κλπ κατά την διάρκεια της λειτουργίας του υπολογιστή, θα πρέπει να φορτώνουμε τις λογισμικές μονάδες οδηγών (driver modules) χειροκίνητα, εκτός αν είναι ενσωματωμένες στον πυρήνα. Επειδή η ενσωμάτωση όλων των οδηγών στον πυρήνα είναι τακτική που γενικά αποτρέπεται, έχουν κατασκευαστεί προγράμματα που αναλαμβάνουν να ανιχνεύουν οποιαδήποτε συσκευή συνδεθεί σε μία από αυτές τις θύρες και ταυτόχρονα φορτώνουν τον σωστό οδηγό. Από τους hotplug managers, όπως λέγονται, ο πιο πλήρης είναι ο murasaki καθώς υποστηρίζει όλα τα πρωτόκολλα (PCI, Ethernet, PCMCIA, USB, Firewire) και είναι εύκολος στην ρύθμισή του. Εναλλακτικά το Debian προσφέρει το λογισμικό usbmgr και hotplug που έχει παρόμοια λειτουργία με το murasaki.

Χρήσιμα πακέτα: gscanbus, usbview, usbmgr, usbutils, isapnptools, sndconfig, hotplug, murasaki.