1

Ubuntuの新規インストールで、PC用のNvidiaドライバーをコンパイルするために使用した他のパッケージの中で、build-essentialパッケージをインストールしました。つまり、カーネルとモジュールのコンパイルは PC 上で機能します。

同じ PC で、gcc 4.4.3 に基づく Google NDK ツールチェーンを使用して、Android Linux カーネルをクロスコンパイルしようとしました。

コンパイルはスムーズに進みますが、最終的には次の出力が得られます。

  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
  make[1]: `include/generated/mach-types.h' is up to date.
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  Building modules, stage 2.
  MODPOST 0 modules

「make menuconfig」を呼び出してから「make」を実行する前に、「make prepare」を実行しました。

ビルド サーバー上の同じツールチェーンは、git リポジトリから複製された同じファイルで動作することに注意してください。要するに、同じカーネル ソース、同じツールチェーンがサーバー上でモジュールをビルドし、私の PC ではモジュールをビルドしません。

.config では「ロード可能なモジュールのサポート」が有効になっています。

$cat modules.order 
kernel/drivers/scsi/scsi_wait_scan.ko
kernel/drivers/net/wireless/bcmdhd/dhd.ko
kernel/drivers/net/wireless/btlock/btlock.ko
kernel/drivers/net/tun.ko

Makefile には正しい obj-m と obj-$ が設定されています。これは、1 台の PC で動作することからも明らかです。

PC で Android カーネル用のモジュールをコンパイルできない理由について、いくつかの洞察を得ることができてうれしく思います。

4

1 に答える 1

2

多くの検索の後、私は答えを見つけました。

これがこの問題の原因であると誰もが考えるとはほとんど考えられないため、ここで共有しています。

色を自動的に提供し、結果に番号を付けるためにGREP_OPTIONSを設定しました。モジュールをビルドするスクリプトがgrepに依存しているようで、めちゃくちゃになっているようです。

envt 変数を設定解除すると、modpost が正常に実行されます。

したがって、解決策は次のとおりです。

GREP_OPTIONS=

そして、プロファイルと .bashrc スクリプトから設定を削除します。

于 2012-12-23T14:42:01.383 に答える