Pagina 1 di 2

Compilazione kernel e periferiche

Inviato: lun lug 23, 2012 18:13
da -sf
Buongiorno a tutti, sono alle prese con la compilazione dell'ultimo kernel stable (piu' per curiosita' che per necessita) su una slackware64.

Da come ricordo conviene sempre partire da un .config funzionante e dare un bel "make oldconfig". Il mio config e' quello del kernel di default (huge) ma dopo aver compilato senza errori, al boot ottengo un kernel panic relativo ai filesystem (o cosi credo).
Tutte i miei dischi/partizioni sono in ext4 (o per lo meno quelli che vengono montati al boot) e il supporto e' stato abilitato; non sono ancora riuscito a trovare una spiegazione comunque.

Decido cosi di lanciarmi con un config pulito e, abbastanza a sorpresa, compila e boota senza problemi.
I problemi pero' arrivano dopo, principalmente per quanto riguarda l'interfaccia di rete che non viene rilevata.

ifconfig riporta:

Codice: Seleziona tutto

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:480 (480.0 B)  TX bytes:480 (480.0 B)

sit0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 
          NOARP  MTU:1480  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


Nessuna canonica eth/wlan o simili.
Per connettermi al momento sfrutto una scheda wireless pci e ho gia' abilitato il supporto a queste perfiferiche (o almeno credo..)
Idee? cos'e quest'interfaccia sit0?

Secondo quesito: utilizzo i driver proprietari ATi e con il nuovo kernel sembra che la gestione energetica sia peggiorata.. mi spiego: il sistema si avvia in modalita' testuale, con il vecchio kernel al momento dello startx per passare in modalita' grafica si sente chiaramente una variazione della velocita' di rotazione della ventola della scheda video, che penso sia data dai driver che iniziano a lavorare. Con il nuovo kernel questa differenza non la sento invece.
Cambiando kernel e' consigliabile rimuovere e reinstallare i driver? (proprietari, non open)
Qualche tool che permetta di monitorare l'hardware?
Per ora ho provato solo "sensors" gia installata di default; dopo una breve configurazione funziona ma riporta solo la temperatura della cpu. Avete qualche consiglio?

Mi conviene partire comunque dal config del kernel che uso attualmente (e funziona) e cercare di risolvere quel kernel panic o tento di sistemare quello che non va nel nuovo?

Grazie :)

Re: Compilazione kernel e periferiche

Inviato: mar lug 24, 2012 16:46
da 414N
Hai riportato l'output di ifconfig o di "ifconfig -a"? Può darsi che una o più interfacce siano disattivate e non compaiano nell'output normale di ifconfig...
Il mio consiglio rimane comunque di partire da un .config riconosciuto come stabile e da lì scremare la situazione.
-sf ha scritto:Secondo quesito: utilizzo i driver proprietari ATi e con il nuovo kernel sembra che la gestione energetica sia peggiorata.. mi spiego: il sistema si avvia in modalita' testuale, con il vecchio kernel al momento dello startx per passare in modalita' grafica si sente chiaramente una variazione della velocita' di rotazione della ventola della scheda video, che penso sia data dai driver che iniziano a lavorare. Con il nuovo kernel questa differenza non la sento invece.
Cambiando kernel e' consigliabile rimuovere e reinstallare i driver? (proprietari, non open)
Qualche tool che permetta di monitorare l'hardware?
Per ora ho provato solo "sensors" gia installata di default; dopo una breve configurazione funziona ma riporta solo la temperatura della cpu. Avete qualche consiglio?

Dopo un aggiornamento del kernel devi reinstallare i driver ATI/AMD perché questi, durante il processo di installazione, compilano un modulo per la versione del kernel corrente. Ovviamente, cambiando kernel, il modulo compilato per il kernel precedente non è più caricabile.

Re: Compilazione kernel e periferiche

Inviato: mar lug 24, 2012 21:56
da -sf
si e' l'output di ifconfig -a, un semplcie ifconfig mostra solo l'interfaccia lo.
Provero' a compilare dal config del kernel di default allora, esiste un modo per togliere il grosso delle cose che non servono? Giusto per partire con qualcosa di piu' leggero di un huge e poi andare a sistemare il resto "di fino"..

