Linux デバイスドライバーを開発しました。現在、Ubuntu 12.04 で arm 用のクロスコンパイラを使用してコンパイルし、arm Linux イメージで insmoding しています。しかし、それを Linux ソース コードに追加し、arm Linux の構成を通じて追加/削除するオプションを提供して、Linux ソース コード コンパイルでコンパイルできるようにする方法を学びたいですか?
何か案は?
Linux デバイスドライバーを開発しました。現在、Ubuntu 12.04 で arm 用のクロスコンパイラを使用してコンパイルし、arm Linux イメージで insmoding しています。しかし、それを Linux ソース コードに追加し、arm Linux の構成を通じて追加/削除するオプションを提供して、Linux ソース コード コンパイルでコンパイルできるようにする方法を学びたいですか?
何か案は?
arm アーキテクチャで独自のドライバをクロス コンパイルするには、以下で説明するいくつかの手順に従う必要があります。
ドライバーのドライバー (Linux ソース コードにある) 内に my_drvr のようなディレクトリを作成し、このディレクトリ内にドライバー (my_driver.c) ファイルを配置します。次のようになります
/linux_source_code/drivers/my_drvr/my_driver.c
ドライバー ディレクトリ内に 1 つの Makefile を作成し (vi 任意のエディターを使用)、このファイル内にobj-$(CONFIG_MY_DRIVER) += my_driver.o
このファイルを配置して保存します。これは次のように表示されます/linux_source_code/drivers/my_drvr/Makefile
Kconfig
ドライバー ディレクトリ内 (vi 任意のエディターを使用) とこの put 内に1 つのファイルを作成します。
config MY_DRIVER tristate "my driver" //ベンダー名などのドライバーの説明を提供します。 ARMに依存 ARM の場合はデフォルトの y ヘルプ 私のドライバーモジュール。
このファイルを保存すると、次のように表示されます/linux_source_code/drivers/my_drvr/Kconfig
Linux ソース ドライバにとMakefile
ファイルの両方を追加し、
とにあるファイルを追加します。Kconfig
Makefile
Kconfig
/linux_source_code/drivers/Makefile
/linux_source_code/drivers/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 に配置した構成オプションが見つかり、それをカーネルにコンパイルするか、モジュールとしてビルドするか、またはまったくコンパイルしないかを選択できます。
ドライバーのサブシステム ディレクトリで例を探してください。
パッチを作成し、カーネル tarball の解凍後、構成/コンパイルの前のステップとして、このパッチの適用を追加します。