linux user group brescia

immagine del castello

Archivio della mailing list

Oggetto: Re: Messaggio Kernel

Luca Giuzzi giuzzi a dmf.bs.unicatt.it
Sab 25 Mar 2000 13:28:53 UTC
Distinguo due cose:
 1) La SysV IPC (Inter-Process Communication) che definisce una semantica
   per semafori, locks, etc. [nei kernel 2.3.99 c'e' pure l'opzione per
   disattivare/attivare la SHM a parte]: questa e' una parte essenziale
   del kernel e, a meno di sistemi embedded, e' una opzione da lasciare
   attivata
 2) il formato binario usato da System V (ECOFF e, successivamente, ELF,
  ma con alcune sezioni leggermente diverse da quelle di linux) che
  e' parte del pacchetti iBCS (non incluso di default col kernel).
  [e generalmente inutile al giorno d'oggi]

Una parola sui formati binari:
 il formato binario e' il modo in cui un eseguibile (o una libreria)
 sono organizzati. Linux originariamente utilizzava un formato chiamato
 `a.out' e successivamente (all'epoca del kernel 1.2) e' passato al
 formato `ELF' che consente una migliore organizzazione del codice
 [le sezioni dei files sono `meglio definite' e le librerie dinamiche
 non necessitano di una tabella di offsets per funzionare. ]
 Un altro possibile formato per `impacchettare' gli eseguibili e'
 COFF/ECOFF usato da vecchie versioni di SCO (al giorno d'oggi quasi
 tutti i sistemi stanno migrando verso il formato ELF, inclusi Solaris,
 BSD (che predilige ancora l'a.out), SCO, etc.). I moduli iBCS
 (intel binary compatibility system) servono a consentire a linux di 
 caricare questi eseguibili e provvedono un layer di `traduzione' fra
 i diversi tipi di syscall. 

La faccenda dei simboli nel kernel.
 Quando il kernel viene compilato (come ELF), alcuni simboli vengono esportati
 per consentire l'interazione con moduli esterni. Ora: si possono compilare
 i moduli in due modi: settando o meno la variabile CONFIG_MODVERSIONS
 [sotto Loadable Module support]
 Se tale variabile e' settata, a tutti i simboli esportati (pensa a delle
 entries in una liberia) viene aggiunta una stringa che specifica la
 versione del kernel usata. Questo teoricamente dovrebbe consentire di
 conservare la compatibilita' fra moduli compilati per diverse versioni
 del kernel, a meno di cambiamenti drastici nella interfaccia binaria
 (tipo quelli che sono avvenuti nella 2.3). Solitamente la cosa non e'
 particolarmente conveniente, in quanto dopo una upgrade e' comunque bene
 aggiornare tutti i moduli.

Ciao,
 lg




Maggiori informazioni sulla lista Lug