Adaptec AVA 1505 mini-HOWTO

Lorenzo Pulici, ( snowdog@tiscalinet.it)

v0.6, 27 marzo 2000


Questo mini-HOWTO nasce dall'esigenza di configurare correttamente sotto Linux il controller SCSI Adaptec AVA 1505, disponibile in diverse versioni e dal costo molto contenuto. I procedimenti illustrati sono stati sperimentati su macchine Intel equipaggiate con Debian 2.0 e kernel 2.0.35/36, Red Hat 6.1 e kernel 2.2.12, Debian 2.1 e kernel 2.2.13, Slackware 7 e kernel 2.2.13.

1. Introduzione

Questo documento è perennemente in lavorazione, per cui scaricate sempre l'ultima versione disponibile.

1.1 Changelog

0.6 - inserita una spiegazione più dettagliata di come spostare nella giusta posizione il nuovo kernel ed un ulteriore modello di controller AVA1505

0.5 - inserito il suggerimento di modifica dei sorgenti del kernel

0.4 - altre correzioni di ortografia, aggiornamento ai kernel 2.2

0.3 - corretti altri errori di ortografia, inserito il paragrafo per l'installazione da lettore CD collegato al controller AVA1505, modificato l'url dove trovare questo documento

0.2a - corretti alcuni errori di ortografia

0.2 - inserito il passo riguardante la configurazione del BIOS della scheda madre qualora non si avvii il programma del dischetto Adaptec SCSI SELECT

0.1 - versione iniziale :-)

1.2 LIberatoria

Ho scritto questo documento con tutta l'accuratezza possibile ma se usate le informazioni in esso contenute lo fate a vostro rischio e pericolo. In nessun caso potrò essere ritenuto responsabile di eventuali danni causati dall'utilizzo del presente mini-HOWTO.

I marchi citati si intendono dei rispettivi proprietari.

1.3 Distribuzione

L'ultima versione di questo documento è reperibile presso il seguente indirizzo:

http://www.pluto.linux.it/ildp/ nella sezione intitolata ALTRI DOCUMENTI

oppure

http://ellepi.hypermart.net/documenti/ava1505.html

Critiche, correzioni, consigli e suggerimenti per migliorare questo testo sono ben accetti. Contattatemi pure tramite posta elettronica.

1.4 Ringraziamenti

Questo documento si basa, oltre che sulle mie esperienze, anche sui consigli apparsi sui newsgroup it.comp.linux e it.comp.linux.setup ora it.comp.os.linux.sys e it.comp.os.linux.iniziare). Un grazie infinite a tutti coloro che frequentano i newsgroup!

Un grazie a Bruno Taglienti Bruno.Taglienti@roma1.infn.it per avermi descritto la configurazione del BIOS qualora il dischetto SCSI SELECT non veda il controller.

Grazie anche a Mardy amardegan@iol.it per aver suggerito la modifica diretta dei parametri della scheda nel sorgente del driver aha152x.c

Grazie anche a Murray Gibbins murray@scotweb.ltd.uk per avermi integrato alcuni dati

Un grazie anche a voi per avere letto fino a qui questo documento :-)

2. Il controller Adaptec AVA 1505

Questo controller SCSI, installabile su bus ISA, è un prodotto economico, anche se per il fatto di sfruttare proprio questo tipo di bus non permette di sfruttare appieno le peculiarità delle interfacce SCSI e SCSI-2. Tuttavia è un'ottima alternativa per esempio per installare prodotti SCSI (ad esempio masterizzatori o lettori CD-ROM) ed ottenere migliori prestazioni rispetto ai corrispondenti modelli EIDE, col vantaggio di non sovraccaricare la cpu. Il controller AVA 1505 supporta fino a 7 periferiche SCSI. Inoltre ha i suoi terminatori (quelli per il controller, per i terminatori delle periferiche dovete far riferimento alle periferiche stesse!) già preinstallati. Attenzione che se installate periferiche sia esterne che interne il controller a questo punto si troverà nel mezzo della catena SCSI, per cui i tre terminatori fissi vanno rimossi. Comunque per la terminazione di controller e periferiche è consigliabile approfondire un po' il tema: a tale proposito in fondo al documento troverete un elenco di siti web da consultare.