Per i driver in effetti non ci avevo pensato, provero' a reinstallarli

Grazie :)

Re: Compilazione kernel e periferiche

Inviato: mer lug 25, 2012 8:02
da 414N
Prova con un "make localmodconfig" per selezionare i moduli attivi al momento e lasciare fuori il resto.

Re: Compilazione kernel e periferiche

Inviato: mer lug 25, 2012 11:30
da -sf
Edit: niente, con "make localmodconfig" non finisce nemmeno di compilare :(
ecco l'errore

Codice: Seleziona tutto

.....
  CC      drivers/scsi/hpsa.o
  CC      drivers/scsi/eata.o
  CC      drivers/scsi/dc395x.o
  CC      drivers/scsi/tmscsim.o
  LD      drivers/scsi/qla2xxx/qla2xxx.o
  LD      drivers/scsi/qla2xxx/built-in.o
  CC      drivers/scsi/megaraid.o
  CC      drivers/scsi/atp870u.o
  CC      drivers/scsi/gdth.o
  CC      drivers/scsi/initio.o
drivers/scsi/initio.c:131:29: warning: 'i91u_pci_devices' defined but not used
  CC      drivers/scsi/a100u2w.o
  CC      drivers/scsi/3w-xxxx.o
  CC      drivers/scsi/3w-9xxx.o
  CC      drivers/scsi/3w-sas.o
  CC      drivers/scsi/ipr.o
  CC      drivers/scsi/libsrp.o
  CC      drivers/scsi/hptiop.o
  CC      drivers/scsi/stex.o
  CC      drivers/scsi/pmcraid.o
  CC      drivers/scsi/st.o
  LD      drivers/scsi/sd_mod.o
  LD      drivers/scsi/sr_mod.o
  LD      drivers/scsi/scsi_mod.o
  LD      drivers/scsi/scsi_tgt.o
  LD      drivers/scsi/built-in.o
  LD      drivers/built-in.o
  LD      vmlinux.o
  MODPOST vmlinux.o
  GEN     .version
  CHK     include/generated/compile.h
  UPD     include/generated/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1
fs/built-in.o: In function `gfs2_lock':
file.c:(.text+0x3d7b29): undefined reference to `dlm_posix_lock'
file.c:(.text+0x3d7b68): undefined reference to `dlm_posix_unlock'
file.c:(.text+0x3d7b88): undefined reference to `dlm_posix_get'
fs/built-in.o: In function `gdlm_cancel':
lock_dlm.c:(.text+0x3ea315): undefined reference to `dlm_unlock'
fs/built-in.o: In function `gdlm_lock':
lock_dlm.c:(.text+0x3ea522): undefined reference to `dlm_lock'
fs/built-in.o: In function `gdlm_unmount':
lock_dlm.c:(.text+0x3eaaae): undefined reference to `dlm_release_lockspace'
fs/built-in.o: In function `control_unlock':
lock_dlm.c:(.text+0x3eac7d): undefined reference to `dlm_unlock'
fs/built-in.o: In function `sync_lock':
lock_dlm.c:(.text+0x3eadc0): undefined reference to `dlm_lock'
fs/built-in.o: In function `gdlm_put_lock':
lock_dlm.c:(.text+0x3eb69c): undefined reference to `dlm_unlock'
fs/built-in.o: In function `gdlm_mount':
lock_dlm.c:(.text+0x3eba4d): undefined reference to `dlm_new_lockspace'
lock_dlm.c:(.text+0x3ebd09): undefined reference to `dlm_unlock'
lock_dlm.c:(.text+0x3ebd71): undefined reference to `dlm_release_lockspace'
make: *** [.tmp_vmlinux1] Error 1



Se invece uso prima l'opzione "allmodconfig" finisce di compilare correttamente ma al reboot lancia un kernel panic relativo all'impossibilita' di montare la partizione root, anche se il supporto a ext4 e' stato abilitato

Re: Compilazione kernel e periferiche

Inviato: mer lug 25, 2012 11:36
da Ansa89
Hai controllato anche il supporto per il controller del disco?

Re: Compilazione kernel e periferiche

Inviato: mer lug 25, 2012 11:38
da 414N
Allora ti mancherà il driver del chipset sata/pata sulla tua scheda madre.
EDIT: preceduto :p

Re: Compilazione kernel e periferiche

Inviato: mer lug 25, 2012 11:41
da -sf
Edit piu' su :D

Il driver del controller come lo trovo e come lo abilito?
Usando localmodconfig non dovrebbe prendere ed abilitare tutto cio' che e' in uso al momento sul sistema?

Thanks :)

