Iade Gesso

Sito Ufficiale


Tag cloud completa


Intero sito
rss atom
Blog
rss atom
MotorBlog
rss atom
Pubblicazioni
rss atom
Software
rss atom

Driver ppscsi 0.92 - Patch per kernel 2.6.27 e superiori

Questo lavoro è consistito nel modificare i sorgenti di questo set di driver per Linux, in modo da renderli compatibili con le nuove versioni del kernel (a partire dalla versione 2.6.27), nelle quali  sono state modificate, rimosse e sostituite alcune funzioni dello stack SCSI.

Il lavoro si rivolge a coloro i quali dispongano ancora di uno scanner su porta parallela, compreso tra quelli supportati da ppscsi (io ho un glorioso scanner HP ScanJet 5100C), e non hanno intenzione di rottamarlo perchè funziona ancora alla perfezione. Per i più impazienti, ecco un link alla soluzione di questo problema, mentre per i più curiosi di seguito è riportata la storia di questo mio piccolo successo personale.

Breve storia

Il mio interesse verso questo set di driver ha origine nel momento in cui, stufo della lentezza intrinseca a Windows (per vincoli hardware mi trovavo ad utilizzare Windows XP) ed allettato dalla crescente stabilità e usabilità mostrata da Ubuntu, ho deciso di abbandonare il sistema della casa di Redmond in favore del sistema del pinguino Tux (ai tempi iniziai installando Ubuntu 7.10, che venne quasi subito aggiornato con la nuova e ottima versione 8.04 LTS).

A questo punto è stato inevitabile scontrarsi con qualche problema di driver e, se per alcuni casi si è trattato banalmente di operare semplici variazioni ai file di configurazione, nel caso del driver del mio scanner, la soluzione passava attraverso la compilazione e l'installazione di un paio di moduli aggiuntivi per il kernel, piuttosto che per l'applicazione di una patch ai sorgenti stessi del kernel: è appunto il caso del driver ppscsi, che prevede entrambe le possibilità.

