
Devkit 8000 用の Linux デバイス ドライバーをビルドしようとしています。次のエラー メッセージが表示されます。
指示に従おうとすると、よくわからない「はい/いいえ」の質問がいくつも表示されます。最終的には、25 種類のプロセッサ(?) から選択することになります。
これが私のメイクファイルです:
ifeq ($(KERNELRELEASE),)
KERNELDIR = ~/sources/linux-3.2.6
PWD := $(shell pwd)
modules:
$(MAKE) ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- -C $(KERNELDIR) M=$(PWD) modules
.PHONY: modules clean
else
# called from kernel build system: just declare what our modules are
obj-m := LED_timer.o
endif
私のコード自体はまだ関連性がないと思うし、知る私のソースコードにはバグがたくさんあるので、見たくないですよね、ハハ。
答え1
使用しているソースをどこから入手したかは述べていませんが、明らかに.config
そこには無効な部分があります。これは、プロセッサの種類など、さまざまなオプションを設定するために使用されます。これらのオプションは文字通り何百もあり、互いに複雑に依存しています (たとえば、選択したプロセッサによって、他の選択肢が左右されます)。
バニラ ソースには が.config
含まれていません。 を提供するか、作成する必要があります。 は、 make oldconfig
が以前のバージョンのものであり、更新する必要がある場合に使用されます.config
。 このプロセスは完全に自動化できないこともあり、基本的には CLI インターフェイスを使用する を実行することになります。設定なしでmake config
試した場合にも、この状態になることがあります。make oldconfig
make menuconfig
これが一体何なのかをよりよく理解するには、よりグラフィカルなものを見る必要があります。
しかし、何もないところから始めて、自分に合った設定を取得しようとするのは、何をしているのかわかっていなければ不可能です。理想的には、実行中のカーネルを作成するために使用した設定から始めるのがよいでしょう。これは、モジュールを構築するだけの場合、特に当てはまります。実際のカーネルを構築する必要はありませんが、モジュールをコンパイルするには、それが使用されるカーネルがどのようにコンパイルされたかを知っておく必要があります。
うまくいけば、/proc/config.gz
ターゲットシステム上でそれを見つけることができるでしょう。これはディスク上のファイルではないので、取得するにはシステムが稼働している必要があります。gzip圧縮されているので
gunzip config.gz
mv config .config
これで完了です。これをソースツリーにコピーして実行し、make menuconfig
ビルドするモジュールの命令を追加します。
それが存在しない場合は、使用された構成を追跡する必要があります。 また、モジュールを構築する場合は、まったく同じカーネル バージョンを使用する必要があることにも注意してください。
こちらは一般的な概要コンパイル プロセスの詳細については、こちらも役立つかもしれませんので、まず 2 番目と 3 番目を読んでください。
答え2
まず、 のような古い設定をクリアする必要がありますmake mrproper
。
その後、再度実行してくださいmake menuconfig
。不要な項目を確実に選択した場合は、.config
作成されません。