Linuxデバイスドライバを開発しました。現時点では、私は腕のためのクロスコンパイラを使ってUbuntu 12.04でコンパイルしています。そして私の腕のLinuxイメージでそれをinsmodingしています。しかし、私はそれをLinuxのソースコードでどのように追加し、腕Linuxの設定を追加/削除するオプションを与えるかを学びたいので、Linuxソースコードのコンパイルでコンパイルすることができますか?新しいドライバコードをlinuxソースコードに追加する
アイデア?
Linuxデバイスドライバを開発しました。現時点では、私は腕のためのクロスコンパイラを使ってUbuntu 12.04でコンパイルしています。そして私の腕のLinuxイメージでそれをinsmodingしています。しかし、私はそれをLinuxのソースコードでどのように追加し、腕Linuxの設定を追加/削除するオプションを与えるかを学びたいので、Linuxソースコードのコンパイルでコンパイルすることができますか?新しいドライバコードをlinuxソースコードに追加する
アイデア?
パッチを作成し、カーネルtarballを解凍してから/ compilationを構成する前に、このパッチの適用をステップとして追加します。
デバイスドライバが配置されるカーネルソースサブディレクトリのKconfigファイルにconfigオプションを追加する必要があります。また、そのディレクトリのMakefileに行を追加する必要があります。明らかに、そのディレクトリにもソースファイルをコピーする必要があります。
あなたのドライバは、ARMアーキテクチャに依存するため、kconfigをして、あなたがのオプションを配置する必要がありますがLIKE '' に依存:
config SND_ARMAACI
tristate "ARM PrimeCell PL041 AC Link support"
depends on ARM_AMBA
とあなたのMakefileは
obj-$(CONFIG_SND_ARMAACI) += snd-aaci.o
snd-aaci-objs := aaci.o
のようになります。だから、カーネルソースツリーでmake menuconfigを実行すると、Kconfigに設定したconfigオプションが見つかるので、それを選択してカーネルにコンパイルするか、モジュールとしてビルドするか、まったくコンパイルしないかを選択できます。
ドライバの対象となるサブシステムディレクトリの例を探します。
アームアーキテクチャで自分のドライバをクロスコンパイルするには、以下に説明するいくつかの手順に従わなければなりません。
あなたのドライバーのための(Linuxのソースコードである)my_drvr内部のドライバーのようなディレクトリを作成し、このディレクトリ内のあなたのドライバ(my_driver.c)ファイルを置きます。それ /linux_source_code/drivers/my_drvr/my_driver.c
のように見えますが(任意のエディタVIを使用して)あなたのドライバディレクトリ内と、この内1つのMakefileを作成しますがobj-$(CONFIG_MY_DRIVER) += my_driver.o
を入れて、このファイルを保存します。この意志は/linux_source_code/drivers/my_drvr/Makefile
のように表示されます(任意のエディタVIを使用して)あなたのドライバディレクトリ内に1つのKconfig
ファイルを作成し、この内部でこのファイルを保存し
config MY_DRIVER tristate "my driver" //gives your driver description like vendor name etc. depends on ARM default y if ARM help my driver module.
を入れて、この意志は/linux_source_code/drivers/my_drvr/Kconfig
のように表示されますLinuxソースドライバMakefile
とKconfig
ファイルにMakefile
とKconfig
ファイルの両方を追加します。ファイルは/linux_source_code/drivers/Makefile
とですMakefileの
source "drivers/my_drvr/Kconfig"
最後の行に以下の追加は、最後に追加する必要がkconfigをファイルの最後の行に以下の
obj-y += my_drvr/
または
obj-$(CONFIG_MY_DRIVER) += my_drvr/
を追加Kconfig
ファイルをアーキテクチャに挿入するこの中でkernel_source/arch/arm/configs/--defconfig
になりますpecific設定ファイルは注意
CONFIG_MY_DRIVER=y
最後
に線の下に追加します - あなたが世話を持っているように、最後のステップは、あなたのアーキテクチャに応じて異なります。 これで、makeコマンドを使用してドライバをコンパイルできます。 (例:sun7i_defconfig)excellent。正確かつ簡潔です。ありがとうございました。 –
ご返信ありがとうございます。私はそれを理解し、あなたが言及したのと同じことをしました。しかし今、新しい問題があります。ドライバコードをモジュールとしてコンパイルし、Linuxカーネルでinsmodを実行すると、デバイスが/ dev /に作成されているのがわかります。しかし、自分のコードをカーネルツリーに入れて、カーネルをコンパイルすると、私のデバイスは/ devの下には見えません。私はclass_create()とdevice_create()を使ってデバイスノードを作成しています。また、カーネルツリーに上記のようにコードを追加しました。 – Ravi
ドライバを組み込むように設定しました。つまり、ドライバをハイライトし、 'Y'を押してアスタリスクを付けます:[*] – microMolvi