Purtroppo, però, il pacchetto presente nei repository di Ubuntu 8.04 non portava a termine correttamente la compilazione, rendendo di fatto impossibile l'utilizzo dello scanner. Infatti, le prime modifiche allo stack SCSI erano già iniziate a comparire dalla versione 2.6.24 del kernel, per l'appunto la versione presente in Ubuntu 8.04. Il pacchetto fornito nel repository, per contro, non aveva subito un processo di testing e, di conseguenza, di aggiornamento. In mio aiuto, nonostante ciò, è venuto un articolo presente nel forum ufficiale di Ubuntu, relativo allo scanner in mio possesso ([all variants] HP Scanjet 5100C / ppscsi in Hardy - http://ubuntuforums.org/showthread.php?t=782242). Le modifiche suggerite nella prima pagina si sono rivelate ottime e sufficienti da permettermi di tornare ad utilizzare in modo più che soddisfacente il mio caro scanner con Ubuntu 8.04.

Purtroppo però, questa versione di Ubuntu, proprio perchè LTS (Long Term Support), subisce un numero di aggiornamenti, seppur più accurato, inferiore rispetto alle altre versioni dello stessa distribuzione. Allettato dalle prospettive della versione successiva, Ubuntu 8.10, ho effettuato l'aggiornamento della distribuzione. E questo mi ha portato a scoprire che il nuovo kernel 2.6.27 aveva apportato ulteriori modifiche allo stack SCSI. Avendo però riscontrato anche altri problemi di compatibilità con il mio hardware (ho un vetusto ASUS L3862 Deluxe con la scheda Wi-Fi della piattaforma Centrino), ho deciso di accantonare questa distribuzione e tornare alla più rodata 8.04.

Ora, con l'uscita della nuovissima version 9.04, complici le ulteriori innovazioni apportate e il costante invecchiamento della distribuzione 8.04, mi sono trovato di nuovo a pensare all'aggiornamento. Avendo riscontrato la risoluzione delle incompatibilità riscontrate con Ubuntu 8.10 (a parte un fastidioso problema, comunque aggirabile, con la regolazione della luminosità del pannello LCD, già presente con Ubuntu 8.10), mi sono deciso a ritentare la ricerca di una soluzione per il driver ppscsi. Le ricerche preliminari mi hanno riportato al post sopra riportato, che nel frattempo aveva visto un proseguimento nella discussione e che evidenziava come il problema da me riscontrato con le versioni superiori alla 8.04 era comune ad altri utenti e come nessuno aveva trovato una soluzione, chiedendo infine a qualche pio programmatore di porre una soluzione al problema (quarta pagina).

Ecco fatto, i requisiti c'erano tutti, io sono un programmatore e avevo una voglia matta di passare a Ubuntu 9.04. Mosso dalla voglia e dalla sfida di modificare un driver, ho iniziato le ricerche più approfondite. Alla fine ho scovato un articolo in una lingua penso dell'Est Europa, però, seppur non capivo cosa ci fosse scritto ho trovato una serie di comandi comprensibilissimi, e un link ad una patch. Purtroppo la patch permetteva di completare la compilazione, con quattro warning (incompatible pointer type assignment), ma in fase di installazione dei due moduli del kernel necessari si incorreva nel fatidico segmentation fault.

La soluzione

La mia soluzione trae la sua origine, come detto, da un articolo in una lingua a me sconosciuta (ppSCSI viimasele ubuntule? - http://pingviin.org/fpost45023.html). A partire da questo articolo ho scaricato i due file patch che avrebbero dovuto porre rimedio all'incompatibilità riscontrata:

  • ppscsi.h.patch: modifica l'header del file principale del driver ppscsi, cambiando l'include per la configurazione;
  • ppscsi.c.patch: modifica il file principale del driver ppscsi, rendendolo compatibile anche con le versioni più recenti del kernel, facendo ricorso alla compilazione condizionale.

Purtroppo però, una volta applicate le patch, il processo di compilazione del driver va a buon fine, ma presenta quattro warning di tipo incompatible pointer type assignment; tre di questi sono però tali da rendere inutili i moduli del kernel che vengono generati, in quanto, installando il modulo specifico per i vari modelli di scanner, si ottiene un interruzione anomala per segmentation fault.

È a questo punto che si inserisce il mio lavoro. Come suggerito dal compilatore, i messaggi di warning erano dovuti ad un errato o un mancato cast tra puntatori, così mi sono messo ad esaminare gli header delle due differenti versioni del kernel, ricorrendo al sito The LXR Cross Referencer. Sono così riuscito a modificare i due file patch (allegati in fondo alla pagina) in modo da correggere i tre cast mancanti più gravi. Permangono ancora due messaggi di warning dello stesso tipo, ma ora non vanno più ad inficiare il corretto funzionamento del driver (almeno per quello che riguarda l'utilizzo con lo scanner HP ScanJet 5100C in mio possesso).

Quindi, la procedura, relativa alle distribuzioni basate su Ubuntu, per ottenere il driver ppscsi funzionante anche con le nuove versioni del kernel è la seguente:

  1. sudo apt-get install build-essential patch linux-headers-`uname -r`
  2. Download ppscsi-beta2-20060424.tar.gz da http://penguin-breeder.org/kernel/download/ppscsi-beta2-20060424.tar.gz oppure la copia di seguito allegata
  3. Download ppscsi-patxh-2_6_27up.tar.gz di seguito allegata
  4. tar xf ppscsi-beta2-20060424.tar.gz
  5. tar xf ppscsi-patxh-2_6_27up.tar.gz
  6. mv ppscsi.*.patch ppscsi-beta2
  7. cd ppscsi-beta2
  8. patch -Np1 -i ppscsi.c.patch
  9. patch -Np0 -i ppscsi.h.patch
  10. make
  11. sudo cp ppscsi.ko epst.ko /lib/modules/`uname -r`/kernel/drivers/parport
  12. sudo depmod
  13. sudo modprobe ppscsi
  14. sudo modprobe epst
  15. Modificare il file /etc/modules e aggiungere in fondo le seguenti righe:
    ppscsi
    epst
Allegati

ppscsi-beta2-20060424.tar.gz - ppscsi-patch-2_6_27up.tar.gz

Note
  1. Le prove sono state condotte con la distribuzione Ubuntu 9.04, ma penso che la soluzione sia valida per qualsiasi altra distribuzione, anche non Debian, a patto di usare gli specifici tool per la gestione dei moduli del kernel.
  2. Come detto il problema è stato da me riscontrato per la prima volta a seguito del passaggio dalla versione 8.04 LTS alla versione 8.10 di Ubuntu, quest'ultima appunto dotata di un kernel in versione 2.6.27. Una volta applicata la patch qui proposta, per far si che il sistema renda disponibile lo scanner ad un determinato'utente, e non solo a root, sarà necessario consentirne esplicitamente l'utilizzo impostando i permessi, per lo specifico utente in questione, attraverso il menù Sistema > Amministrazione > Utenti e gruppi (o simile); una volta caricata la finestra Impostazioni utenti, sarà necessario, innanzi tutto, fare click su Sblocca e, una volta inserita la propria password, selezionare l'utente a cui si vuole consentire l'utilizzo degli scanner, dopodichè fare click su Proprietà; a questo punto si aprirà una nuova finestra, nella quale bisognerà selezionare la linguetta Privilegi utente, e marcare con un segno di spunta la voce Usare gli scanner riportata nell'elenco. Infine, fare click su OK e su Chiudi per applicare i nuovi permessi dell'utente.

    Purtroppo, la procedura sopra riportata non è applicabile per la versione 9.04 di Ubuntu, in quanto non è più possibile trovare la voce Usare gli scanner nella linguetta Privilegi utente. È però possibile porre rimedio a questo ulteriore problema seguendo i seguenti due passi (riportati da walterp98@gmail.com e da haydnc all'indirizzo [all variants] HP Scanjet 5100C / ppscsi in Hardy -  http://ubuntuforums.org/showthread.php?t=782242&page=4):

    1. sudo addgroup scanner
    2. sudo adduser scanner

    Inoltre, come indicato nell'aticolo [Risolto] Scanner "solo root" jaunty e grazie al tutorial Writing udev rules, è necessario, impostare i permessi per gli scanner.Per fare ciò è necessario seguire i passi di seguito riportati:

    1. Creare, qualora non esistesse, il file 45-libsane.rules nella cartella /etc/udev/rules.d (richiede i permessi da superuser);
    2. Aprire il file 45-libsane.rules appena creato (sempre con i permessi da superuser) ed aggiungere la regola

      SUBSYSTEM=="scsi_generic",ATTRS{type}=="3", NAME="%k", SYMLINK="scanner%n", MODE="0777", GROUP="scanner"

      Eventualmente modificare MODE="0777" con la maschera di permessi che meglio ritenete applicare per tutti gli scanner collegati al bus SCSI.
      Un esempio di file 45-libsane.rules è reperibile qui.


  3. Una conferma della bontà del mio lavoro mi è stata "donata" dagli utenti del forum ufficiale di Ubuntu ed è visibile a partire dall'indirizzo [all variants] HP Scanjet 5100C / ppscsi in Hardy -  http://ubuntuforums.org/showthread.php?t=782242&page=4, a pagina 4, dal post dell'utente walterp98@gmail.com.
Template creato da Iade Gesso,
ispirandosi al template AquelousLightX 1.0 di Six Shooter Media