C'è da puntualizzare una cosa, a scanso di equivoci: questo controller non può fare il boot, quindi non è possibile installarvi l'hard disk principale. Comunque è a parer mio una buona soluzione se non si hanno molti soldi da spendere.

Personalmente l'ho installato sia a casa (per pilotare il masterizzatore) sia in ufficio (per lo scanner) e ne sono soddisfatto.

Di questo controller ne esistono almeno due versioni:

Ci sono anche alcune versioni che permettono il collegamento di sole unità interne.

3. Installazione del controller

Il controller AVA 1505 va montato in uno slot ISA libero. Per questo procedimento non c'è molto da dire, solo di armarsi di pazienza e di un cacciavite, e fare attenzione a non toccare con le dita i contatti della scheda.

Intanto procuratevi anche i cavi necessari per il collegamento delle periferiche SCSI e gli eventuali terminatori.

3.1 Controller standard (non plug and play)

Se il controller è del tipo normale, ossia non plug and play (anche se mi sa che ne sono rimasti pochi in giro...), prima di montarlo dovete assegnarli interrupt e indirizzo I/O di base. Per fare ciò è sufficiente spostare alcuni ponticelli sulla scheda, contrassegnati con J1:

PONTICELLO         IRQ
I09                 9
I10                10
I11                11
I12                12
Di default viene assegnato l'11, il 9 viene sconsigliato per l'uso con Windows (tenetene conto se sul vostro pc convivono sia Linux che il pseudo OS di casa Microsoft). Per assegnare l'interrupt voluto è sufficiente mettere il ponticello nella posizione relativa.

Passiamo poi ad assegnare alla scheda l'indirizzo base: qui sono solo due le scelte, relative al solo ponticello ALT. A ponticello che cortocircuita i due pin corrisponde l'indirizzo esadecimale 0x140, se lo levate invece viene assegnato l'indirizzo 0x340. Ok, adesso si può inserire la scheda nello slot prescelto e collegare poi i vari cavi alle periferiche.

Memorizzate (meglio ancora, scriveteli su un foglio di carta) i valori di I/O, IRQ e IDin quanto serviranno per l'ultimo passo, quello della configurazione di lilo.

3.2 Controller plug and play

Secondo le intenzioni del produttore, dovrebbe essere sufficiente inserire la scheda nel pc, accenderlo e vederlo funzionare... invece non è così (e nemmeno proprio sotto Windows...).

In parte è così, nel senso che sulla scheda non c'è assolutamente nulla da fare, va inserita nello slot e basta. Il lavoro viene dopo.

4. Configurare il controller Plug and Play

Per configurare il controller AVA 1505 plug and play ci sono due vie possibili:

5. Disabilitare il plug and play

A computer spento, inserite nel drive a (ooops... /dev/fd0!) il floppy SCSI SELECT fornito a corredo della scheda. È un floppy avviabile, e una volta acceso il PC dovreste trovarvi nel menu di configurazione.

Nel caso il dischetto SCSI SELECT non vi trovi il controller, riavviate il computer ed entrate nella configurazione del BIOS (di solito premendo il tasto DEL) e modificate il setup in modo che l'IRQ prescelto venga allocato al bus ISA. Non entro nel dettaglio perché la procedura può essere diversa da BIOS a BIOS: consultate il manuale della vostra scheda madre.

Da questo menu provvedete

Con la scelta dell'interrupt bisogna andare un po' per tentativi: escluso il 9 (tra l'altro, non fidatevi delle indicazioni di Windows, spesso sono errate, gli IRQ se li gira lui a piacimento!) per il conflitto con la scheda audio, ho tentato prima col 10 e poi con l'11, ma in fase di inizializzazione della scheda durante l'avvio di Linux mi dava il messaggio "IRQ possibly wrong". Il 12 invece è andato bene. Questo sul computer di casa, mentre quello dell'ufficio ha la scheda impostata sull'IRQ 11. Quindi l'unico metodo valido è quello sperimentale, del resto le più grandi scoperte scientifiche le hanno fatte così ;-)