Re: Compilazione kernel e periferiche

Inviato: mer lug 25, 2012 11:44
da Ansa89
-sf ha scritto:Usando localmodconfig non dovrebbe prendere ed abilitare tutto cio' che e' in uso al momento sul sistema?

Sì, ma te lo seleziona come modulo; quindi o crei un initrd, o vai ad impostare il supporto per il filesystem e il controller del disco come "built-in".
I driver sata/pata dovrebbero essere sotto "Device Drivers-->Serial ATA and Parallel ATA drivers".

Re: Compilazione kernel e periferiche

Inviato: mer lug 25, 2012 11:50
da -sf
Ah ecco l'inghippo, provo subito e vediamo.
Che vantaggi ho a creare un initrd anziche includere tutto nel kernel?

Re: Compilazione kernel e periferiche

Inviato: mer lug 25, 2012 11:52
da Ansa89

Re: Compilazione kernel e periferiche

Inviato: mer lug 25, 2012 12:11
da -sf
Quindi in un initrd posso andare a matterci moduli che mi servono all'avvio ma che non sono stati inclusi nel kernel, come ad esempio il supporto a ext4?

Comunque niente da fare, se lancio solo un make localmodconfig non finisce neanche di compilare (come da errore nel post sopra) mentre se uso prima un allmodconfig compila senza problemi ma lancia un kernel panic al boot; il driver del chipset e' adesso abilitato (o almeno credo!).
Faccio ancora un tentativo partendo dal config del generic e includendo ext4 statico e vediamo un po...

Re: Compilazione kernel e periferiche

Inviato: mer lug 25, 2012 12:13
da Ansa89
-sf ha scritto:Quindi in un initrd posso andare a matterci moduli che mi servono all'avvio ma che non sono stati inclusi nel kernel, come ad esempio il supporto a ext4?

Esatto.

Re: Compilazione kernel e periferiche

Inviato: mer lug 25, 2012 15:18
da miklos
aggiungo un po' di teoria alla risposta di Ansa89 :)
il kernel è un binario esattamente come tutti gli altri che utilizziamo regolarmente e come tale ha bisogno di alcuni parametri quando viene lanciato per poter funzionare.
uno di questi parametri è l'initrd che altro non è che un micro-filesystem che il kernel sa leggere in qualunque circostanza(per dovere di cronaca aggiungo che tale supporto puo' essere rimosso dalla configurazione del kernel se si vuole) dove è possibile inserire tutto quello che si vuole far 'vedere' al kernel prima che il filesystem reale venga montato.

pertanto se il supporto al filesystem di default è compilato come modulo affinche tutto funzioni correttamente va creato l'initrd apposito.
a me personalmente nn piace tanto come soluzione perchè ti 'costringe' a fare un ulteriore passaggio quando installo nuovi kernel ma in tante altre distribuzioni viene utilizzato perchè per esempio i bootsplash carini che vediamo al posto della nuda e cruda console dovendo essere attivati il prima possibile vengono installati all'interno di questo particolare filesystem.

Re: Compilazione kernel e periferiche

Inviato: gio lug 26, 2012 14:11
da -sf
Dei bootsplash carini mi importa poco, anzi preferisco vedere i vari messaggi sulla console che scorrono :D
Quindi direi che nel mio caso un initrd e', almeno per ora, inutile.

Comunque ho provato a ricompilare partendo dal config del generci, includendo staticamente il supporto ad ext4 e i driver per il controller del disco; ora finalmente boota ma impiega lo stesso tempo dell'huge a caricare (sicuramente ci sara' altro da eliminare) e sopratutto ho qualche problema nell'installare i driver ati, qualche problema relativo all'impossibilita' di compilare il modulo adatto. Penso il discorso valga anche per il modulo di virtualbox (ma non ho ancora provato).

