web-dev-qa-db-ja.com

Linuxソースコードに新しいドライバーコードを追加する

Linuxデバイスドライバーを開発しました。現在、Ubuntu 12.04でarmのクロスコンパイラーを使用してコンパイルしてから、腕のLinuxイメージに挿入しています。しかし、私はそれをLinuxソースコードに追加し、arm Linuxの構成を介して追加/削除するオプションを与え、Linuxソースコードのコンパイルでコンパイルできるようにする方法を学びたいですか?

何か案は?

19
Ravi

独自のドライバーをarmアーキテクチャーでクロスコンパイルするには、以下に示すいくつかの手順に従う必要があります。

  1. ドライバー用の(Linuxソースコードにある)ドライバー内にmy_drvrのようなディレクトリを作成し、ドライバー(my_driver.c)ファイルをこのディレクトリ内に配置します。 _/linux_source_code/drivers/my_drvr/my_driver.c_のようになります

  2. (viエディターを使用して)ドライバーディレクトリ内にMakefileを1つ作成し、このput obj-$(CONFIG_MY_DRIVER) += my_driver.o内にこのファイルを保存します。これは_/linux_source_code/drivers/my_drvr/Makefile_のように表示されます

  3. ドライバーディレクトリ内(viエディターを使用)およびこのput内に1つのKconfigファイルを作成します

    config MY_DRIVER 
     tristate "my driver" //ベンダー名などのドライバーの説明を提供します。 ]私のドライバーモジュール。
  4. このファイルを保存すると、_/linux_source_code/drivers/my_drvr/Kconfig_のように表示されます

  5. _/linux_source_code/drivers/Makefile_および_/linux_source_code/drivers/Kconfig_にあるLinuxソースドライバーMakefileおよびKconfigファイルにMakefileおよびKconfigファイルを追加します。

  6. Makefileの最後の行に以下を追加します

     obj-y + = my_drvr / 

    または

     obj-$(CONFIG_MY_DRIVER)+ = my_drvr /
  7. Kconfigファイルの最後の行に以下を追加します

    ソース "drivers/my_drvr/Kconfig"
  8. 最後に、Kconfigファイルをアーキテクチャ固有の構成ファイルに追加する必要があります。このファイルは、最後の次の追加行の_kernel_source/Arch/arm/configs/--defconfig_にあります。

    CONFIG_MY_DRIVER = y

注:-最後の手順はアーキテクチャによって異なるため、注意が必要です。これで、makeコマンドを使用してドライバーをコンパイルできます。 (例:Sun7i_defconfig)

40
Deepak Singh

デバイスドライバーを配置するカーネルソースサブディレクトリの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オプションが見つかり、それを選択して、カーネルにコンパイルするか、モジュールとしてビルドするか、まったくコンパイルしないかを選択できます。

ドライバーの対象となるサブシステムディレクトリで例を探します。

6
Omair

パッチを作成し、カーネルtarballを解凍した後、構成/コンパイルする前のステップとして、このパッチの適用を追加します。

3
René Kolařík