Anche in questo caso memorizzate (meglio ancora, scriveteli su un foglio di carta) i valori di I/O, IRQ e ID in quanto serviranno per l'ultimo passo, quello della configurazione di lilo.

6. Ricompilare il kernel

Di per sè esiste un howto apposito, e la tentazione di rimandarvi alla sua lettura è molto forte... comunque in breve riassumo qui i passi salienti da compiere per ottenere il supporto SCSI inserito nel kernel. Per la procedura dettagliata di compilazione del kernel fate riferimento al Kernel-HOWTO, idem per la compilazione come modulo del supporto SCSI.

Innanzitutto entrate come root, indi portatevi nella directory dove si trova il kernel. Chiaramente dovete averne installato i sorgenti.
# cd /usr/src/linux

Personalmente preferisco usare l'interfaccia a caratteri make menuconfig, che trovo più intuitiva di make config e che soprattutto mi permette di tornare indietro senza dover ricominciare tutto daccapo se faccio qualche errore oppure ho qualche dubbio.

Per cui al prompt digitate
# make menuconfig

Dopo un po' di smacchinamento vi apparirà una schemata più o meno così


Linux Kernel v2.0.36 Configuration                                         

 -------------------------------- Main Menu --------------------------------
 x  Arrow keys navigate the menu.  <Enter> selects submenus --->.          x
 x  Highlighted letters are hotkeys.  Pressing <Y> includes, <N> excludes, x
 x  <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help.     x
 x  Legend: [*] built-in  [ ] excluded  <M> module  < > module capable     x
 x ----------------------------------------------------------------------- x
 x x      Code maturity level options  --->                              x x
 x x      Loadable module support  --->                                  x x
 x x      General setup  --->                                            x x
 x x      Floppy, IDE, and other block devices  --->                     x x
 x x      Networking options  --->                                       x x
 x x      SCSI support  --->                                             x x
 x x      Network device support  --->                                   x x
 x x      ISDN subsystem  --->                                           x x
 x x      CD-ROM drivers (not for SCSI or IDE/ATAPI drives)  --->        x x
 x x      Filesystems  --->                                              x x
 x --------(+)------------------------------------------------------------ x
 ---------------------------------------------------------------------------
 x                    <Select>    < Exit >    < Help >                     x
 ---------------------------------------------------------------------------

Entrate nel menu SCSI Support e abilitate le seguenti voci:

L'ultima voce sarebbe anche superflua, ma è meglio includerla almeno per gli esperimenti, dato che può fornire informazioni utili per capire se e dove c'è un errore di inizializzazione. Una volta collaudato il sistema si può anche eliminare ricompilando il kernel senza, visto che si risparmiano ben 12 Kb.

ATTENZIONE: con i kernel 2.2.x se avete un lettore CD EIDE e state installando il controller SCSI per un masterizzatore, consiglio di abilitare il supporto per CDROM SCSI e di togliere quello per le unità EIDE/ATAPI. Solo così facendo potrete fare delle copie al volo di CD.

Dovreste quindi avere una schermata come questa:


Linux Kernel v2.0.36 Configuration                                         

 ------------------------------ SCSI support -------------------------------
 x  Arrow keys navigate the menu.  <Enter> selects submenus --->.          x
 x  Highlighted letters are hotkeys.  Pressing <Y> includes, <N> excludes, x
 x  <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help.     x
 x  Legend: [*] built-in  [ ] excluded  <M> module  < > module capable     x
 x ----------------------------------------------------------------------- x
 x x   [*] SCSI support                                                  x x
 x x   --- SCSI support type (disk, tape, CD-ROM)                        x x
 x x   [ ] SCSI disk support                                             x x
 x x   [ ] SCSI tape support                                             x x
 x x   [ ] SCSI CD-ROM support                                           x x
 x x   [*] SCSI generic support                                          x x
 x x   --- Some SCSI devices (e.g. CD jukebox) support multiple LUNs     x x
 x x   [ ] Probe all LUNs on each SCSI device                            x x
 x x   [*] Verbose SCSI error reporting (kernel size +=12K)              x x
 x x   SCSI low-level drivers  --->                                      x x
 x ----------------------------------------------------------------------- x
 ---------------------------------------------------------------------------
 x                    <Select>    < Exit >    < Help >                     x
 ---------------------------------------------------------------------------
                                                                            

