2

研究目的で、llvm-gcc (llvm バージョン 1.7) を使用して、Linux カーネル ソース コード (バージョン 2.6.18.8) でドライバー プログラム (linux/drivers/net/zorro8390.c) をコンパイルしようとしていますが、 jiffies.h からの多くのエラー:

bash-3.2$ llvm-gcc -D__GNUCC -E -I../../include zorro8390.c -o test.o
In file included from ../../include/linux/lockdep.h:12,
                 from ../../include/linux/spinlock_types.h:12,
                 from ../../include/linux/spinlock.h:78,
                 from ../../include/linux/module.h:10,
                 from zorro8390.c:22:
../../include/linux/list.h:887:2: warning: #warning "don't include kernel headers in userspace"
In file included from zorro8390.c:30:
../../include/linux/jiffies.h:210:31: error: division by zero in #if
../../include/linux/jiffies.h:210:31: error: division by zero in #if
...(a bunch of same errors)
../../include/linux/jiffies.h:432:28: error: division by zero in #if

このエラーに関する多くの議論をグーグルで検索しましたが、その多くは make コマンドを使用してカーネルを構築することに関するものです。llvm-gcc を直接使用する場合の修正方法はまだわかりません。それについて何か提案はありますか?ご助力ありがとうございます!

ダニエル

4

4 に答える 4

1

Linux カーネル ソース ファイルを手動でコンパイルするときに、コマンド ラインで定義する必要がある多くの項目のいくつかを定義していないため、このエラーが発生することはほぼ確実です。このメッセージもヒントです。

linux/list.h:887:2: warning: #warning "don't include kernel headers in userspace"

コマンド ラインで V=1 を使用してカーネルの通常のビルドを実行しmake、出力をファイルに記録し、zorro8390.c の行を掘り出す必要があります。これにより、必要な追加の -D スイッチがわかります。他にも必要なものがあるかもしれません (-I、-include など)。

于 2010-07-31T22:49:28.340 に答える
0

カーネルヘッダーにアクセスするプログラム(ti-davinciツールセット)をクロスコンパイルしたときに同じエラーが発生しました。ここの情報を使用して分類しました。

ディストリビューションのヘッダーファイルをパッケージ化する正しい方法は、カーネルソースディレクトリから「makeheaders_install」を実行してヘッダーを/ usr / includeにインストールしてから、Cライブラリパッケージを再構築することです。インストールされたカーネルヘッダー。

これにより、カーネルソースディレクトリに/ usr / includeフォルダーが作成され、インクルードするヘッダーが含まれていました。

于 2013-03-07T09:28:56.630 に答える
0

HZjiffies はカーネルの内部クロック ティックであり、どの iirc が 1 秒あたりの jiffy の数であるかという定義に依存します。これは通常、構成定数です (かつて 100 から 1024 になったことを覚えていますが、最近はそれ以上になっているかもしれません)。AndHZは通常、分割で使用されるため、div/0 エラーが発生します。

したがって、これらは@Zackが正しく言及している問題です。構成定義などはありません。しかし、試して定義しHZて(または今日は何と呼ばれているか)、機能させることができるかどうかを確認できます。

于 2010-07-31T22:59:06.787 に答える
0

私の場合#include <linux/time.h>はヘッダーにありましたが、time.hヘッダーファイルがアウトから欠落していました... osprey/obj/include/linux. ヘッダーを out フォルダーに追加するとすぐに、エラーは解決されました。 linux/time.h必要な適切な定義がありました。
何らかの理由で、不足しているファイルを取得する前にエラーを取得しました。

于 2016-05-06T03:44:17.640 に答える