Menggunakan header kernel real-time untuk mengkompilasi kode userspace vs header default

11

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.hditemukan 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.

cabanaboy
sumber
Apakah Anda berencana memasukkan modul ini ke dalam kernel CentOS default?
bahamat

Jawaban:

1

Ada perbedaan utama yang dapat dibuat tentang dari mana file header berasal:

  • <time.h>disediakan oleh glibc (mis glibc-headerspaket)
  • <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.hdan mendefinisikan CLOCK_MONOTONIC_RAW. Jika tidak, dan Anda tidak dapat memutakhirkannya, maka Anda harus memasukkan kode seperti ini:

#include <time.h>
#ifndef CLOCK_MONOTONIC_RAW
# define CLOCK_MONOTONIC_RAW 4
#endif
Stuart Caie
sumber
0

Anda hanya perlu melakukannya #include <linux/time.h>

psusi
sumber
Terima kasih atas tanggapannya. Saya memeriksa lokasi linux / time.h dan juga tidak memiliki referensi ke "RAW". Saya menjalankan kernel real-time yang diperbarui, tetapi saya hanya perlu memahami cara mentransfer header kernel baru yang memang memiliki referensi untuk "RAW" ke dalam file header userspace. Apakah saya masuk akal atau pendekatan saya benar? Sekali lagi terima kasih atas bantuannya.
cabanaboy
@cabanaboy, saya tidak yakin di mana Anda mencari atau dari mana file itu berasal, tetapi linux / time.h pasti akan mendefinisikan CLOCK_MONOTONIC_RAW. Tidak masalah apakah Anda menjalankan kernel real-time atau tidak; headernya sama.
psusi
3
@cabanaboy, tunggu ... Anda menjalankan os lama yang harus dikirim dengan kernel yang lebih tua dari 2.6.28 saat ditambahkan. Bagaimana Anda menginstal kernel baru? Jika Anda membuatnya dari sumber sendiri, maka Anda perlu melakukannya make install_headers. Jika Anda mendapatkan paket kernel yang diperbarui, maka Anda perlu mendapatkan paket kernel_headers yang diperbarui.
psusi
0

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.

vonbrand
sumber
0

Saya akan memastikan saya sedang membangun terhadap header yang datang dengan kernel baru. CLOCK_MONOTONIC_RAWharus didefinisikan dalam linux/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.

pengguna3275885
sumber