Re: [FAQ] Contribution
On Wed, Sep 25, 2002 at 09:52:21AM +0200, Romuald DELAVERGNE wrote:
> Après quelques recherches voilà ce que je peux rajouter à propos d'uname.
> La commande 'uname' fait uniquement appel à la fonction système uname (man
> 2 uname).
> Les infos qu'elle renvoie sont stockées dans un buffer qui est initialisé
> à la compilation du noyau.
> Elles sont d'ailleurs accessible dans /proc/sys/kernel/.
> Voici le fichier source: rep_linux/init/version.c
> D'ailleurs dans 'include/linux/uts.h' on peut voir le fameux 'unknown' en
> dur.
> J'en déduit donc que ce que renvoie uname n'est pas la config de la
> machine mais celle de la machine où a été compilé le noyau. Il n'y a que
> le nom de la machine qui serait calculé dynamiquement.
> Arrêtez-moi si j'ai dit des conneries.
Correct, le noyau a une structure system_utsname initialisée
à la compilation (dans init/version.c). Apparement, les
seuls champs de la structure qui changent après sont:
- Le nom de la machine (avec sethostname) (kernel/sys.c)
- Le domaine de la machine (setdomainname) (kernel/sys.c)
(Je sais pas si on peut parler de "calcul dynamique" dans ce
cas là... Ça fait toujours partie de la structure.)
> J'en déduit donc que ce que renvoie uname n'est pas la config de la
> machine mais celle de la machine où a été compilé le noyau.
Heureusement, ça n'est pas vrai (à moins que je n'ai pas
compris), sinon les noyaux cross-compilés (compilé sur un
PC pour un Mac par exemple) diraient "i686" au lieu de
"PowerPC" :-) Les valeurs sont choisies par le
compilateur, suivant la configuration du noyau:
Makefile:
$(CC) [...] -DUTS_MACHINE='"$(ARCH)"' [...] -c -o init/version.o init/version.c
(donc, la "machine" prend la valeur de l'architecture pour
laquelle on compile). Pareil pour UTS_RELEASE, en un peu
plus compliqué.
Donc:
- uname(1) ne fait que écrire en humain le contenu d'une
structure du noyau
- cette structure est initialisée au moment de la
compilation
- le hostname/domainname est ensuite sauvé dans cette
structure
Et par conséquence: l'architecture et processeur indiqué par
uname indiquent ce pour quoi ce noyau a été compilé, ET NON
PAS ce sur quoi il tourne en ce moment. Ce sur quoi il
tourne en ce moment est indiqué par un cat /proc/cpuinfo.
Bon c'est pas tout ça, mais mon système ne boote toujours
pas.
A+
Yves.
Reply to: