Uso de encabezados de kernel en tiempo real para compilar código de espacio de usuario frente a encabezados predeterminados


11

Según los requisitos del cliente, instalé CentOS 5.6 con el kernel predeterminado. Con este núcleo instalado, el archivo time.h incluye el archivo #define CLOCK_MONOTONIC.

Ahora, se instaló un kernel en tiempo real junto con el kernel-devel y nuestro código quisiera usarlo CLOCK_MONOTONIC_RAW. Existe como parte de los archivos de encabezado del núcleo, pero cuando compilo nuestro código, no lo encuentra en el espacio de usuario estándar incluido.

Mi pregunta es, ¿cuál es el procedimiento adecuado para incluir / reemplazar lo time.hencontrado por defecto con el kernel en tiempo real? Según mi investigación, parece que los enlaces simbólicos son malos, entonces, ¿cómo se debe manejar? ¿Cuál es el procedimiento o proceso? Actualizar a CentOS 6.0 o 5.7 no es una opción según los requisitos del cliente.


¿Planea insertar este módulo en el núcleo predeterminado de CentOS?
bahamat

Respuestas:


1

Hay que hacer una distinción clave sobre el origen de los archivos de encabezado:

  • <time.h>es proporcionado por glibc (por ejemplo, el glibc-headerspaquete)
  • <linux/time.h> es proporcionado por los encabezados del kernel de Linux.

Cambiar el núcleo y sus paquetes de encabezado no afectará <time.h>. Solo cambiar glibc hará eso.

Debería encontrar que glibc's <time.h>incluye <bits/time.h>que se resuelve como, por ejemplo, /usr/include/x86_64-linux-gnu/bits/time.hy define CLOCK_MONOTONIC_RAW. Si no lo hace, y no puede actualizarlo, tendrá que recurrir a incluir código como este:

#include <time.h>
#ifndef CLOCK_MONOTONIC_RAW
# define CLOCK_MONOTONIC_RAW 4
#endif

0

Solo necesitas #include <linux/time.h>


Gracias por la respuesta. Revisé la ubicación de linux / time.h y tampoco tiene una referencia a "RAW". Estoy ejecutando un kernel actualizado en tiempo real, pero solo necesito entender cómo transferir los encabezados del nuevo kernel que tienen una referencia a "RAW" en los archivos de encabezado del espacio de usuario. ¿Tengo algún sentido o mi enfoque es correcto? Gracias de nuevo por la ayuda.
cabanaboy

@cabanaboy, no estoy seguro de dónde está buscando o de dónde vino el archivo, pero linux / time.h sin duda debería definir CLOCK_MONOTONIC_RAW. Tampoco importa si está ejecutando un kernel en tiempo real o no; Los encabezados son iguales.
psusi

3
@cabanaboy, espera ... estás ejecutando un sistema operativo antiguo que debe haberse enviado con un núcleo anterior a 2.6.28 cuando se agregó. ¿Cómo se instaló el nuevo núcleo? Si lo compiló usted mismo desde la fuente, entonces necesita hacerlo make install_headers. Si obtuvo un paquete de kernel actualizado, entonces necesita obtener el paquete kernel_headers actualizado correspondiente.
psusi

0

Los encabezados que instala su distribución no son los del núcleo, son versiones desinfectadas / "espaciadas por el usuario". Tendría que obtener una copia de los encabezados en include / linux en las fuentes del núcleo y configurarlos para que se usen con preferencia a los de / usr / include / linux (es necesario deshabilitar el indicador -I para gcc). Y verifique si nada falla.


0

Me aseguraría de construir contra los encabezados que vienen con el nuevo núcleo. CLOCK_MONOTONIC_RAWdeben definirse en linux/time.h. Primero averigüe qué encabezados está utilizando y compruebe cómo se define en el archivo. Puede definirlo en su código (solo como un cheque) para ver qué sucede.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.