2012-07-29 23 views
16

Ich habe einen Linux-Gerätetreiber entwickelt. Ab sofort kompiliere ich es auf Ubuntu 12.04 mit Cross-Compiler für Arm und dann importiere ich es in meinem Arm Linux-Image. Aber ich möchte lernen, wie kann ich es in Linux-Quellcode hinzufügen und geben und die Option hinzufügen/entfernen durch Konfiguration von Arm Linux, so dass ich es mit Linux-Quellcode-Kompilierung kompilieren kann?Hinzufügen neuer Treibercode zu Linux-Quellcode

Irgendwelche Ideen?

Antwort

3

Erstellen Sie einen Patch und fügen Sie das Anwenden dieses Patches als Schritt nach dem Dekomprimieren des Kernel-Tarballs und vor dem Konfigurieren/Kompilieren hinzu.

6

Sie müssen eine Konfigurationsoption in der Kconfig-Datei des Unterverzeichnisses kernel source hinzufügen, in dem Ihr Gerätetreiber abgelegt wird. Sie müssen dem Makefile dieses Verzeichnisses auch Zeilen hinzufügen. Natürlich müssen Sie auch die Quelldateien in dieses Verzeichnis kopieren.

Da Ihr Fahrer auf der ARM-Architektur abhängt, in der Kconfig, benötigen Sie eine Möglichkeit, setzen ‚hängt von‘ wie:

config SND_ARMAACI 
tristate "ARM PrimeCell PL041 AC Link support" 
depends on ARM_AMBA 

und Ihr Makefile wird wie folgt aussehen

obj-$(CONFIG_SND_ARMAACI) += snd-aaci.o 
snd-aaci-objs  := aaci.o 

Wenn Sie nun make make menuconfig in Ihrer Kernel-Quellstruktur ausführen, finden Sie die Konfigurationsoption, die Sie in Kconfig eingeben, und Sie können sie auswählen, um sie in den Kernel zu kompilieren oder als Modul zu kompilieren oder überhaupt nicht zu kompilieren.

Suchen Sie nach Beispielen im Subsystemverzeichnis, für das Ihr Treiber bestimmt ist.

+0

Vielen Dank für Ihre Antwort. Ich habe es herausgefunden und dasselbe gemacht wie du erwähnt hast. Aber jetzt gibt es ein neues Problem. Wenn ich meinen Treibercode als Modul kompiliere und ins Linux-Kernel insmod mache, kann ich sehen, dass mein Gerät unter/dev/erstellt wird. Aber wenn ich meinen Code in die Kernel-Struktur lege und den Kernel kompiliere, kann ich mein Gerät nicht unter/dev sehen. Bitte beachten Sie, dass ich class_create() und device_create() verwende, um den Geräteknoten zu erstellen. Auch habe ich meinen Code in der Kernel-Baum auf die gleiche Weise wie oben erwähnt hinzugefügt. – Ravi

+0

Haben Sie den Treiber so eingestellt, dass er eingebaut wird? Markieren Sie den Treiber und drücken Sie "Y", so dass ein Stern wie folgt vorangestellt wird: [*] – microMolvi

35

Um Ihren eigenen Treiber in der Arm-Architektur kompilieren zu können, müssen Sie die folgenden Schritte ausführen.

  1. Erstellen Sie ein Verzeichnis wie my_drvr innerhalb Treiber (die im Linux-Quellcode) für Ihre Fahrer und setzen Sie Ihre Treiber (my_driver.c) in diesem Verzeichnis einreichen. Es wird sieht aus wie /linux_source_code/drivers/my_drvr/my_driver.c

  2. ein Makefile in Ihrem Treiberverzeichnis erstellen (vi beliebigen Editor) und innerhalb dieses setzen obj-$(CONFIG_MY_DRIVER) += my_driver.o und diese Datei speichern.Dieser Wille erscheint wie /linux_source_code/drivers/my_drvr/Makefile

  3. eine Kconfig Datei in Ihrem Treiberverzeichnis erstellen (mit vi beliebigen Editor) und innerhalb dieses setzen

    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. Speichern Sie diese Datei, wird dies erscheint wie /linux_source_code/drivers/my_drvr/Kconfig

  5. Fügen Sie die Dateien Makefile und Kconfig in den Linux-Quelltreibern Makefile und Kconfig hinzu, die sich unter /linux_source_code/drivers/Makefile undbefinden

  6. im Makefile unten in letzter Zeile

    oder

     obj-$(CONFIG_MY_DRIVER) += my_drvr/
  7. In Kconfig Datei hinzufügen unten in letzter Zeile

    source "drivers/my_drvr/Kconfig"
  8. muß schließlich zugeben

     obj-y += my_drvr/
    Kconfig Datei in Architektur s pecific Konfigurationsdatei, die unter der Linie in den letzten

    bei kernel_source/arch/arm/configs/--defconfig in dieser sein wird
    CONFIG_MY_DRIVER=y

Hinweis hinzufügen: - Letzter Schritt unterscheidet sie nach Ihrer Architektur, so dass Sie kümmern haben. Jetzt können Sie Ihren Treiber mit dem Befehl make kompilieren. (zB: sun7i_defconfig)

+1

ausgezeichnet. präzise und prägnant. Danke. –

Verwandte Themen