2012-07-29 11 views
16

Linuxデバイスドライバを開発しました。現時点では、私は腕のためのクロスコンパイラを使ってUbuntu 12.04でコンパイルしています。そして私の腕のLinuxイメージでそれをinsmodingしています。しかし、私はそれをLinuxのソースコードでどのように追加し、腕Linuxの設定を追加/削除するオプションを与えるかを学びたいので、Linuxソースコードのコンパイルでコンパイルすることができますか?新しいドライバコードをlinuxソースコードに追加する

アイデア?

答えて

3

パッチを作成し、カーネルtarballを解凍してから/ compilationを構成する前に、このパッチの適用をステップとして追加します。

6

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

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

+0

ご返信ありがとうございます。私はそれを理解し、あなたが言及したのと同じことをしました。しかし今、新しい問題があります。ドライバコードをモジュールとしてコンパイルし、Linuxカーネルでinsmodを実行すると、デバイスが/ dev /に作成されているのがわかります。しかし、自分のコードをカーネルツリーに入れて、カーネルをコンパイルすると、私のデバイスは/ devの下には見えません。私はclass_create()とdevice_create()を使ってデバイスノードを作成しています。また、カーネルツリーに上記のようにコードを追加しました。 – Ravi

+0

ドライバを組み込むように設定しました。つまり、ドライバをハイライトし、 'Y'を押してアスタリスクを付けます:[*] – microMolvi

35

アームアーキテクチャで自分のドライバをクロスコンパイルするには、以下に説明するいくつかの手順に従わなければなりません。

  1. あなたのドライバーのための(Linuxのソースコードである)my_drvr内部のドライバーのようなディレクトリを作成し、このディレクトリ内のあなたのドライバ(my_driver.c)ファイルを置きます。それ /linux_source_code/drivers/my_drvr/my_driver.c

  2. のように見えますが(任意のエディタVIを使用して)あなたのドライバディレクトリ内と、この内1つのMakefileを作成しますがobj-$(CONFIG_MY_DRIVER) += my_driver.o を入れて、このファイルを保存します。この意志は/linux_source_code/drivers/my_drvr/Makefile

  3. のように表示されます(任意のエディタ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.
  4. を入れて、この意志は/linux_source_code/drivers/my_drvr/Kconfig

  5. のように表示されますLinuxソースドライバMakefileKconfigファイルにMakefileKconfigファイルの両方を追加します。ファイルは/linux_source_code/drivers/Makefile とですMakefileの

  6. source "drivers/my_drvr/Kconfig"
  7. 最後の行に以下の追加は、最後に追加する必要がkconfigをファイルの最後の行に以下の

     obj-y += my_drvr/

    または

     obj-$(CONFIG_MY_DRIVER) += my_drvr/
  8. を追加Kconfigファイルをアーキテクチャに挿入するこの中でkernel_source/arch/arm/configs/--defconfigになりますpecific設定ファイルは注意

    CONFIG_MY_DRIVER=y

最後

に線の下に追加します - あなたが世話を持っているように、最後のステップは、あなたのアーキテクチャに応じて異なります。 これで、makeコマンドを使用してドライバをコンパイルできます。 (例:sun7i_defconfig)

+1

excellent。正確かつ簡潔です。ありがとうございました。 –

関連する問題