Ed eccoci all'ultimo passo, quello di scegliere il driver a basso livello per la nostra scheda AVA 1505. Entrate nella sezione SCSI low-level drivers e selezionate il supporto per Adaptec AHA152X/2825.


Linux Kernel v2.0.36 Configuration                                         
                                                                            
 ------------------------- SCSI low-level drivers --------------------------
 x  Arrow keys navigate the menu.  <Enter> selects submenus --->.          x
 x  Highlighted letters are hotkeys.  Pressing <Y> includes, <N> excludes, x
 x  <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help.     x
 x  Legend: [*] built-in  [ ] excluded  <M> module  < > module capable     x
 x ----------------------------------------------------------------------- x
 x x[ ] 7000FASST SCSI support                                           x x
 x x[*] Adaptec AHA152X/2825 support                                     x x
 x x[ ] Adaptec AHA1542 support                                          x x
 x x[ ] Adaptec AHA1740 support                                          x x
 x x[ ] Adaptec AIC7xxx support                                          x x
 x x[ ] AdvanSys SCSI support                                            x x
 x x[ ] Always IN2000 SCSI support                                       x x
 x x[ ] AM53/79C974 PCI SCSI support                                     x x
 x x[ ] AMI MegaRAIDsupport                                             x x
 x x[ ] BusLogic SCSI support                                            x x
 x --(+)------------------------------------------------------------------ x
 ---------------------------------------------------------------------------
 x                    <Select>    < Exit >    < Help >                     x
 ---------------------------------------------------------------------------
                                                                            

Se non avete altri controller SCSI assicuratevi che non siano inseriti i loro driver nel kernel. Non danno fastidio, ma vi fanno sprecare memoria inutilmente, dato che carichereste drivers inutili :-)

Dopodiché uscite dal menu e salvate la configurazione, indi iniziate la compilazione del kernel come al solito:
# make dep ; make clean ; make Zimage

7. Passaggio dei parametri della scheda al kernel

Diversi driver del kernel per controller SCSI prevedono il passaggio di indirizzo I/O, IRQ e ID in fase di compilazione del kernel. Abbiamo già visto che però non è il caso per l'Adaptec AVA 1505. Allora come fare?

7.1 Passaggio diretto al boot

All'apparire del prompt del boot digitare il comando append seguito dai parametri nell'ordine iobase,IRQ,id[,reconnect]. Esempio pratico:
append=0x340,11,7

7.2 Lilo

Se avviate il PC con lilo (quindi avete più di un sistema operativo sul vostro pc, oppure vi diverte avere più kernel sul vostro disco in modo da partire con differenti configurazioni) i parametri di inizalizzazione della scheda vanno inseriti in /etc/lilo.conf.

Vi do un esempio tratto dal mio /etc/lilo.conf:


boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
vga=9
timeout=50
image=/vmlinuz
        label=linux
        append="aha152x=0x340,11,7"
        root=/dev/hdb1
        read-only
image=/boot/vmlinuz-2.2.5
        label=new
        append="aha152x=0x340,11,7"
        root=/dev/hdb1
        read-only

Come vedete i parametri sono stati inseriti nella riga che comincia con append nello stesso ordine del caso precedente, l'unica differenza è che sono stati posti tra virgolette.

Una volta salvato il file dovete fare in modo che lilo sappia della modifica, perciò date il comando
# /sbin/lilo

Naturalmmente il kernel già compilato dovrà essere spostato nel punto giusto (nel mio caso nella directory root del sistema, su RedHat nella directory /boot), ed essere rinominato vmlinuz.

Per fare ciò è sufficiente digitare:

# cp /usr/src/linux/arch/i386/boot/zImage /vmlinuz
Naturalmente se in fase di compilazione del kernel avete dato il comando make bzImage dovrete scrivere bzImage al posto di zImage. Date poi un /sbin/lilo -v per informare lilo delle vostre modifiche.

7.3 Modifica dei sorgenti del kernel

