¿Cómo comstackr contra un kernel personalizado (Debian)?

Hay un file version.h en /usr/include/linux . Muchos files de encabezado incluyen este file y usan las defines para sus propios ifdefs .

Sin embargo, cuando compilo mi propio kernel, no puedo ver cómo esto puede reflejarse correctamente en, por ejemplo, version.h .

En realidad, esto es válido para todos los files de encabezado relacionados con el kernel. AFAICS /usr/include/linux siempre representan el núcleo que viene con mi distribución y ni el kernel en ejecución ni el kernel que digo se make mediante SYSSRC .

En el pasado, recurrí a la creación de enlaces simbólicos a mis propias fonts de kernel, pero tengo la sensación de que esta no es la forma correcta.

¿Cómo se supone que esto funcione? ¿Cómo compilo (por ejemplo, un module kernel) contra un kernel personalizado?

Al configurar un sistema contra su propio kernel personalizado, le sugiero que agregue un nombre a la versión actual en sus fonts modificadas del kernel.

Por ejemplo, en Armbian crean sus propios packages kernel y agregan un -sunxi a kernel.release.

Takin como un ejemplo que modifica la versión 4.6.3 del kernel:

 root@ruir:/usr/src/linux-headers-4.6.3-sunxi# grep -ri 4.6.3-sunxi * include/generated/utsrelease.h:#define UTS_RELEASE "4.6.3-sunxi" include/config/kernel.release:4.6.3-sunxi 

y también, para los modules kernel, en /lib/modules/4.6.3-sunxi/build :

 include/generated/utsrelease.h:#define UTS_RELEASE "4.6.3-sunxi" include/config/auto.conf.cmd:ifneq "$(KERNELVERSION)" "4.6.3-sunxi" include/config/kernel.release:4.6.3-sunxi 

(vea instalar sysdig en ARM / Armbian Jessie – module comstackdo en la versión incorrecta del kernel )

Como podemos ver, esto se puede ver en uname -r :

 $uname -r 4.6.3-sunxi 

En cuanto a los packages de kernel personalizados:

 $dpkg -l | grep sunxi ii linux-dtb-next-sunxi 5.16 armhf Linux DTB, version 4.6.3-sunxi ii linux-firmware-image-next-sunxi 5.16 armhf Linux kernel firmware, version 4.6.3-sunxi ii linux-headers-next-sunxi 5.16 armhf Linux kernel headers for 4.6.3-sunxi on armhf ii linux-image-next-sunxi 5.16 armhf Linux kernel, version 4.6.3-sunxi 

En cuanto a agregar sus propios encabezados de su núcleo de compilation, me referiré a KernelHeaders (el énfasis es que el negrita es mío); Si está reemplazando versiones menores del kernel, puede (o no) salirse con la suya solo make headers_install .

Progtwigs de espacio de usuario

En general, los progtwigs de espacio de usuario se construyen sobre los files de encabezado provistos por la distribución, generalmente de un package llamado glibc-devel, glibc-kernheaders o linux-libc-dev. Estos files de encabezado son a menudo de una versión anterior del kernel, y no pueden ser reemplazados de manera segura sin rebuild también glibc. En particular, instalar / usr / include / linux como un enlace simbólico a / usr / src / linux / include o / lib / modules / * / build / include / linux es altamente desaconsejable ya que frecuentemente rompe las aplicaciones de reconstrucción. Por ejemplo, los kernels más antiguos tenían los files de encabezado específicos de architecture en include / asm – $ {arch} en lugar de arch / $ {arch} / include / asm y tenían un enlace simbólico al directory específico de la architecture.

La forma correcta de empaquetar los files de encabezado para una distribución es ejecutar 'make headers_install' desde el directory de origen del kernel para instalar los encabezados en / usr / include y luego rebuild el package de biblioteca C, con una dependencia en la versión específica de the just instaló los encabezados del kernel.

Si está distribuyendo un progtwig de espacio de usuario que depende de una versión específica de algunos encabezados del kernel, por ejemplo, porque su progtwig se ejecuta solo en kernels parcheados o muy recientes, no puede confiar en los encabezados en / usr / include. Tampoco puede usar los files de encabezado de / usr / src / linux / include o / lib / modules / * / build / include / porque no se han preparado para su inclusión en el espacio de usuario. El kernel debería advertirte sobre esto si lo intentas y te dirige a esta página Wiki. La forma correcta de abordar este problema es aislar las interfaces específicas que necesita, por ejemplo, un único file de encabezado que está parcheado en un nuevo kernel que proporciona los numbers de ioctl para un dispositivo de caracteres utilizado por su progtwig. En su propio progtwig, agregue una copy de ese file fuente, con un aviso de que debe mantenerse sincronizado con las nuevas versiones del kernel. Si su progtwig no tiene licencia bajo GPLv2, asegúrese de tener permiso del autor de ese file para distribuirlo bajo la licencia de su propio progtwig. Como su progtwig ahora depende de las interfaces del kernel que pueden no estar presentes en un núcleo regular, es una buena idea agregar comprobaciones en time de ejecución que aseguren que el kernel comprenda la interfaz y brinde un post de error útil si no hay un respaldo a una versión anterior. interfaz.

También para el desarrollo del kernel; o comstackndo un kernel / module para un server diferente o para un kernel diferente con múltiples versiones de kernel instaladas, SYSSRC puede usarse para especificar una location de fuente de kernel alternativa.