Sesuai kebutuhan pelanggan, saya menginstal CentOS 5.6 dengan kernel default. Dengan kernel ini diinstal, file time.h termasuk #define CLOCK_MONOTONIC
.
Sekarang, kernel real-time diinstal bersama dengan kernel-devel dan kode kami ingin digunakan CLOCK_MONOTONIC_RAW
. Memang ada sebagai bagian dari file header kernel, tetapi ketika saya mengkompilasi kode kami, itu tidak menemukannya di dalam userspace standar termasuk.
Pertanyaan saya adalah, apa prosedur yang tepat untuk memasukkan / mengganti yang time.h
ditemukan secara default dengan kernel real-time? Dari penelitian saya, sepertinya symlinks buruk, jadi bagaimana seharusnya ditangani? Bagaimana prosedur atau prosesnya? Meng-upgrade ke CentOS 6.0 atau 5.7 bukan opsi per kebutuhan pelanggan.
sumber
Jawaban:
Ada perbedaan utama yang dapat dibuat tentang dari mana file header berasal:
<time.h>
disediakan oleh glibc (misglibc-headers
paket)<linux/time.h>
disediakan oleh header kernel Linux.Mengubah kernel dan paket tajuknya tidak akan memengaruhi
<time.h>
. Hanya mengubah glibc yang akan melakukan itu.Anda harus menemukan bahwa glibc's
<time.h>
termasuk<bits/time.h>
yang menyelesaikan sebagai eg/usr/include/x86_64-linux-gnu/bits/time.h
dan mendefinisikanCLOCK_MONOTONIC_RAW
. Jika tidak, dan Anda tidak dapat memutakhirkannya, maka Anda harus memasukkan kode seperti ini:sumber
Anda hanya perlu melakukannya
#include <linux/time.h>
sumber
make install_headers
. Jika Anda mendapatkan paket kernel yang diperbarui, maka Anda perlu mendapatkan paket kernel_headers yang diperbarui.Header yang instal distribusi Anda bukan yang ada di kernel, mereka adalah sanitzed / versi "userspaced". Anda harus mendapatkan salinan header di include / linux di sumber kernel dan mengatur agar mereka digunakan dalam preferensi dengan yang ada di / usr / include / linux (perlu mencari bendera -I untuk gcc). Dan periksa apakah tidak ada yang salah.
sumber
Saya akan memastikan saya sedang membangun terhadap header yang datang dengan kernel baru.
CLOCK_MONOTONIC_RAW
harus didefinisikan dalamlinux/time.h
. Pertama cari tahu header mana yang Anda gunakan, dan periksa bagaimana didefinisikan dalam file. Anda dapat mendefinisikannya dalam kode Anda (hanya sebagai tanda centang) untuk melihat apa yang terjadi.sumber