Questa operazione è per soli esperti: si declina qualsiasi responsabilità per eventuali danni al vostro sistema.

È possibile andare a modificare direttamente i makefile del kernel, nello specifico il file /usr/src/linux/drivers/scsi/Makefile, ovvero il makefile che sovrintende alla compilazione dei driver SCSI. Seguendo queste istruzioni non sarà necessario passare opzioni né a LILO né a insmod.

Dovete andare a cercare la riga (nel mio 2.2.13 è la sedicesima) che recita


CFLAGS_aha152x.o =   -DDEBUG_AHA152X -DAUTOCONF
e modificarla come segue:

CFLAGS_aha152x.o =   -DDEBUG_AHA152X -DSETUP0="{0x340, 11, 7, 1, 1, 0, 100, 0}"
se il vostro controller AVA 1505 è sull'indirizzo di I/O 0x340, ha un IRQ pari a 11 e uno SCSI ID di 7 (gli altri potete lasciarli come nell'esempio). L'esatta sintassi la trovate indicata nel file /usr/src/linux/drivers/scsi/aha152x.c.

Una cosa fondamentale da fare è comunque accertarsi della correttezza dei parametri rilevandoli col dischetto Adaptec SCSI SELECT, altrimenti la scheda non sarà riconosciuta.

7.4 La prova del fuoco

Ovvero: chissà se ho scritto un sacco di fesserie oppure funziona tutto :-))

Siamo arrivati al dunque. Con un bel saluto a tre dita (ovvero premendo CTRL+ALT+DEL) riavviate il computer in modo da fargli leggere il nuovo kernel.

Durante la fase di avvio dovreste riuscire a leggere un messaggio di questo tenore:

aha152x: processing commandline: ok
aha152x: BIOS test: passed, detected 1 controller(s)
aha152x0: vital data: PORTBASE=0x340, IRQ=11, SCSI ID=7,
reconnect=enabled, parity=enabled, synchronous=disabled, delay=100,
extended translation=disabled
aha152x: trying software interrupt, ok.
scsi0 : Adaptec 152x SCSI driver; $Revision: 1.18 $
scsi : 1 host.
  Vendor: HP        Model: C5110A            Rev: 3638
    Type:   Processor                          ANSI SCSI revision: 02
    Detected scsi generic sga at scsi0, channel 0, ID2, lun 0
    scsi : detected total.

Se i messaggi si susseguono troppo velocemente, una volta loggati nel sistema potete rileggerli col comando
# dmesg | less

In questo caso il kernel ha trovato un controller SCSI all'indirizzo 0x340, con IRQ 11 e IDSCSI 7. Inoltre mi dice che a quel controller è connessa una periferica identificabile come HP C5110A, alla quale ha assegnato il device /dev/sga e si trova sul bus SCSI 0 con ID2. Chiaramente la vostra situazione sarà diversa...

Se per disgrazia non dovesse trovarvi il controller, il kernel vi farà partecipi del suo dolore con il messaggio
scsi : 0 detected total.

In questo caso, prima di iniziare a mandarmi improperi di vario genere vi chiedo di ricontrollare tutti i passi che avete fatto. Nel caso malaugurato che non ci sia proprio nulla da fare allora contattatemi, magari sono io che ho scritto qualche fesseria. A me comunque questo metodo ha funzionato alla perfezione (in due casi, dato che sono due le macchine che posso usare...).

8. Inizializzazione con isapnptools

Un metodo alternativo potrebbe essere quello di utilizzare le utility del pacchetto isapnptools, pnpdump e isapnp. Questo pacchetto consente di riconoscere le schede plug and play connesse al bus ISA (quindi nulla da fare per le PCI) e di assegnare i corretti valori per indirizzo base di I/O, IRQ, DMA, eccetera.

L'uso è relativamente semplice: innanzitutto è sempre meglio leggere la pagina man relativa alle due utility, in modo da rendersi conto con che cosa si ha a che fare e soprattutto delle opzioni possibili. Le pagine sono: isapnp(8), pnpdump(8) e isapnp.conf(5).

