Como se comentó en otra parte, la información viene con unamesyscall, que está codificada en el núcleo en ejecución.
La parte de la versión normalmente se establece cuando el Makefile compila un nuevo núcleo :
VERSION = 3
PATCHLEVEL = 15
SUBLEVEL = 0
EXTRAVERSION =
cuando tenía tiempo para jugar a compilar mis núcleos, solía agregar cosas allí en EXTRAVERSIÓN; que dio uname -r con cosas como 3.4.1-mytestkernel.
No lo entiendo completamente, pero creo que el resto de la información está configurada Makefiletambién en la línea 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
Para el resto de los datos, la sys_unamellamada al sistema se genera utilizando macros (de una manera bastante complicada), puede comenzar desde aquí si se siente aventurero.
Probablemente la mejor manera de cambiar dicha información es escribir un módulo del núcleo para anular la unamellamada al sistema; Nunca hice eso, pero puedes encontrar información en esta página en la sección 4.2 (lo siento, no hay enlace directo). Sin embargo, tenga en cuenta que ese código se refiere a un kernel bastante antiguo (ahora el kernel de Linux tiene utsespacios de nombres, lo que sea que signifiquen), por lo que probablemente tendrá que cambiarlo mucho.
domainnamecampo lo establece eldomainnamecomando, usando lasetdomainnamellamada al sistema. Del mismo modo, elnodenamecampo lo establece elhostnamecomando, utilizando lasethostnamellamada al sistema. (El valornodename/hostnamepuede almacenarse en/etc/nodename.)