Comme indiqué ailleurs, les informations sont fournies avec l' unameappel système, lequel est codé en dur dans le noyau en cours d'exécution.
La partie version est normalement définie lors de la compilation d’un nouveau noyau par le Makefile :
VERSION = 3
PATCHLEVEL = 15
SUBLEVEL = 0
EXTRAVERSION =
quand j'avais le temps de jouer à la compilation de mes noyaux, j'y ajoutais des choses là-bas dans EXTRAVERSION; cela vous a donné des uname -r choses comme 3.4.1-mytestkernel.
Je ne comprends pas tout à fait cela, mais je pense que le reste de l’information se trouve Makefileégalement dans la ligne 944:
# ---------------------------------------------------------------------------
# KERNELRELEASE can change from a few different places, meaning version.h
# needs to be updated, so this check is forced on all builds
uts_len := 64
define filechk_utsrelease.h
if [ `echo -n "$(KERNELRELEASE)" | wc -c ` -gt $(uts_len) ]; then \
echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2; \
exit 1; \
fi; \
(echo \#define UTS_RELEASE \"$(KERNELRELEASE)\";)
endef
define filechk_version.h
(echo \#define LINUX_VERSION_CODE $(shell \
expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 0$(SUBLEVEL)); \
echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';)
endef
$(version_h): $(srctree)/Makefile FORCE
$(call filechk,version.h)
include/generated/utsrelease.h: include/config/kernel.release FORCE
$(call filechk,utsrelease.h)
PHONY += headerdep
headerdep:
$(Q)find $(srctree)/include/ -name '*.h' | xargs --max-args 1 \
$(srctree)/scripts/headerdep.pl -I$(srctree)/include
Pour le reste des données, l' sys_unameappel système est généré à l'aide de macros (d'une manière assez compliquée), vous pouvez commencer à partir d' ici si vous vous sentez aventureux.
Le meilleur moyen de modifier de telles informations consiste probablement à écrire un module de noyau pour remplacer le unamesyscall. Je n'ai jamais fait cela, mais vous pouvez trouver des informations sur cette page à la section 4.2 (désolé, pas de lien direct). Notez cependant que ce code fait référence à un noyau assez ancien (maintenant le noyau Linux a des utsespaces de noms, peu importe leur signification), vous devrez donc probablement le modifier beaucoup.
domainnamechamp est défini par ladomainnamecommande, à l'aide de l'setdomainnameappel système. De même, lenodenamechamp est défini par lahostnamecommande, à l'aide de l'sethostnameappel système. (Lanodename/hostnamevaleur peut être stockée dans/etc/nodename.)