Je travaille sur dragonboard410c qui a le module noyau wcn36xx qui enregistre ainsi:gestionnaire d'interruption non enregistré
static const struct of_device_id wcn36xx_of_match[] = {
{ .compatible = "qcom,wcnss-wlan" },
{}
};
MODULE_DEVICE_TABLE(of, wcn36xx_of_match);
static struct platform_driver wcn36xx_driver = {
.probe = wcn36xx_probe,
.remove = wcn36xx_remove,
.driver = {
.name = "wcn36xx",
.of_match_table = wcn36xx_of_match,
},
};
module_platform_driver(wcn36xx_driver);
Je veux écrire mon propre module de noyau qui enregistre également le même appareil, je le code:
static const struct of_device_id my_interrupt_of_match[] = {
{ .compatible = "qcom,wcnss-wlan" },
{}
};
MODULE_DEVICE_TABLE(of, lab2_interrupt_of_match);
static struct platform_driver my_driver = {
.driver= {
.name = "my_interrupt",
.of_match_table = my_interrupt_of_match,
},
.probe = my_probe,
.remove = my_remove,
};
Dans la fonction init enregistrer mon pilote:
int err = platform_driver_register(&my_driver);
Mais ma fonction de sonde n'est pas appelée. mon module est automatiquement chargé au démarrage et la fonction init est appelée.
Je construis mon module dans un répertoire externe au code du noyau et je mis lab2_interrupt.ko sur la carte dans le même répertoire que wcn36xx.ko:
/lib/modules/4.4.23-linaro-lt -qcom/kernel/drivers/net/sans fil/ath/wcn36xx/
cela fonctionne comme vous avez écrit. Lorsque wcn36xx n'est pas enregistré, alors mon module est capable de s'enregistrer et sa fonction de sonde est appelée. Est-il toujours possible d'enregistrer un seul pilote pour un périphérique? – dafnahaktana
@dafnahaktana Vous pouvez enregistrer plus d'un pilote pour un périphérique, mais un seul "gagnera". Il est possible de remplacer le pilote pour un périphérique de plate-forme, puis de le dissocier et de le re-tester. Voir https://www.redhat.com/archives/libvir-list/2014-April/msg00382.html –