31.2. Descrizione dettagliata della tecnologia PCMCIA

Nelle sezioni seguenti viene illustrato il comportamento del sistema Linux quando si collega un dispositivo PCMCIA al computer in uso. I componenti interagiscono tra di loro. Per supportare un dispositivo PCMCIA, è necessario soddisfare molti requisiti.

Di seguito è illustrato brevemente il processo di inizializzazione PCMCIA in Linux:

  1. È necessario configurare correttamente il bridge o il socket PCMCIA, come descritto riportato nella Sezione 31.2.1, "Inizializzazione del bridge". È necessario soddisfare i prerequisiti seguenti:

    • driver appropriato per il bridge

    • intervalli I/O e di memoria aggiuntivi per PC card

  2. Dopo che il bridge è stato configurato correttamente, il relativo driver rileva la presenza di una scheda e ne attiva l'inizializzazione, come illustrato nella Sezione 31.2.2, "Inizializzazione della scheda":

    1. Determinare il tipo di scheda.

    2. Fornire la tensione appropriata.

    3. Assegnare alla scheda gli intervalli I/O e di memoria e le linee IRQ.

    4. Viene attivata l'inizializzazione della scheda o del dispositivo mediante l'associazione al driver della scheda appropriata.

    5. Per alcune schede è necessario scaricare la struttura CIS (Card Information Structure).

  3. Al termine l'interfaccia stessa è configurata e pronta per l'uso. Per ulteriori dettagli, vedere la Sezione 31.2.3, "Configurazione dell'interfaccia".

31.2.1. Inizializzazione del bridge

I bridge PCMCIA sono prevalentemente dispositivi PCI e vengono considerati come tali. Il processo di inizializzazione bridge può essere riepilogato nel modo seguente:

  1. Hotplug crea un evento PCI.

  2. udev chiama /sbin/hwup per caricare il driver. /sbin/hwup verifica se in /etc/sysconfig/hardware è disponibile una configurazione esistente. In caso affermativo, viene utilizzata questa configurazione. In caso negativo, /sbin/hwup chiama modprobe con la stringa modalias fornita dal kernel per caricare il modulo del driver.

  3. Vengono quindi inviati i nuovi eventi hotplug, uno per ogni socket PCMCIA.

  4. I seguenti passaggi vengono ignorati solo se si utilizzano le schede CardBus:

    1. Gli eventi pcmcia_socket comportano la chiamata di /sbin/hwup da parte di udev e il caricamento del modulo del kernel pcmcia.

    2. Tutti gli intervalli I/O e di memoria specificati in /etc/pcmcia/config.opts vengono aggiunti al socket.

    3. I servizi delle schede nel kernel controllano questi intervalli. Se gli intervalli di memoria inclusi in /etc/pcmcia/config.opts non sono corretti, può verificarsi un crash del sistema. Per informazioni sulle modalità di debug e di risoluzione di questo problema, vedere la Sezione 31.3.1, "Crash del computer all'avvio di PCMCIA".

Dopo aver completato questi passaggi, viene inizializzato il bridge e quindi la scheda stessa come illustrato nella sezione seguente.

31.2.2. Inizializzazione della scheda

L'inserimento di una scheda PCMCIA provoca la generazione degli eventi riportati di seguito.

  1. Si verifica un evento hotplug che, nel caso di PC card, corrisponde a un evento pcmcia, mentre per le schede CardBus equivale a un evento pci.

  2. Per tutti gli eventi udev chiama /sbin/hwup per caricare un modulo del driver. Il nome del modulo è specificato in un file hwcfg* nella directory /etc/sysconfig/hardware oppure via modprobe modalias.

  3. Se necessario, l'inizializzazione del dispositivo genera un evento hotplug a livello firmware che comporta la ricerca e il caricamento del firmware.

  4. Il driver del dispositivo registra le interfacce.

Al termine di questi passaggi, viene avviata la configurazione dell'interfaccia, come illustrato nella sezione seguente.

Se la scheda è di tipo PC card, può essere necessario utilizzare i parametri seguenti, disponibili in /etc/sysconfig/pcmcia, per garantire il totale supporto e il corretto funzionamento:

PCMCIA_LOAD_CIS

Un firmware della PC card viene indicato come CIS (Card Information Structure). e fornisce dettagli aggiuntivi sull'implementazione della scheda. hwup verifica l'integrità della CIS incorporata nella scheda e, se la struttura CIS è difettosa, prova a caricarne un'altra dal disco. L'impostazione predefinita è yes. Per disabilitare il caricamento della CIS dal disco, impostare la variabile su no.

PCMCIA_ALLOW_FUNC_MATCH

I driver dei dispositivi Linux contengono una tabella degli ID di dispositivi che indicano ai driver i dispositivi da gestire. Ciò significa che vengono supportati solo i dispositivi i cui ID sono noti al kernel. Per supportare le schede i cui ID non sono inclusi nella tabella, è possibile utilizzare la corrispondenza funzioni. In questo caso, il driver viene selezionato dalla funzione della scheda (ad esempio una scheda di rete) anziché dall'ID e controllerà tutte le PC card inserite mediante questa funzione, ad esempio le schede di rete. L'impostazione predefinita è yes. Per disabilitare la corrispondenza funzioni, impostare la variabile su no.

PCMCIA_COLDPLUG_REINSERT

Poiché le schede inserite prima dell'avvio a volte non vengono rilevate, per evitare che ciò accada è possibile attivare una rimozione e un inserimento software della scheda. A questo scopo, impostare PCMCIA_COLDPLUG_REINSERT su yes. L'impostazione predefinita è no.

31.2.3. Configurazione dell'interfaccia

Al termine del processo di inizializzazione, vengono registrate diverse interfacce in base al tipo di scheda. La registrazione dell'interfaccia viene gestita da hotplug di udev. Per informazioni dettagliate su udev e hotplug, vedere il Capitolo 12, Gestione dei dispositivi dinamici del kernel con udev.