2012-05-10 8 views
0

私はLinuxカーネル/システム開発の初心者です。Linuxユーザー空間アプリケーションコンパイルエラー

以下

は、私は自分のアプリケーション

CROSS_COMPILE ?= 
KERNEL_DIR ?= /usr/src/linux 

CC  := $(CROSS_COMPILE)gcc 
KERNEL_INCLUDE := -I/usr/include 
CFLAGS  := -W -Wall -g $(KERNEL_INCLUDE) 
LDFLAGS  := -g 

all: finder-drv 

finder-drv: finder.o 
    $(CC) $(LDFLAGS) -o [email protected] $^ 

clean: 
    rm -f *.o 
    rm -f finder 

をコンパイルするために使用していたMakefileである私は、エラー以下になっています:

/usr/include/arm-linux-gnueabi/sys/ioctl.h:22:22: fatal error: features.h: No such file or directory 

features.hが欠落している理由を私は知りません。

make headers_install INSTALL_HDR_PATH=/usr 

誰がどのようにカーネルヘッダファイルは、ユーザー空間のappliationに使用/問題を修正し、正しくリンクする教えてもらえます:

この問題は、私は次のコマンドを実行した後に来ましたの?

+0

アーキテクチャがx86のときに「アーム」から何かを組み込むのはなぜですか? – Shahbaz

+0

Shahbaz:私のアーキテクチャはARMです。私はARCH変数を使用していません – MA1

答えて

2

問題が解決しました。

ユーザ空間のアプリケーションのための輸出カーネルヘッダへの正しいコマンドは、私は/usr代わりの/usr/include

を与えている

make headers_install INSTALL_HDR_PATH=/usr/include

を下回っている私には、以下を使用してlibc-devを再インストールして/usr/includeで削除されたファイルを回復しましたコマンド

apt-get install lib6-dev --reinstall

クリス、お時間をいただきありがとうございます 助けて。

+0

あなたは解決策がありがとう。カーネルのユーザーインターフェースへの独自の変更を加えない限り、ヘッダーを再エクスポートする必要はありません。 'sudo apt-get install build-essential'は、基本的なユーザー空間を構築するために必要なもの(ツール、インクルードなど) Ubuntuのアプリケーション –

+0

Chris、これは初めてのLinuxシステム/カーネルプログラミングです。だから私はただ試して、物事を学んでいるだけです。 – MA1

+0

あなたが意味するのは:apt-get install libc-dev --reinstall –

2

ユーザー空間プログラムを直接カーネルに対してコンパイルすることは機能しません。

ユーザースペースプログラムを作成する場合は、エクスポートされたヘッダーに対してコンパイルし、syscallsなどのエクスポートされた機能のみを使用します。 Cライブラリによって提供されるプロキシを経由する可能性があります。

カーネルモジュールを作成する場合は、独自のmakefileを作成するのではなく、カーネルビルドシステムを使用する必要があります。

+0

Chrisに感謝します。私はuserspaceプログラムを書いています。以前は私のアプリケーションをコンパイルするときに、いくつかのヘッダファイルが見つかりませんでした。だから私はmakeheaders_install INSTALL_HDR_PATH =/usrを使ってカーネルヘッダーをユーザースペースにエクスポートしようとしましたが、このコマンドの後にはすべてがうんざりしています。これまでに働いていたことは今働いていません。あなたは救済策を提案できますか? – MA1

+0

ヘッダーが見つからない場合は、現代のLinux用ではないプログラムがあるか、既存のインクルードパス内に適切なヘッダーが見つからないか、ユーザースペースプログラムで利用できない機能を使用しようとしている可能性があります。また、クロスツールチェーンとのホストインクルードパス/ usr/includeの壊れたミックスがあるようです。あなたのターゲットプラットフォームのツールチェーンで動作することが知られている「hello world」やデモプロジェクトを見つけることができますか? –

+0

クリス、上記の問題を除いてすべてのものが動作しています。私は、カーネルバージョン3.1のpandaboardでUbuntu 11.04を使用しています。私は、単一のエラーなしに、毎日カーネルモジュールを構築します。実際に問題を抱えているコードは1歳以上です。しかし、心配するのは、問題のあるコードで使用されているヘッダーファイルが私のカーネルモジュールでも使用されており、モジュールが正常にビルドされているということです。 "make headers_install INSTALL_HDR_PATH =/usr"の後に問題が発生しました。カーネルのヘッ​​ダーなどをクリーンな状態にリセットする方法を教えてください。ヘッダーの再インストール/インストールが機能しませんでした – MA1

関連する問題