Linux組み込み開発記録(1) .config kconfig makefile

        組み込み開発を10年以上やっていて、良くも悪くもやり尽くしてきたのですが、振り返ってみると何もしていないような気がするので、思いつきで長年の仕事を文書にまとめてみました。毎日 1 つの記事を公開しました。過去を思い出してください。

        最初の Linux ドライバーをいつ書き始めたかは覚えていませんが、当時はとてもわかりにくいと感じただけです。私はドライバー コードの書き方しか知りませんが、このコードはどのようにしてアーム ボードに取り込まれるのでしょうか? ドライバーの作成が初めての人にとって、それは本当に少し面倒なこともあります。

        さて、ドライバーの要件を列挙しましょう。はい、最初に要件を列挙し、それからそれらを実装する方法を検討する必要があります。ほとんどのドライバーでは、基本的にこれらが要件です。

        1. ドライバーを Arm ボード上で実行するにはどうすればよいですか?

        はい、作成されたドライバーはターゲット マシン上で実行される必要があります。それでは、ターゲット マシン上ではどのようなドライバーを実行できるのでしょうか? arm版の場合、対象マシン上で動作させるためにはチップメーカーがリリースするクロスコンパイルツールでドライバーをコンパイルする必要があり、他のコンパイルツールでコンパイルすると通常は動作しませんので、予めご了承ください。対応するコンパイル ツールが必要です。次に、ドライバーを実行する前にコンパイルします。

        2. ドライバーをカーネルにコンパイルする方法、ドライバーをモジュールにコンパイルする方法、またはドライバーをコンパイルしない方法?

        ドライバーはシステム内で 2 つの存在形式があり、1 つはカーネルにコンパイルされますが、このときアプリケーション層やスクリプトで管理する必要はなく、アプリケーション層で呼び出すだけで済みます。もう 1 つはモジュールにコンパイルされます。insmod を呼び出して、コンパイルされたドライバーをモジュールに挿入する必要があります。そうしないと、このドライバーを使用できません。カーネルやモジュールにコンパイルすること、またはコンパイルしないことについて話したら、カーネルをトリミングしたときに、make menuconfig を使用してインターフェイスを立ち上げ、このインターフェイス上で操作を実行できることをすぐに思い出しましたか。その通りです。単に make menuconfig を実行するだけです。 , すると操作できるようになります。まず最初に、なぜ make menuconfig 操作でインターフェイスが表示されるのか、またインターフェイスのコンテンツがなぜ空から降ってくるのかを知る必要があります。実際、make menuconfig がカーネルを構成するとき、インターフェース上のメニュー項目を記述する kconfig ファイルが読み取られます。したがって、このメニューにドライバーを表示する必要があり、このような kconfig が必要になります。この kconfig には、ドライバーを説明するために使用される項目が 1 つあります。make menuconfig を使用して構成が完了すると、.config ファイルが生成されます。ここで質問になりますが、kconfig ではカーネルにコンパイルされるように、またはモジュールにコンパイルされるように設定していますが、.config ではそれと何か違いはありますか? もちろんそれは違います。そうでなければ、一方はカーネルに入り、もう一方はモジュールになってしまうでしょう。しかし、それらの違いは非常にわずかです、つまり、一方は m で、もう一方は y です。たとえば、単純なテスト ドライバーを作成する場合、それを kconfig で config MY_TEST_DRIVE として定義します。それを選択してコンパイルすると、それをモジュールに追加すると、.config ファイルにそのような項目 CONFIG_MY_TEST_DRIVE = m が存在します; カーネルにコンパイルすることを選択した場合、.config ファイルにそのような項目 CONFIG_MY_TET_DRIVE = y; が存在します; ここまでは、 , これはドライバーとは直接関係がなく、これまでのところ、いくつかの構成ファイルが生成されるだけです。ドライバーを生成したい場合は、make が必要です。作る、誰が make を探すかというと、もちろん makefile です。このとき、もう一人の主役である makefile が待っています。Makefile は、私たちが書いたドライバー コードに直接関係する役割です。前に話した kconfig と .config はすべて遠い親戚です。 。考えてみてください。メイクファイルは最終的にドライバーを決定しますが、ドライバーはカーネルにコンパイルされるのでしょうか、それともモジュールにコンパイルされるのでしょうか? 誰が彼に言ったか、彼には遠い親戚がいるということを覚えておく必要があります。1 つの m と 1 つの y はその遠い親戚を取得します。したがって、これを makefiel obj-$(CONFIG_MY_TEST_DRIVE) +=my_test.o で使用する必要があります。この時点で私たちのドライバーが誕生しました。

        戻って歩き続けましょう。ドライバー ファイル my_test.c を作成しました。これをターゲット マシン上で実行できるドライバーにコンパイルする必要があるため、対応するコンパイル ツールが必要です。この対応するツールを用意したら、それをコンパイルするための Makefile を作成する必要があります。makefile は、カーネルにコンパイルされるかモジュールにコンパイルされるかを知る必要があるため、.config を見つける必要があります。 さて、どうやって .config を取得したのでしょうか? これは、make menuconfig が構成するときに kconfig 情報を読み取ることによって生成されます。

        

        

おすすめ

転載: blog.csdn.net/dreamliweiming/article/details/126955818