Como comentado em outro lugar, as informações vêm com o uname
syscall, que é codificado no kernel em execução.
A parte da versão é normalmente definida ao compilar um novo kernel pelo Makefile :
VERSION = 3
PATCHLEVEL = 15
SUBLEVEL = 0
EXTRAVERSION =
quando eu tinha tempo para jogar compilando meus kernels, costumava adicionar coisas lá em EXTRAVERSION; que te deu uname -r
coisas do tipo 3.4.1-mytestkernel
.
Eu não o entendo completamente, mas acho que o restante das informações está configurado na Makefile
linha 944 também:
# ---------------------------------------------------------------------------
# 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
Para o restante dos dados, o sys_uname
syscall é gerado usando macros (de uma maneira bastante complicada). Você pode começar daqui se sentir aventureiro.
Provavelmente, a melhor maneira de alterar essas informações é escrever um módulo do kernel para substituir o uname
syscall; Eu nunca fiz isso, mas você pode encontrar informações nesta página na seção 4.2 (desculpe, não há link direto). Observe, no entanto, que esse código está se referindo a um kernel bastante antigo (agora o kernel do Linux tem uts
espaços de nomes, o que quer que eles significem), portanto você precisará alterá-lo muito provavelmente.
domainname
campo é definido pelodomainname
comando, usando asetdomainname
chamada do sistema. Da mesma forma, onodename
campo é definido pelohostname
comando, usando asethostname
chamada do sistema. (Anodename
/hostname
valor pode ser armazenado no/etc/nodename
.)