kernel headers, compilazione, glibc: un po di chiarezza

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
first
Linux 3.x
Linux 3.x
Messaggi: 677
Iscritto il: gio 23 giu 2005, 0:00

kernel headers, compilazione, glibc: un po di chiarezza

Messaggio da first »

Ciaa a tutti ho deciso di aprire questo post per capire meglio il problema degli headers.

Io e gallo abbiamo questa configurazione:

Codice: Seleziona tutto

> ls -l /usr/include/{asm*,linux} 
lrwxrwxrwx 1 root root 21 2005-10-17 22:11 /usr/include/asm -> /usr/include/asm-i386 
lrwxrwxrwx 1 root root 35 2005-10-17 22:11 /usr/include/asm-generic -> /usr/src/linux/include/asm-generic/ 
lrwxrwxrwx 1 root root 32 2005-10-17 22:11 /usr/include/asm-i386 -> /usr/src/linux/include/asm-i386/ 
lrwxrwxrwx 1 root root 29 2005-10-17 22:11 /usr/include/linux -> /usr/src/linux/include/linux/
Linus dice di NON creare quei symlink e di non compilare mai il nuovo kernel in /usr/src/linux (qui per leggere il suo commento http://uwsg.iu.edu/hypermail/linux/kern ... /0587.html ).

Da quel poco che ho capito io le glibc dovrebbero arrivare con i loro headers e quelli devono rimanere li, immobili, fissi per sempre, almeno finche non si aggiornano le glibc. E questi headers devono essere indipendenti dal kernel che si utilizza.
Gli headers del kernel invece devono essere utilizzati unicamente se si vuole compilare parti del kernel stesso.

Quindi se io voglio un nuovo kernel NON devo andare a mettere i SUOI header in /usr/include.

Ho un dubbio ora: ma se io scarico i pacchetti tgz del kernel nuovo, i pacchetti degli headers del nuovo kernel vanno a sovrascriversi in /usr/include ?

Vi prego di rispondermi solo DOPO aver letto il link di Linus http://uwsg.iu.edu/hypermail/linux/kern ... /0587.html

Avatar utente
sid77
Linux 3.x
Linux 3.x
Messaggi: 568
Iscritto il: mer 1 giu 2005, 0:00
Slackware: 12.0/12.1/curr (ppc)
Località: PowerPC
Contatta:

Re: kernel headers, compilazione, glibc: un po di chiarezza

Messaggio da sid77 »

first ha scritto:Ciaa a tutti ho deciso di aprire questo post per capire meglio il problema degli headers.
topic spawning wooo-hooo ;-)
(ok torno serio)
first ha scritto:Io e gallo abbiamo questa configurazione:

Codice: Seleziona tutto

> ls -l /usr/include/{asm*,linux} 
lrwxrwxrwx 1 root root 21 2005-10-17 22:11 /usr/include/asm -> /usr/include/asm-i386 
lrwxrwxrwx 1 root root 35 2005-10-17 22:11 /usr/include/asm-generic -> /usr/src/linux/include/asm-generic/ 
lrwxrwxrwx 1 root root 32 2005-10-17 22:11 /usr/include/asm-i386 -> /usr/src/linux/include/asm-i386/ 
lrwxrwxrwx 1 root root 29 2005-10-17 22:11 /usr/include/linux -> /usr/src/linux/include/linux/
Linus dice di NON creare quei symlink e di non compilare mai il nuovo kernel in /usr/src/linux (qui per leggere il suo commento http://uwsg.iu.edu/hypermail/linux/kern ... /0587.html ).
si, non serve creare quei symlink
first ha scritto:Da quel poco che ho capito io le glibc dovrebbero arrivare con i loro headers e quelli devono rimanere li, immobili, fissi per sempre, almeno finche non si aggiornano le glibc. E questi headers devono essere indipendenti dal kernel che si utilizza.
esatto
first ha scritto:Gli headers del kernel invece devono essere utilizzati unicamente se si vuole compilare parti del kernel stesso.

Quindi se io voglio un nuovo kernel NON devo andare a mettere i SUOI header in /usr/include.
la seconda parte è corretta, cosa intendi con "Gli headers del kernel invece devono essere utilizzati unicamente se si vuole compilare parti del kernel stesso" ?
quando compili un kernel quello utilizza gli headers che trova in /usr/src/linux/include/...
first ha scritto:Ho un dubbio ora: ma se io scarico i pacchetti tgz del kernel nuovo, i pacchetti degli headers del nuovo kernel vanno a sovrascriversi in /usr/include ?
assolutamente no! ma hai visto il pacchetto? prova a fare

Codice: Seleziona tutto

less kernel-generic-2.6.13-i486-1.tgz
Secondo me stai facendo un poco di confusione sull'utilizzo dei kernel-headers, prova a leggerti lo slack-desc, te lo riporto qui:
kernel-headers ha scritto:These are the include files from the Linux kernel.

You'll need these to compile most system software for Linux.
capisci? i kernel-headers ti servono se devi compilare un programma tipo acpid che deve fare chiamate al kernel. e la maggior parte dei programmi utilizza ancora i kernel-headers della serie 2.4, sono veramente pochi quelli che hanno bisogno di kernel-headers della serie 2.6

Avatar utente
gallows
Staff
Staff
Messaggi: 3471
Iscritto il: lun 20 set 2004, 0:00
Desktop: cwm
Distribuzione: OpenBSD
Località: ~/
Contatta:

Messaggio da gallows »

Pat Volkerding ha scritto:This package of 2.6.x based /usr/include/linux and /usr/include/asm headers
is being provided by request for some people who need it in order to compile
ASDL modem drivers for 2.6.x. As a general rule, installing kernel headers
that are newer than the kernel glibc was compiled with *may* cause problems,
so unless you need these for a particular reason it's best to stick with the
2.4.x kernel-headers package for now.

Note -- if you compile with NPTL then you might want to use these headers,
and glibc's NPTL was compiled using 2.6 headers, so all should be well.
In that case, specify using NPTL libs and headers with these compile
options:

-I/usr/include/nptl -L/usr/lib/nptl

Good luck!
Dopo questo e le parole di Torvalds beh.. mi sa che userò i kernel-headers originali (anche se devo ammettere di non aver avuto alcun problema fino ad ora).

Avatar utente
Paoletta
Staff
Staff
Messaggi: 3975
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Messaggio da Paoletta »

gallows ha scritto: Dopo questo e le parole di Torvalds beh.. mi sa che userò i kernel-headers originali (anche se devo ammettere di non aver avuto alcun problema fino ad ora).
è quello che ho fatto anche io caro gallo :wink: , anche se finora avevo adottato la filosofia di meritil senza problemi;

sunreal
Master
Master
Messaggi: 1599
Iscritto il: dom 10 apr 2005, 0:00
Slackware: 14.1
Desktop: kde
Località: P.P.P.

Messaggio da sunreal »

Scusate se mi intrometto da terrestre in questo discorso tra marziani, ma un po' più terra terra che vorrebbe dire, tutto sto post?

Avatar utente
sid77
Linux 3.x
Linux 3.x
Messaggi: 568
Iscritto il: mer 1 giu 2005, 0:00
Slackware: 12.0/12.1/curr (ppc)
Località: PowerPC
Contatta:

Messaggio da sid77 »

che non devi prendere per oro colato tutto quello che leggi su internet.
detto questo credo che il mio messaggio sparirà "in a puff of logic" ;-)

ciao

Avatar utente
zzt
Linux 2.x
Linux 2.x
Messaggi: 249
Iscritto il: lun 7 mar 2005, 0:00

Messaggio da zzt »

Azz... sto post mi sta aprendo un mondo... :wink:

Suppongo che le parole di Torvalds, in questo caso siano legge...
Ma c'è un caso che mi aveva portato a fare quei symlink:
se devo utilizzare un kernel patchato e questa patch aggiunge qualche header e devo compilare qualcosa in user-space che usa questi nuovi header, l'unica soluzione perfettamente corretta sarebbe ricompilare le glibc (e probabilmente qualsiasi cosa utilizzi direttamente una features del kernel senza passare per le glibc).... sticaz...

Il fatto che fino ad ora abbia funzionato tutto correttamente è solo perché il caso d'esempio portato da Linus è evidentemente poco frequente... ed io compilo pochissima roba...

Non si finisce mai di imparare...

Avatar utente
gallows
Staff
Staff
Messaggi: 3471
Iscritto il: lun 20 set 2004, 0:00
Desktop: cwm
Distribuzione: OpenBSD
Località: ~/
Contatta:

Messaggio da gallows »

sid77 ha scritto:detto questo credo che il mio messaggio sparirà "in a puff of logic" ;-)
Douglas Adams? :D
zzt ha scritto:Non si finisce mai di imparare...
Quoto.

Avatar utente
sid77
Linux 3.x
Linux 3.x
Messaggi: 568
Iscritto il: mer 1 giu 2005, 0:00
Slackware: 12.0/12.1/curr (ppc)
Località: PowerPC
Contatta:

Messaggio da sid77 »

colpito e affondato!

first
Linux 3.x
Linux 3.x
Messaggi: 677
Iscritto il: gio 23 giu 2005, 0:00

Re: kernel headers, compilazione, glibc: un po di chiarezza

Messaggio da first »

sid77 ha scritto:
first ha scritto:Gli headers del kernel invece devono essere utilizzati unicamente se si vuole compilare parti del kernel stesso.

Quindi se io voglio un nuovo kernel NON devo andare a mettere i SUOI header in /usr/include.
cosa intendi con "Gli headers del kernel invece devono essere utilizzati unicamente se si vuole compilare parti del kernel stesso" ?
quando compili un kernel quello utilizza gli headers che trova in /usr/src/linux/include/...
Ti riporto la frase di Llinus:

not have a single symbolic link in sight (except the one that the
kernel build itself sets up, namely the "linux/include/asm" symlink
that is only used for the internal kernel compile itself)

Io l'ho interpretata cosi': quando do make esso passa al compilatore gli headers che provengono dal tallbar del kernel stesso e non quelle che ci sono in /usr/include. Ma ripeto e' una mia interpretazione.

first
Linux 3.x
Linux 3.x
Messaggi: 677
Iscritto il: gio 23 giu 2005, 0:00

Messaggio da first »

Ora arriva il mio dubbio amletico (alcuni di voi l'avranno gia letto):

Io voglio avere tutto perfetto "alla-Linus" sulla mia slack pero' ho fatto qualche macello e vorrei ritornare alla configurazione "perfetta" vi dico cosa ho combinato in ordine storico:
1) ho installato la current aggiornata a 5 giorni fa
2) come kernel di partenza il 2.4.32 (nb in fase di installazione non ho selezionato il pacchetto kernel source e quindi non esisteva nessuna dir /usr/src/linux )
3) ho scaricato da kernel.org il 2.6.15.1 e l'ho compilato seguendo passo passo l'howto di slacky.it
4) ho cancellato tutti i pacchetti che avevo del kernel 2.4.32 (coi relativi header)

Per necessita ho dovuto ricompilare il 2.6.15.1 ma il make menuconfig si e' stoppato subito perche non trovava alcuni headers (?)

5) ho creato i sopracitati symlink e il make menuconfig e ripartito e ho potuto fare quindi le mie modifiche al kernel.

Ora che la cronostoria e' stata fatta arriva la domanda:

Quale e' la strategia migliore per riportare il mio sistema alla configurazione ideale suggerita da Linus?

che poi "credo" si possa ricondurre a questa domanda:

Come faccio a vedere con quali kernel headers e' stato fatto il pacchetto tgz delle glibc presenti nel ramo current?

Avatar utente
gallows
Staff
Staff
Messaggi: 3471
Iscritto il: lun 20 set 2004, 0:00
Desktop: cwm
Distribuzione: OpenBSD
Località: ~/
Contatta:

Messaggio da gallows »

Elimina i symlink e installa il tgz con gli headers.
Come faccio a vedere con quali kernel headers e' stato fatto il pacchetto tgz delle glibc presenti nel ramo current?
http://www.slackware.at/data/slackware- ... SlackBuild

first
Linux 3.x
Linux 3.x
Messaggi: 677
Iscritto il: gio 23 giu 2005, 0:00

Messaggio da first »

Qui sembra che dica che mi servono anche gli header del 2.4.32



# For dual NPTL/linuxthreads support we need one set of 2.4 kernel sources
# and another set of 2.6 kernel sources under /usr/src/. This specifies the
# exact versions we want to use for compilation:
HEADERSTWOFOUR=2.4.32
HEADERSTWOSIX=2.6.14.3

Quindi presumo che le glibc della current siano state compilate usando un 2.4.32. Si spiegherebbe cosi il motivo per cui rimuovendo i pacchetti headers-kernel 2.4.32 il compilatore non compila piu perche non trova gli headers.

Ora faccio un esperimento: installa SIA il pacchetto headers 2.4.32 sia il pacchetto 2.6.14.3 poi rimuovo il pacchetto headers 2.6.14.3 e se la mia teoria e giusta riesco lo stesso a compilare. Vi faccio sapere subito.....

first
Linux 3.x
Linux 3.x
Messaggi: 677
Iscritto il: gio 23 giu 2005, 0:00

Messaggio da first »

BINGOOOOOOOO!!!!!!!!!!

ho installato i kernel-header del 2.4.32 e quelli del 2.6.14.6
Ho rimosso quelli del 2.6.14.6 con removepkg e....
--> /usr/include/linux/adb.h was found in another package. Skipping.
--> /usr/include/linux/adfs_fs.h was found in another package. Skipping.
--> /usr/include/linux/adfs_fs_i.h was found in another package. Skipping.
--> /usr/include/linux/adfs_fs_sb.h was found in another package. Skipping.
--> /usr/include/linux/affs_fs.h was found in another package. Skipping.
etc etc
mentre ...
--> Deleting /usr/include/asm-i386/voyager.h
--> Deleting /usr/include/linux/8250_pci.h
--> Deleting /usr/include/linux/aio.h
--> Deleting /usr/include/linux/aio_abi.h
--> Deleting /usr/include/linux/arcfb.h
--> Deleting /usr/include/linux/attribute_container.h
--> Deleting /usr/include/linux/audit.h
--> Deleting /usr/include/linux/auxvec

Ovviamente riesco a compilare tutto!

Da quello che ho capito gli headers del 2.4.32 sono "la base di partenza" e NON vanno mai toccati mentre quelli del 2.6.14.6 (oppure quelli propri del kernel che ci siamo compilati noi) sono un di piu o meglio servono per compilare parti proprie di quel particolare kernel.

Avatar utente
salbutamolo
Linux 3.x
Linux 3.x
Messaggi: 905
Iscritto il: lun 12 gen 2004, 0:00
Contatta:

Messaggio da salbutamolo »

Ciao a tutti,
io quando aggiorno il kernel aggiorno anche gli headers...ma pare che questa sia sbagliato. Tuttavia non ho mai avuto problemi di compilazione causati dagli headers. Have a nice day

Rispondi