In seguito è possibile far interrogare il sistema da pnpdump, che provvederà a generare il file di configurazione. Una volta generato si andrà a leggere i parametri della scheda e ad utilizzarli per il passaggio dei valori corretti al kernel con isapnp.

Ecco il dettaglio delle operazioni:

Quando tenterete di usare una periferica connessa al controller e se avrete abilitato il caricamento automatico dei moduli in fase di compilazione del kernel, vi apparirà sullo schermo qualcosa di molto simile:

aha152x: processing commandline: ok
aha152x: BIOS test: passed, detected 1 controller(s)
aha152x0: vital data: PORTBASE=0x340, IRQ=11, SCSI ID=7,
reconnect=enabled, parity=enabled, synchronous=disabled, delay=100,
extended translation=disabled
aha152x: trying software interrupt, ok.
scsi0 : Adaptec 152x SCSI driver; $Revision: 1.18 $
scsi : 1 host.
  Vendor: HP        Model: C5110A            Rev: 3638
    Type:   Processor                          ANSI SCSI revision: 02
    Detected scsi generic sga at scsi0, channel 0, ID2, lun 0
    scsi : detected total.

Ciò significa che tutto è andato per il verso giusto. Altrimenti riguardate passo passo tutte le fasi dell'operazione, probabilmente qualcosa non è andato per il verso giusto, oppure ho scritto cavolate... :-) Comunque tra i due metodi a mio parere il migliore è il primo, ossia la disabilitazione del plug and play.

9. Il lettore CD collegato al controller

Tutto quanto sopra descritto è poco utile se il vostro lettore CD è collegato al controller in oggetto e dovete ancora installare Linux. Tenete conto che questo controller non supporta il boot in quanto sprovvisto di BIOS, per cui per l'installazione di Linux è giocoforza crearsi i dischetti di boot con l'utility rawrite presente sul CD di installazione, così come le immagini dei floppy.

La procedura descritta qui sotto funziona unicamente per le distribuzioni più aggiornate che hanno modularizzato tutti i driver disponibili nel kernel, ossia RedHat 6.x, Suse 6.x e Slackware 7. Credo sia possibile, anzi lo sarà sicuramente, anche con la Debian 2.1, ma non ho provato :-) quindi aspetto eventuali feedback da qualcuno.

Prima ancora di iniziare tutto il lavoro è bene prendere il dischetto SCSI SELECT della Adaptec e con esso riavviare il computer. Partirà automaticamente l'utility per configurare l'AVA1505, provvedete a disabilitare il plug and play e segnatevi su un foglietto di carta i parametri di indirizzo I/O, IRQ e ID SCSI. Non fidatevi assolutamente delle indicazioni di Windows! Col plug and play abilitato il simpatico (si fa per dire) sistema operativo modifica a suo piacimento questi parametri, dando indicazioni assolutamente poco affidabili. È quindi da preferirsi la disabilitazione del pnp.

Potete quindi, una volta che vi siete creati i floppy di installazione, partire per mettere Linux sul vostro PC. Unica accortezza: al boot dovrete passare i parametri di inizializzazione del controller che avete rilevato e scritto sul vostro bravo foglietto di carta, nel formato

aha152x=0x340,11,7
nel caso l'indirizzo di I/O sia 0x340, l'IRQ sia 11 e l'ID SCSI 7. Molto semplice, dopotutto...

10. Links utili

Il sito Adaptec http://www.adaptec.com

isapnptools http://www.roestock.demon.co.uk/isapnptools/

11. Bibliografia

Appunti Linux, Daniele Giacomini, http://www.pluto.linux.it/ildp/AppuntiLinux/index.html, capitoli 15, 16, 17, 19

Kernel HOWTO, Lilo mini-HOWTO, Modules mini-HOWTO, Kerneld mini-HOWTO
Li trovate in traduzione italiana se disponibile (altrimenti c'è il link all'originale) sul sito del PLUTO http://www.pluto.linux.it/ildp/HOWTO/HOWTO-INDEX-3.html

SCSI HOWTO
È un howto che non è più manenuto e lo trovate solo su sunsite o i suoi mirror in lingua inglese ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/unmaintained

La mia esperienza personale :-)