A questo punto mi sorge un dubbio sulla procedura che uso.. io eseguo: scompatto il tar in /usr/src/versioneKernel -> make localmodconfig/oldconfig per partire dal confing dato per funzionante -> make menuconfig per rivedere il tutto -> make -jX bzImage per compilare.
Sposto il kernel in /boot -> creo una nuova entry in lilo.conf per testarlo e riavvio.
Se riesco a fare il boot allora torno nella dir di compilazione e.. -> make modules -> make modules_install.
Reboot finale.

Diverse guide fanno compilare direttamente i moduli subito dopo il kernel, alcuni pero' sostengono che sia meglio compilared i moduli per un kernel, col kernel stesso che gira.
Io non ho mai notato differenze fra i due metodi (per quel poco che ho fatto), nel senso che non mi e' mai successo che il primo riusciva dove l'altro falliva o viceversa; come mi consigliate di procedere?

In riferimento al post precedente, come mai fallisce la compilazione?
Mi riferisco a:

Codice: Seleziona tutto

.....
  CC      drivers/scsi/hpsa.o
  CC      drivers/scsi/eata.o
  CC      drivers/scsi/dc395x.o
  CC      drivers/scsi/tmscsim.o
  LD      drivers/scsi/qla2xxx/qla2xxx.o
  LD      drivers/scsi/qla2xxx/built-in.o
  CC      drivers/scsi/megaraid.o
  CC      drivers/scsi/atp870u.o
  CC      drivers/scsi/gdth.o
  CC      drivers/scsi/initio.o
drivers/scsi/initio.c:131:29: warning: 'i91u_pci_devices' defined but not used
  CC      drivers/scsi/a100u2w.o
  CC      drivers/scsi/3w-xxxx.o
  CC      drivers/scsi/3w-9xxx.o
  CC      drivers/scsi/3w-sas.o
  CC      drivers/scsi/ipr.o
  CC      drivers/scsi/libsrp.o
  CC      drivers/scsi/hptiop.o
  CC      drivers/scsi/stex.o
  CC      drivers/scsi/pmcraid.o
  CC      drivers/scsi/st.o
  LD      drivers/scsi/sd_mod.o
  LD      drivers/scsi/sr_mod.o
  LD      drivers/scsi/scsi_mod.o
  LD      drivers/scsi/scsi_tgt.o
  LD      drivers/scsi/built-in.o
  LD      drivers/built-in.o
  LD      vmlinux.o
  MODPOST vmlinux.o
  GEN     .version
  CHK     include/generated/compile.h
  UPD     include/generated/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1
fs/built-in.o: In function `gfs2_lock':
file.c:(.text+0x3d7b29): undefined reference to `dlm_posix_lock'
file.c:(.text+0x3d7b68): undefined reference to `dlm_posix_unlock'
file.c:(.text+0x3d7b88): undefined reference to `dlm_posix_get'
fs/built-in.o: In function `gdlm_cancel':
lock_dlm.c:(.text+0x3ea315): undefined reference to `dlm_unlock'
fs/built-in.o: In function `gdlm_lock':
lock_dlm.c:(.text+0x3ea522): undefined reference to `dlm_lock'
fs/built-in.o: In function `gdlm_unmount':
lock_dlm.c:(.text+0x3eaaae): undefined reference to `dlm_release_lockspace'
fs/built-in.o: In function `control_unlock':
lock_dlm.c:(.text+0x3eac7d): undefined reference to `dlm_unlock'
fs/built-in.o: In function `sync_lock':
lock_dlm.c:(.text+0x3eadc0): undefined reference to `dlm_lock'
fs/built-in.o: In function `gdlm_put_lock':
lock_dlm.c:(.text+0x3eb69c): undefined reference to `dlm_unlock'
fs/built-in.o: In function `gdlm_mount':
lock_dlm.c:(.text+0x3eba4d): undefined reference to `dlm_new_lockspace'
lock_dlm.c:(.text+0x3ebd09): undefined reference to `dlm_unlock'
lock_dlm.c:(.text+0x3ebd71): undefined reference to `dlm_release_lockspace'
make: *** [.tmp_vmlinux1] Error 1

Partendo dal config huge, dando localmodconfig e includendo solo ext4 statico (che forse include gia da solo).

Grazie :)