Linuxデバイスドライバーを開発しました。現在、Ubuntu 12.04でarmのクロスコンパイラーを使用してコンパイルしてから、腕のLinuxイメージに挿入しています。しかし、私はそれをLinuxソースコードに追加し、arm Linuxの構成を介して追加/削除するオプションを与え、Linuxソースコードのコンパイルでコンパイルできるようにする方法を学びたいですか?
何か案は?
独自のドライバーをarmアーキテクチャーでクロスコンパイルするには、以下に示すいくつかの手順に従う必要があります。
ドライバー用の(Linuxソースコードにある)ドライバー内にmy_drvrのようなディレクトリを作成し、ドライバー(my_driver.c)ファイルをこのディレクトリ内に配置します。 _/linux_source_code/drivers/my_drvr/my_driver.c
_のようになります
(viエディターを使用して)ドライバーディレクトリ内にMakefileを1つ作成し、このput obj-$(CONFIG_MY_DRIVER) += my_driver.o
内にこのファイルを保存します。これは_/linux_source_code/drivers/my_drvr/Makefile
_のように表示されます
ドライバーディレクトリ内(viエディターを使用)およびこのput内に1つのKconfig
ファイルを作成します
config MY_DRIVER tristate "my driver" //ベンダー名などのドライバーの説明を提供します。 ]私のドライバーモジュール。
このファイルを保存すると、_/linux_source_code/drivers/my_drvr/Kconfig
_のように表示されます
_/linux_source_code/drivers/Makefile
_および_/linux_source_code/drivers/Kconfig
_にあるLinuxソースドライバーMakefile
およびKconfig
ファイルにMakefile
およびKconfig
ファイルを追加します。
Makefileの最後の行に以下を追加します
obj-y + = my_drvr /
または
obj-$(CONFIG_MY_DRIVER)+ = my_drvr /
Kconfigファイルの最後の行に以下を追加します
ソース "drivers/my_drvr/Kconfig"
最後に、Kconfig
ファイルをアーキテクチャ固有の構成ファイルに追加する必要があります。このファイルは、最後の次の追加行の_kernel_source/Arch/arm/configs/--defconfig
_にあります。
CONFIG_MY_DRIVER = y
注:-最後の手順はアーキテクチャによって異なるため、注意が必要です。これで、makeコマンドを使用してドライバーをコンパイルできます。 (例:Sun7i_defconfig)
デバイスドライバーを配置するカーネルソースサブディレクトリのKconfigファイルに構成オプションを追加する必要があります。また、そのディレクトリのMakefileに行を追加する必要があります。もちろん、ソースファイルもそのディレクトリにコピーする必要があります。
ドライバはARM=アーキテクチャに依存しているため、Kconfigで、次のように「依存する」オプションを指定する必要があります。
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オプションが見つかり、それを選択して、カーネルにコンパイルするか、モジュールとしてビルドするか、まったくコンパイルしないかを選択できます。
ドライバーの対象となるサブシステムディレクトリで例を探します。
パッチを作成し、カーネルtarballを解凍した後、構成/コンパイルする前のステップとして、このパッチの適用を追加します。