web-dev-qa-db-fra.com

Ajout d'un nouveau code de pilote au code source Linux

J'ai développé un pilote de périphérique Linux. À partir de maintenant, je le compile sur Ubuntu 12.04 avec un compilateur croisé pour arm, puis je l'insmode dans mon image Linux de bras. Mais je veux savoir comment je peux l'ajouter dans le code source Linux et donner et l'option d'ajouter/supprimer via la configuration d'arm Linux, afin de pouvoir le compiler avec la compilation du code source Linux?

Des idées?

19
Ravi

Pour effectuer une compilation croisée de votre propre pilote dans l'architecture de bras, vous devez suivre certaines étapes comme indiqué ci-dessous.

  1. Créez un répertoire comme my_drvr dans les pilotes (qui se trouve dans le code source Linux) pour votre pilote et placez votre fichier de pilote (my_driver.c) dans ce répertoire. Il ressemblera à /linux_source_code/drivers/my_drvr/my_driver.c

  2. Créez un Makefile dans votre répertoire de pilotes (en utilisant vi n'importe quel éditeur) et à l'intérieur de ce put obj-$(CONFIG_MY_DRIVER) += my_driver.o et enregistrez ce fichier. Cela apparaîtra comme /linux_source_code/drivers/my_drvr/Makefile

  3. Créez un fichier Kconfig dans votre répertoire de pilotes (en utilisant vi n'importe quel éditeur) et dans ce put

    config MY_DRIVER 
     tristate "mon pilote" // donne la description de votre pilote comme le nom du fournisseur, etc. 
     dépend du BRAS 
     par défaut y si le BRAS 
     aide 
     mon module de pilote.
  4. Enregistrez ce fichier, cela apparaîtra comme /linux_source_code/drivers/my_drvr/Kconfig

  5. Ajoutez les fichiers Makefile et Kconfig dans les fichiers source des pilotes Linux Makefile et Kconfig qui sont à /linux_source_code/drivers/Makefile Et /linux_source_code/drivers/Kconfig

  6. Dans le Makefile, ajoutez ci-dessous à la dernière ligne

     obj-y + = my_drvr / 

    ou

     obj - $ (CONFIG_MY_DRIVER) + = my_drvr /
  7. Dans le fichier Kconfig, ajoutez ci-dessous à la dernière ligne

    source "drivers/my_drvr/Kconfig"
  8. Enfin, vous devez ajouter le fichier Kconfig dans le fichier de configuration spécifique à l'architecture qui sera à kernel_source/Arch/arm/configs/--defconfig Dans cette ligne d'ajout ci-dessous dans la dernière

    CONFIG_MY_DRIVER = y

Remarque: - La dernière étape sera différente en fonction de votre architecture, de sorte que vous devez faire attention. Vous pouvez maintenant compiler votre pilote en utilisant la commande make. (par exemple: Sun7i_defconfig)

40
Deepak Singh

Vous devez ajouter une option de configuration dans le fichier Kconfig du sous-répertoire source du noyau dans lequel votre pilote de périphérique sera placé. Vous devez également ajouter des lignes au Makefile de ce répertoire. De toute évidence, vous devez également copier les fichiers source dans ce répertoire.

Puisque votre pilote dépend de l'architecture ARM, dans le Kconfig, vous devez mettre une option de 'dépend de' comme:

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

et votre Makefile ressemblera

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

Alors maintenant, quand vous faites un make menuconfig dans votre arbre source du noyau, vous trouverez l'option de configuration que vous mettez dans le Kconfig et vous pourrez le sélectionner pour être compilé dans le noyau ou construit en tant que module ou pas compilé du tout.

Recherchez des exemples dans le répertoire du sous-système auquel votre pilote est destiné.

6
Omair

Créez un patch et ajoutez l'application de ce patch comme une étape après la décompression de l'archive tar du noyau et avant la configuration/compilation.

3
René Kolařík