J'essaie d'en savoir plus sur les pilotes de plate-forme Linux. J'ai pris un pilote dans le tutoriel suivant:Fixation d'un périphérique avec le pilote de périphérique
http://linuxseekernel.blogspot.com/2014/05/platform-device-driver-practical.html
Il est un pilote de plate-forme de base. Je l'ai compilé et chargé le module. Il se charge bien, cependant, sa fonction de sonde n'est jamais exécutée. Il y a beaucoup de documentation qui a été dite tant que l'ID des périphériques et l'ID des pilotes correspondent, la fonction de sonde est appelée. Eh bien, j'ai le pilote suivant:
#include <linux/module.h>
#include <linux/kernel.h>
//for platform drivers....
#include <linux/platform_device.h>
#define DRIVER_NAME "twl12xx"
MODULE_LICENSE("GPL");
/**************/
static int sample_drv_probe(struct platform_device *pdev){
printk(KERN_ALERT "twl12xx: Probed\n");
return 0;
}
static int sample_drv_remove(struct platform_device *pdev){
printk(KERN_ALERT "twl12xx: Removing twl12xx\n");
return 0;
}
static const struct platform_device_id twl12xx_id_table[] = {
{ "twl12xx", 0},
{}
};
MODULE_DEVICE_TABLE(platform, twl12xx_id_table);
static struct platform_driver sample_pldriver = {
.probe = sample_drv_probe,
.remove = sample_drv_remove,
.driver = {
.name = DRIVER_NAME,
},
};
/**************/
int ourinitmodule(void)
{
printk(KERN_ALERT "\n Welcome to twl12xx driver.... \n");
/* Registering with Kernel */
platform_driver_register(&sample_pldriver);
return 0;
}
void ourcleanupmodule(void)
{
printk(KERN_ALERT "\n Thanks....Exiting twl12xx driver... \n");
/* Unregistering from Kernel */
platform_driver_unregister(&sample_pldriver);
return;
}
module_init(ourinitmodule);
module_exit(ourcleanupmodule);
J'ai aussi l'entrée suivante dans mon arbre de l'appareil:
twl12xx: [email protected] {
compatible = "twl12xx";
};
Je me sens comme je dois manquer quelque chose ou de définir correctement mon arbre périphérique.
Vous utilisez un guide qui n'est pas destiné à l'arbre de l'appareil ou Open Firmware; l'auteur est probablement x86-centric. Votre pilote, tel qu'il est écrit, n'est pas prêt pour DT, par ex. il n'inclut pas ** linux/of.h **, et n'a pas de 'struct of_device_id' avec la chaîne compatible. Il existe de nombreux pilotes de plate-forme dans le noyau à utiliser comme exemples. Voir aussi http://stackoverflow.com/questions/26840267/driver-code-in-kernel-module-doesnt-execute/26855205#26855205 – sawdust
Copie possible de [Le code du pilote dans le module du noyau ne s'exécute pas?] (Http: //stackoverflow.com/questions/26840267/driver-code-in-kernel-module-doesnt-execute) – sawdust
@sawdust, il n'y a plus de code x86-centric et je souhaite être un peu moins centré sur le DT, le Le guide peut être périmé. De nos jours, les propriétés de périphérique unifiées parmi les autres fonctionnalités permet d'écrire les pilotes sans tenir compte de qui est le fournisseur de ressources. Donc, ne blâmez pas l'architecture, blâmez les développeurs, qui font du code XYZ-centric. – 0andriy