リアルタイムカーネルヘッダーを使用してユーザースペースコードとデフォルトヘッダーをコンパイルする


11

顧客の要件に従って、デフォルトのカーネルでCentOS 5.6をインストールしました。このカーネルをインストールすると、time.hファイルにが含まれます#define CLOCK_MONOTONIC

これで、kernel-develとともにリアルタイムカーネルがインストールされ、コードでを使用したいと考えていますCLOCK_MONOTONIC_RAW。カーネルのヘッ​​ダーファイルの一部として存在しますが、コードをコンパイルすると、標準のユーザー空間インクルードに含まれていません。

私の質問は、time.hリアルタイムカーネルでデフォルトで見つかったものを含める/置き換えるための適切な手順は何ですか?私の調査によると、シンボリックリンクは悪いようです。どうすれば処理できますか?手順またはプロセスは何ですか?CentOS 6.0または5.7へのアップグレードは、お客様の要件によるオプションではありません。


このモジュールをデフォルトのCentOSカーネルに挿入する予定ですか?
バハマ

回答:


1

ヘッダーファイルがどこから来るのかについて、重要な違いがあります。

  • <time.h>glibcによって提供されglibc-headersます(例:パッケージ)
  • <linux/time.h> Linuxカーネルヘッダーによって提供されます。

カーネルとそのヘッダーパッケージを変更しても影響はありません<time.h>。それを行うのはglibcを変更することだけです。

glibc には、egとして解決され、定義されるincludeが<time.h>含まれ<bits/time.h>ていることがわかり/usr/include/x86_64-linux-gnu/bits/time.hますCLOCK_MONOTONIC_RAW。そうでない場合で、アップグレードできない場合は、次のようなコードを含める必要があります。

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

0

あなたはただする必要があります #include <linux/time.h>


ご回答ありがとうございます。linux / time.hの場所を確認したところ、「RAW」への参照がありません。私は更新されたリアルタイムカーネルを実行していますが、「RAW」への参照を持つ新しいカーネルのヘッ​​ダーをユーザースペースヘッダーファイルに転送する方法を理解する必要があります。私は意味をなしていますか、または私のアプローチは正しいですか?助けてくれてありがとう。
cabanaboy 2012年

@cabanaboy、あなたがどこを見ているのか、ファイルがどこから来たのかはわかりませんが、linux / time.hはCLOCK_MONOTONIC_RAWを定義するはずです。また、リアルタイムカーネルを実行しているかどうかは関係ありません。ヘッダーは同じです。
psusi

3
@cabanaboy、ちょっと待ってください。2.6.28より古いカーネルが追加されたときに出荷されているはずの古いOSを実行しています。どのようにして新しいカーネルをインストールしましたか?自分でソースからビルドした場合は、を実行する必要がありmake install_headersます。更新されたカーネルパッケージを取得した場合、対応する更新されたkernel_headersパッケージを取得する必要があります。
psusi

0

ディストリビューションがインストールするヘッダーはカーネル内のヘッダーではなく、サニタイズ/「ユーザースペース」バージョンです。カーネルソースのinclude / linuxにあるヘッダーのコピーを取得し、/ usr / include / linuxにあるヘッダーよりも優先して使用されるように設定する必要があります(gccの-Iフラグをフロブする必要があります)。そして、何もミスファイアがないか確認してください。


0

新しいカーネルに付属しているヘッダーに対してビルドしていることを確認します。 CLOCK_MONOTONIC_RAWで定義する必要がありますlinux/time.h。まず、使用しているヘッダーを確認し、ファイルでどのように定義されているかを確認します。これをコードで(チェックとしてのみ)定義して、何が起こるかを確認できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.