Como se comentó en otra parte, la información viene con uname
syscall, 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 Makefile
tambié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_uname
llamada 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 uname
llamada 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 uts
espacios de nombres, lo que sea que signifiquen), por lo que probablemente tendrá que cambiarlo mucho.
domainname
campo lo establece eldomainname
comando, usando lasetdomainname
llamada al sistema. Del mismo modo, elnodename
campo lo establece elhostname
comando, utilizando lasethostname
llamada al sistema. (El valornodename
/hostname
puede almacenarse en/etc/nodename
.)