web-dev-qa-db-ja.com

buildrootコンパイルドライバー

組み込みLinuxのコンパイルにBuildrootを使用しています。ターゲットのMakefile構成があるのでうまく機能しますが、USBデバイス用のドライバーが必要になりました。 buildroots /output/Host/usr/bin/arm-none-linux-gnueabi-c++を使用して、ホストLinuxでQt appilactions(c ++)をコンパイルしてLinuxをターゲットにすることができます。うまく機能します。

今私は このドライバー のcファイルをコンパイルしようとしています。

私はそれを次のように呼んでいます:

/output/Host/usr/bin/arm-none-linux-gnueabi-gcc -Wall -D__KERNEL__ -DMODULE -I/home/buildroot-2012.08/output/build/linux-2.6.35.3/include -DMODVERSIONS -include /home/buildroot-2012.08/output/build/linux-2.6.35.3/include/config/modversions.h -I /home/buildroot-2012.08/output/build/linux-2.6.35.3/drivers/usb/serial/ -O   -c -o ftdi_sio.o ftdi_sio.c

エラーが発生します:

output/build/linux-2.6.35.3/include/linux/linkage.h:5:致命的なエラー:asm/linkage.h:そのようなファイルまたはディレクトリはありません

  1. コンパイルするドライバーをどのように構成する必要がありますか?
  2. ターゲットLinuxでそれを行う他の方法はありますか?たぶん私はそれを正しい方法でやっていない。
4
user257980

_asm/_は、ターゲットアーキテクチャへのシンボリックリンクです。存在しない場合は、カーネルビルドディレクトリconfigureにターゲットがない可能性があります(そうでない場合は、_module_headers_だけで作成できます)

コマンドライン、カスタムMakefile、またはBuildrootパッケージ(どのバージョンのBuildrootを使用しているか)を使用しているかどうかは、質問からは明らかではありません。

コマンドラインは、カーネルモジュールではなくCオブジェクト_.o_を構築しています(_.o_はバージョン2.4までカーネルモジュールの拡張でしたが、2.6からは_.ko_です)

フラグについてよくわからない場合は、カーネルモジュールのビルド、ビルド、ログの詳細度を上げてから、同じものを使用してください。

カーネルには モジュールのビルド への道があり、Buildrootにはパッケージへの道があります。おそらく、モジュールをビルドするための新しいパッケージを作成するのが最善です(他にビルドするパッケージがすでにあるかどうかを確認してください)モジュール)。

この例 は少し古いですが、おそらく助けになります。

編集

_ftdi_sio.ko_モジュールはディレクトリ/lib/modules/$(uname -r)/kernel/drivers/usb/serial/に生成されます

ただし、builtinとして構成することもできるため、_.ko_が生成されない場合は、 構成 のシンボル SB_SERIAL_FTDI_SIO を確認してください(モジュールの組み込みyの場合はmである必要があります) )。

組み込みまたは挿入されている場合は、実行時に ftdi_sio というターゲットに_/proc_インターフェイスが存在するはずです。それを見つけてください。

3
Alex