  IDE e SoundBlaster 32 creative - HOWTO
  Antonio Madesani <madesani@versilia.toscana.it>
  0.2 del 18/8/1998

  Informazioni sull'utilizzo ed il settaggio dell'interfaccia IDE pre
  sente su una scheda sonora SoundBlaster 32 Creative.

  1.  Differenze delle varie versioni di questo HOWTO:


     v 0.1
        le note considerano il settaggio della macchina dell'autore e
        questo crea qualche difficolt ad utilizzarle in un caso
        generale


     v 0.2
        corretti gli inevitabili refusi, ho cercato di rendere pi
        generale il discorso


     v 0.3
        corretti alcuni refusi e inserita una appendice per un caso
        particolare che si pu presentare nel settaggio (a me 
        capitato)


  2.  Introduzione

  Scopo di questo mini HOWTO  quello di fornire alcune informazioni che
  possano essere utili per poter utilizzare la porta IDE collegata ad
  una scheda sonora.

   necessario, prima di cominciare, fare una serie di precisazioni in
  modo da definire i limiti di queste note. L'autore  un semplice
  utente Linux e quindi non uno "specialist" e questo significa che le
  informazioni saranno limitate ad un ambito abbastanza ristretto.

  Le informazioni si riferiscono ad una distribuzione RedHat 5.1 con
  kernel 2.0.35 non Red Hat. Questo discorso del kernel non RH nasce dal
  fatto che in un paio di occasioni mi sono trovato ad avere difficolt
  in fase di compilazione con i kernel forniti insieme alla
  distribuzione ed allora ....

  La scheda sonora che ho installato  una pnp Sound Blaster 32 della
  Creative Labs; mi pare che venga indicata anche come AWE 32.
  Personalmente non uso la scheda sonora se non per ascoltare, ogni
  tanto, un poco di musica mentre lavoro e quindi in queste note non
  sar possibile trovare informazioni dettagliate sulla messa a punto
  della parte sonora. Ho avuto qualche difficolt ad applicare le patch
  per la AWE 32 ed alla fine ho deciso di non applicarle in quanto non
  erano indispensabili. Il mio scopo era unicamente l'utilizzo della
  porta IDE sulla scheda.

  Le versioni del software utilizzato sono:

    Distribuzione Red Hat 5.1 aggiornata 15/7/98

    kernel-2.0.35

    isapnptools-1.11-4

    Il lettore di CdRom  un IDE-ATAPI 24x.

  La mia configurazione prevede tre HD, un masterizzatore Mitsumi 2801TE
  ed il lettore 24x.
  3.  Brevi note sulle IDE in Linux

  Le schede madri, per lo meno le recenti, hanno due interfacce IDE che
  vengono gestite senza bisogno di starci molto a pensare: basta
  attaccarci qualche cosa opportunamente settato e tutto funziona. La
  cose possono complicarsi un pochino quanto si sfruttano le altre due
  collocate su schede esterne.

  Le Ide sono:



       Prima:    ide0, porta 0x1f0; major=3;  hda is minor=0; hdb is minor=64
       Seconda:  ide1, porta 0x170; major=22; hdc is minor=0; hdd is minor=64
       Terza:    ide2, porta 0x1e8; major=33; hde is minor=0; hdf is minor=64
       Quarta:   ide3, porta 0x168; major=34; hdg is minor=0; hdh is minor=64




  /usr/src/linux/drivers/block/ide.c controlla automaticamente la
  presenza di periferiche a queste interfacce ed assegna loro i relativi
  indirizzi e gli IRQ. Questo significa che, se non diversamente
  settato, ad una certa interfaccia corrisponde un certo indirizzo ed un
  certo irq.

  Le porte standard ed i relativi irq sono:



               ide0=0x1f0,0x3f6,14
               ide1=0x170,0x376,15
               ide2=0x1e8,0x3ee,11
               ide3=0x168,0x36e,10




  Notare che il primo parametro riserva 8 indirizzi contigui, mentre il
  secondo ne riserva uno solo. Per un approfondimento provare a dare una
  occhiata a /proc/ioports.

  A questo punto possiamo cominciare a settare il nostro sistema.
  Considero ovviamente che la scheda sia stata correttamente installata
  e che, nel dubbio, sia possibile consultare i parametri che il
  costruttore consiglia per un suo funzionamento ottimale.

  Il kernel, per lo meno quelli fino ai 2.0.XX, non hanno la possibilit
  di riconoscere automaticamente le schede pnp. Per riuscire a farglielo
  fare vi sono due strade:

  1. patchare il kernel (strategia che non ho mai provato)

  2. utilizzare isapnptools, un programma che consente di passare le
     corrette informazioni sulla scheda al sistema nella fase di boot.

  Io ho utilizzato questa seconda strada ed  quella di cui si parler
  qui.  Linux, per poter utilizzare una pnp, oltre ai servigi di
  isapnptools, vuole che la scheda sia caricata come modulo. Questo
  significa compilare opportunamente il kernel.

  A questo scopo  necessario rispondere Y alle tre domande che si
  riferiscono alla parte che riguarda la gestione dei moduli.



  *
  * Loadable module support
  *
  Enable loadable module support (CONFIG_MODULES) [Y/n/?]
  Set version information on all symbols for modules (CONFIG_MODVERSIONS) [Y/n/?]
  Kernel daemon support (e.g. autoload of modules) (CONFIG_KERNELD) [Y/n/?]
  *




  Quando si arriva al suono:



       *
       * Sound
       *
       Sound card support (CONFIG_SOUND) [M/n/y/?]




  si risponde con M e quindi si chiede di configurarlo come modulo.

  A questo punto, la macchina lavoricchia un pochino e, se abbiamo
  precedentemente compilato il kernel con la richiesta della componente
  sonora, viene chiesto se vogliamo utilizzare la vecchia
  configurazione:



       Old configuration exists in `/etc/soundconf'. Use it [Y/n/?]




  Io, la prima volta ho preferito rispondere n in modo da essere sicuro
  di inserire i valori corretti.

  Le domande a cui  necessario rispondere Y (in alcune distribuzioni vi
  pu essere l'opzione M invece che Y) sono:



       Sound Blaster (SB, SBPro, SB16, clones) support (CONFIG_SB) [Y/n/?]
       Generic OPL2/OPL3 FM synthetizer support (CONFIG_ADLIB) [Y/n/?]
       /dev/dsp and /dev/audio support (CONFIG_AUDIO)  [Y/n/?]
       MIDI interface support (CONFIG_MIDI) [Y/n/?]
       FM synthetizer (YM3812/OPL-3) support (CONFIG_YM3812) [Y/n/?]
       lowlevel sound driver support [Y/n/?]




  I valori predefiniti proposti per l'impostazione della scheda li ho
  accettati cos come mi sono stati proposti. Nell'eventualit che
  possano sorgere conflitti, modificare quanto necessario.
  Orientativamente penso che l'unico valore che potrebbe creare problemi
   la scelta dell'irq. La SB ama alla follia utilizzare 5 o 7.

  Si compila il kernel, io uso:


       # make zImage

  poi si compilano e si installano i moduli:


       # make modules
       # make modules_install




  Come probabilmente tutti sanno, se sono presenti i moduli della vec
  chia compilazione o del vecchio kernel, make install fa del casino e
  quindi  opportuno intervenire a mano, ovvero: prima di dare make mod
  ules e make module_install,  opportuno mettere da parte quello che
  pu essere presente, a tale scopo:


       # mv /lib/modules/2.0.XX /lib/modules/2.0.XX.old




  XX indica il numero della versione del kernel (nel caso descritto
  potrebbe essere 35). Se questa directory non esiste, tanto meglio,
  significa che non avete precedentemente compilato il kernel con la
  richiesta di gestione moduli.  Trasferito zImage in /boot/ o dove
  siete abituati a metterlo, cambiato il nome secondo la solita metod
  ica, lanciato lilo per avvertirlo che abbiamo un nuovo kernel, incro
  ciamo le dita e facciamo:


       # shutdown -r 0




  Rilanciato, dovremmo avere la conferma che i moduli vengono visti e
  riconosciuti. Se cos non fosse bisogna verificare il lavoro per indi
  viduare il punto dove qualche cosa  andato storto. Possono ovviamente
  aiutare i messaggi di errore che escono nella fase di boot.

  Se poi il sistema non parte significa che il casino fatto supera il
  livello tolleranza ed allora si deve ripartire con il dischetto di
  emergenza, reinstallare il vecchio kernel che vi siete ben guardati
  dal buttare via e fare una verifica un poco pi approfondita. Io
  suggerisco di tenere a portata di mano un blocco per appunti, quando
  si introducono dei cambiamenti in modo da ricostruire "esattamente"
  quello che si  fatto. Un modo per non arrivare al punto di non
  ritorno  mantenere le vecchie impostazioni rinominando i vecchi file
  per poterli rimettere al loro posto in caso problemi. Facciamo finta
  che tutto sia andato per il meglio, si tratta di vedere se la nostra
  scheda sonora viene regolarmente vista. A tale scopo:


       # cat /dev/sndstat




  dovrebbe venir fuori qualche cosa tipo:







  # cat /dev/sndstat
  Sound Driver:3.5.4-960630 (Sat Aug 1 22:35:15 CEST 1998 root,
  Linux raptor.optitaly.it 2.0.35 #2 Sat Aug 1 22:11:56 CEST 1998 i586 unknown)
  Kernel: Linux raptor.optitaly.it 2.0.35 #1 Sun Aug 2 12:25:33 CEST 1998 i586
  Config options: a80002

  Installed drivers:
  Type 1: OPL-2/OPL-3 FM
  Type 2: Sound Blaster
  Type 7: SB MPU-401

  Card config:
  (Sound Blaster at 0x220 irq 5 drq 1,5)
  (OPL-2/OPL-3 FM at 0x388 drq 0)

  Audio devices:

  Synth devices:

  Midi devices:

  Timers:
  0: System clock

  Mixers:




  Se il sistema alla richiesta di "leggere" sndstat vi insulta sig
  nifica, ovviamente che qualche cosa non  andato per il verso giusto.

  Ricominciare il processo di verifica e leggere un poco di informazioni
  ("HOWTO come vi amo!") relative all'uso dei moduli.

  Tanto che ci sono, consiglio di leggere quell'opera d'arte di: Appunti
  Linux del benemerito Daniele Giacomini al quale vanno tutti i nostri
  ringraziamenti e di consultare gli archivi del gruppo Pluto.

  Se invece tutto procede con il vento in poppa si tratta di fare
  intervenire isapnptools.  Se non  installato lo installiamo:


       rpm -Uvh isapnptools-1.11-4




  La versione potrebbe indubbiamente essere diversa; cercate di utiliz
  zare quella pi recente consigliata dalla vostra distribuzione. Se
  volete un consiglio, niente esperimenti con versioni sperimentali o di
  dubbia origine fino a quando tutto non funziona alla perfezione.

  A questo punto lanciate:


       # pnpdump > /etc/isapnp.conf




  questo consente di avere il file completo di configuarazione con tutti
  i parametri predisposti ad essere settati sulla vostra macchina. I
  parametri sono tutti commentati con con il solito cancelletto e quindi
  ci basta "scommentare" quelli che vogliamo scegliere togliendo il can
  celletto.
  La parte che ci interessa :

































































  (CONFIGURE CTL0048/266633 (LD 1
  #     Compatible device id PNP0600
  #     ANSI string -->IDE<--

  # Multiple choice time, choose one only !

  #     Start dependent functions: priority preferred
  #       IRQ 10.
  #             High true, edge sensitive interrupt (by default)
  # (INT 0 (IRQ 10 (MODE +E)))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0168
  #             Maximum IO base address 0x0168
  #             IO base alignment 1 bytes
  #             Number of IO addresses required: 8
  # (IO 0 (BASE 0x0168))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x036e
  #             Maximum IO base address 0x036e
  #             IO base alignment 1 bytes
  #             Number of IO addresses required: 2
  # (IO 1 (BASE 0x036e))

  #       Start dependent functions: priority acceptable
  #       IRQ 11.
  #             High true, edge sensitive interrupt (by default)
   (INT 0 (IRQ 11 (MODE +E))) # da scommentare
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x01e8
  #             Maximum IO base address 0x01e8
  #             IO base alignment 1 bytes
  #             Number of IO addresses required: 8
   (IO 0 (BASE 0x01e8)) # da scommentare
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x03ee
  #             Maximum IO base address 0x03ee
  #             IO base alignment 1 bytes
  #             Number of IO addresses required: 2
   (IO 1 (BASE 0x03ee)) # da scommentare

  #       Start dependent functions: priority acceptable
  #       IRQ 10, 11, 12 or 15.
  #             High true, edge sensitive interrupt (by default)
  # (INT 0 (IRQ 10 (MODE +E)))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0100
  #             Maximum IO base address 0x01f8
  #             IO base alignment 8 bytes
  #             Number of IO addresses required: 8
  # (IO 0 (BASE 0x0100))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0300
  #             Maximum IO base address 0x03fe
  #             IO base alignment 2 bytes
  #             Number of IO addresses required: 2
  # (IO 1 (BASE 0x0300))

  #       Start dependent functions: priority functional
  #       IRQ 15.
  #             High true, edge sensitive interrupt (by default)
  # (INT 0 (IRQ 15 (MODE +E)))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0170
  #             Maximum IO base address 0x0170
  #             IO base alignment 1 bytes
  #             Number of IO addresses required: 8
  # (IO 0 (BASE 0x0170))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0376
  #             Maximum IO base address 0x0376
  #             IO base alignment 1 bytes
  #             Number of IO addresses required: 1
  # (IO 1 (BASE 0x0376))

  #     End dependent functions
   (ACT Y)   # da scommentare
  ))




  Le righe dove ho tolto il # che indica il commento le ho indicate.  Mi
  raccomando di ricordare di togliere il commento alla riga (ACT Y).

  Un'altra cosa, rammentata nell'utile Sound Blaster AWE 32/64 HOWTO di
  Marcus Brinkmann (sarebbe utile leggerlo),  quella di verificare che
  in fondo alla sbrodolata di isapnp.conf sia presente la linea:


       (WAITFORKEY)




  che, a detta di Marcus, qualche volta  assente nelle vecchie versioni
  di pnpdump.

  A questo punto un piccolo inciso. Sulla mia macchina, per qualche
  motivo che non conosco, la ide2 risulta impegnata e quindi non 
  disponibile per essere usata per attaccarci qualche cosa. Ho risolto
  il problema settando in isapnp.conf i valori corrispondenti alla ide3.
  Non dovrebbero esserci difficolt a fare un cambiamento di questo
  tipo. L'unica cosa  ricordare che il cambiamento implica tenerne
  conto negli altri settaggi, compreso quello che vedremo dopo per
  individuare il nome della periferica che corrisponde al nostro cdrom.
  Fine dell'inciso.

  A questo punto si tratta di sincronizzare gli interventi al momento
  del boot iniziale. Mi spiego.

  Al momento del boot, prima  necessario che intervenga isapnptools con
  i suoi settaggi e poi pu arrivare la gestione dei moduli.

  Nel mio sistema questo  ottenuto tramite /etc/rc.d/rc.sysinit dove ci
  sono le due chiamate, nella sequenza corretta:


    gestione pnp:


       # set up pnp
       if [ -x /sbin/isapnp -a -f /etc/isapnp.conf ]; then
           if [ -n "$PNP" ]; then
               echo "Setting up ISA PNP devices"
               /sbin/isapnp /etc/isapnp.conf
           else
               echo "Skipping ISA PNP configuration at users request"
           fi
       fi



    e successivamente quello per la gestione di moduli:


       # Enter root and /proc into mtab.
       mount -f /
       mount -f /proc

       if [ -f /proc/ksyms ]; then
           USEMODULES=y
       else
           USEMODULES=
       fi

       # Get the modules ready to go -- we use awk here as cut is in /usr/bin
       rm -f /lib/modules/preferred
       if [ -n $USEMODULES ]; then
           set `cat /proc/cmdline`
           while [ $# -gt 0 ]; do
               if echo $1 | grep '^BOOT_IMAGE=' > /dev/null ; then
                   image=`echo $1 | awk -F= '{ print $2 }'`
                   kernelfile=`/sbin/lilo -I $image`
                   if [ -n "$kernelfile" ]; then
                       kernelname=`echo $kernelfile | awk -F- '{ print $1 }'`
                       versioninfo=`echo $kernelfile | sed "s|${kernelname}-||"`
                       if [ "$kernelname" = "/boot/vmlinuz" -a \
                            -d /lib/modules/$versioninfo -a \
                            $versioninfo != `uname -r` ]; then
                            ln -sf $versioninfo /lib/modules/preferred
                       fi
                   fi
               fi
               shift
           done
       fi




  Vi sono varie maniere per fare questo, e alcune distribuzioni,
  inseriscono automaticmente la parte che gestisce le schede pnp al
  momento del lancio del tool. Non buttatevi a ricopiare tutto,
  nell'eventualit che quello che ho riportato non sia uguale a ci che
  avete nel vostro sistema, cercate di individuare le varie parti per
  capire se realmente  necessario modificare qualche cosa. Ancora una
  volta consiglio di leggere l'HOWTO di Marcus, citato prima, sulla
  SoundBlaster AWE.

  Vediamo ora come vengono indicate le varie periferiche collegate.


       ide0    master  hda     slave   hdb
       ide1    master  hdc     slave   hdd
       ide2    master  hde     slave   hdf
       ide3    master  hdg     slave   hdf




  A seconda che la periferica da collegare sia settata su master o
  slave, diventer o hde oppure hdf. Una volta deciso, si crea un link
  in /dev


       # ln -s /dev/hde cdrom (se  settata come master)


  Pu risultare utile, ma probabilmente non indispensabile, inserire un
  append in lilo:


       append ="hde=cdrom"




  con il quale gli dico che cdrom coincide con la periferica hde.  A
  questo punto faccio partire lilo e poi rilancio:


       # shutdown -r 0




  Se tutto  andato bene dovrei in /var/log/dmsg trovare, all'inizio le
  informazioni che ho passato con l'append di lilo:


       ide_setup: hde=cdrom




  poi poco pi sotto, il blocco delle informazioni delle periferiche
  ide. Nel mio caso:


       hda: IBM-DJAA-31270, 1220MB w/96kB Cache, CHS=620/64/63
       hdb: FUJITSU MPB3043ATU E, 4125MB w/0kB Cache, CHS=525/255/63
       hdc: QUANTUM SIROCCO1700A, 1628MB w/75kB Cache, CHS=3309/16/63
       hdd: CR-2801TE, ATAPI CDROM drive
       hde: BCD-24X 1997-06-27, ATAPI CDROM drive
       ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
       ide1 at 0x170-0x177,0x376 on irq 15
       ide2 at 0x1e8-0x1ef,0x3ee on irq 11




  se le cose stanno cos non dovrebbero esserci problemi a fargli vedere
  il cdrom collegato alla ide della scheda sonora.

  Se qualche cosa non dovesse andare per il verso giusto, provare a
  rilanciare e fate attenzione ai messaggi di boot per verificare che il
  settaggio della schede pnp avvenga prima del caricamento e
  riconoscimento delle dipendenze dei moduli.

  Altro non so cosa dire ad eccezione che con una configurazione in cui
  il cdrom  collegato ad una scheda pnp succede che se fate un upgrade
  da dischetto, il lettore di cdrom non viene visto in quanto prevede
  tutta la trafila di cui abbiamo parlato. Per risolvere questo problema
  io utilizzo il masterizzatore collegato a ide1 (hdd) come semplice
  lettore.

  La procedura fino a questo punto illustrata  quella che logicamente
  dovrebbe portare al risultato che vogliamo ottenere. Il problema che
  io ho avuto, e che mi ha costretto a rivedere alcune cose, riguarda
  ide2 che, sulla mia macchina, risulta gi occupata da qualche cosa (mi
  piacerebbe tanto sapere che cosa) e quindi non consente di utilizzarla
  per attaccarci il nostro benedetto cdrom.  In questo caso vi sono due
  cose da modificare:

    la prima riguarda il settaggio di isapnp.config;

    la seconda il fatto che la scheda che io uso (le informazioni sono
     sulle caratteristiche fornite dal produttore) pretende di avere
     come irq11.

  Per quel che riguarda modificare isapnp.conf  estremamente intuitivo:
  si tolgono i commenti alla prima parte, quella che comincia con:


       #     Start dependent functions: priority preferred
       #       IRQ 10.
       #             High true, edge sensitive interrupt (by default)
       # (INT 0 (IRQ 10 (MODE +E)))
       #       Logical device decodes 16 bit IO address lines
       #             Minimum IO base address 0x0168




  utilizzare quanto detto precedentemente per vedere le righe su cui
  intervenire. Si tratta per di introdurre anche la modifica dell'irq
  che deve essere cambiato da 10 a 11. Ovvero:


        (INT 0 (IRQ 11 (MODE +E)))




  se si decide di lasciare inalterata la seconda parte, quella relativa
  alla ide2,  necessario, in quella sostituire l'11 con il 10. In
  parole povere i due irq vanno invertiti sulle due porte. Io ho prefer
  ito rimettere in questa seconda parte i segni di commento (#) alle
  righe che a conti fatti non mi interessano. quelle relative ad ide2.

  In caso di cambiamenti, ricordare di lasciare scommentato:


        (ACT Y)




  Cambia anche l'appende in lilo che diventa:


        append ="ide2=noprobe ide3=0x168,0x36e,11 hdg=cdrom"




  in /dev cambiare il link a cdrom che deve puntare ad hdg invece che
  hde.  Io ho notato che ide2=noprobe non pare strettamente indispens
  abile ma evita una segnalazione nella fase di boot del sistema.  Con
  questo settaggio interrogando dmesg ottengo:

  all'inizio


        ide_setup: ide2=noprobe
        ide_setup: ide3=0x168,0x36e,11
        ide_setup: hdg=cdrom



  che sono le informazioni che ho passato tramite lilo.  Per quanto
  riguarda le informazioni sulle periferiche ho:


       hda: IBM-DJAA-31270, 1220MB w/96kB Cache, CHS=620/64/63
       hdb: FUJITSU MPB3043ATU E, 4125MB w/0kB Cache, CHS=525/255/63
       hdc: QUANTUM SIROCCO1700A, 1628MB w/75kB Cache, CHS=3309/16/63
       hdd: CR-2801TE, ATAPI CDROM drive
       hdg: BCD-24X 1997-06-27, ATAPI CDROM drive
       ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
       ide1 at 0x170-0x177,0x376 on irq 15
       ide3 at 0x168-0x16f,0x36e on irq 11




  A questo punto penso proprio di aver fornito tutte le informazioni in
  mio possesso; attendo solo eventuali feedback.


  4.  Disclaimer

  Questa  una versione che ha inevitabilmente bisogno di una messa a
  punto per togliere grossolani errori, inesattezze e quant'altro di
  inesatto o ambiguo.

  Avrebbe bisogno anche di aggiunte da parte di chi conosce il
  comportamento di altre distribuzioni, altre configurazioni o altre
  situazioni che si possono presentare.

  In ogni caso, usate queste informazioni con cautela, tenendo conto che
  vi sono ampie possibilit che siano presenti errori tali da
  compromettere la stabilit del sistema.

  Attendo quindi consigli, correzioni, insulti ma non attribuitemi
  responsabilit di disastrose cadute dei vostri sistemi.

  Antonio Madesani madesani@versilia.toscana.it




























