Zgodnie z wymaganiami klienta zainstalowałem CentOS 5.6 z domyślnym jądrem. Po zainstalowaniu tego jądra plik time.h zawiera plik #define CLOCK_MONOTONIC
.
Teraz zostało zainstalowane jądro czasu rzeczywistego wraz z jądrem-devel i nasz kod chciałby użyć CLOCK_MONOTONIC_RAW
. Istnieje jako część plików nagłówkowych jądra, ale kiedy kompiluję nasz kod, nie znajduje go w standardowej przestrzeni użytkownika.
Moje pytanie brzmi: jaka jest właściwa procedura włączania / zastępowania time.h
znalezionego domyślnie jądra w czasie rzeczywistym? Z moich badań wynika, że dowiązania symboliczne są złe, więc jak sobie z tym poradzić? Jaka jest procedura lub proces? Aktualizacja do CentOS 6.0 lub 5.7 nie jest opcją dla wymagań klienta.
centos
linux-kernel
header-file
cabanaboy
źródło
źródło
Odpowiedzi:
Należy wyróżnić, skąd pochodzą pliki nagłówkowe:
<time.h>
jest dostarczany przez glibc (np.glibc-headers
pakiet)<linux/time.h>
jest dostarczany przez nagłówki jądra Linux.Zmiana jądra i jego pakietów nagłówkowych nie wpłynie na to
<time.h>
. Wystarczy zmiana glibc.Powinieneś znaleźć, że glibc
<time.h>
zawiera,<bits/time.h>
które rozwiązuje jak np./usr/include/x86_64-linux-gnu/bits/time.h
I definiujeCLOCK_MONOTONIC_RAW
. Jeśli tak się nie stanie i nie możesz go zaktualizować, musisz zastosować kod taki jak ten:źródło
Musisz tylko
#include <linux/time.h>
źródło
make install_headers
. Jeśli masz zaktualizowany pakiet jądra, musisz uzyskać odpowiedni zaktualizowany pakiet kernel_headers.Nagłówki, które instaluje Twoja dystrybucja, nie są tymi w jądrze, są to wersje sanitzed / „userspaced”. Będziesz musiał pobrać kopię nagłówków w pliku include / linux w źródłach jądra i skonfigurować je tak, aby były używane zamiast tych w katalogu / usr / include / linux (musisz zmienić flagę -I dla gcc). I sprawdź, czy nic nie zapali się.
źródło
Upewniam się, że buduję na podstawie nagłówków dostarczonych z nowym jądrem.
CLOCK_MONOTONIC_RAW
należy zdefiniować wlinux/time.h
. Najpierw dowiedz się, jakich nagłówków używasz, i sprawdź, jak zdefiniowano to w pliku. Możesz zdefiniować to w swoim kodzie (tylko jako czek), aby zobaczyć, co się stanie.źródło