#1 Le 21/11/2020, à 15:53
- Nuliel
développement de pilotes sous linux
Bonjour,
J'ai un pc portable avec un lecteur d'empreinte digitale qui n'est pas supporté sous linux. Ce lecteur est connecté en usb (et il me semble qui contient aussi un lecteur rfid pour lequel il y aurait des scripts pour le faire fonctionner).
En particulier, j'aimerais bien avoir des retours d'expérience de personnes qui se seraient lancé dans le développement de pilotes linux.
Comment faut il s'y prendre?
J'imagine qu'il faut un windows et wireshark pour faire la partie reverse engineering, j'ai bon?
Avez vous des liens ou livres à conseiller sur le développement de pilotes linux? Linux device driver est il encore utilisable?
Dans le cas de pilotes usb, faut il faire de la programmation en mode noyau?
Merci d'avance pour éclairer ma lanterne,
Nuliel
Hors ligne
#2 Le 21/11/2020, à 17:32
- NicoApi73
Re : développement de pilotes sous linux
Salut Nuliel,
Essaie de jeter un coup d'oeil au livre linux embarqué de Pierre Ficheux si tu en as l'occasion. Tu as quelques rudiments pour la partie noyau (les pilotes sont dans l'environnement noyau)
Pour l'exploitation des ressources (par exemple USB), tu peux prendre un framework qui te fournit des API (comme Qt). Il faut voir ce qui est disponible dans le framework que tu choisiras
Hors ligne
#3 Le 21/11/2020, à 17:59
- Nuliel
Re : développement de pilotes sous linux
Merci NicoApi73.
Ok, j'irai jeter un œil dans ce livre.
Vu que c'est de la programmation noyau, il faut que je développe dans une VM pour éviter de crasher mon OS en cas de grosse erreur, j'ai bon?
Donc si je comprends bien, il y a deux choses à faire: un pilote (en environnement noyau) et adapter fprint pour qu'il reconnaisse et utilise ce lecteur d'empreinte digitale.
Hors ligne
#4 Le 21/11/2020, à 18:54
- NicoApi73
Re : développement de pilotes sous linux
Vu que c'est de la programmation noyau, il faut que je développe dans une VM pour éviter de crasher mon OS en cas de grosse erreur, j'ai bon?
oui, la programmation noyau, c'est sans filet... Après, tu peux développer dans ton environnement et empécher le chargement du module au boot en cas de problème.
Hors ligne
#5 Le 21/11/2020, à 19:18
- Nuliel
Re : développement de pilotes sous linux
Ce qui serait bien, ce serait de développer sous mon environnement classique, et exécuter dans une VM, ce serait moins lourd (après j'ai 16 Go donc ça devrait passer)
Je vais continuer mes recherches
Hors ligne
#6 Le 21/11/2020, à 20:21
- Bigcake
Re : développement de pilotes sous linux
Bonjour,
Je n'ai jamais compris l’intérêt d'utiliser une empreinte de doigts qui est l'une des données les moins sécurisées (Inchangeable, et laissé sur tout objet touché)
Et qui est, en plus, collecté en masse par l'état ces dernières années (combien de temps avant que ces données fuites par accident/hack ?)
J'ai développé avec succès un driver usb il y a quelque temps
Pour mon driver, j'avais récupéré l'ID hardware avec lsusb au format xxxx:xxxx (constructeur:produit il me semble)
En faisant des recherches avec cet ID, j'ai pu trouver les specs hardware et protocole logiciel publié par le constructeur (j'ai eu de la chance la dessus)
Je ne pense pas que tu ai besoin de passer par un sniffer usb, vu le type de device (lecture d'empreinte), ça semblerai être juste une récupération de données, un peu comme une souris basique
A mon avis, tu pourra juste afficher à l'arrache les données brutes via printk() et chercher comment ça fonctionne
A voir/tester...
J'avais utilisé ces liens à l'époque :
- (anglais) https://lwn.net/Kernel/LDD3
- (français) https://broux.developpez.com/articles/c/driver-c-linux/
- (anglais) https://www.linuxjournal.com/article/4786
Quelques commandes utile :
- insmod, lsmod, rmmod (gestion des modules)
- lshw (pour voir quel driver utilise ton device)
- lsusb -v
Ce que tu peux essayer de faire :
- Trouver des infos spécifiques à l'ID hardware fournit par lsusb
- Trouver le code source d'un driver d'un autre lecteur d'empreinte
- Trouver le code source d'un driver d'un autre device fait par le même constructeur
Garde en tête que si tu n'arrive pas à le faire fonctionner, c'est que tu a abandonné trop tot , bon courage.
Dernière modification par Bigcake (Le 21/11/2020, à 20:23)
"Les gens" ne sont pas cons, ils ont été habitués à la facilité et à la désinformation. Le meilleur moyen de ne pas les aider, c'est de se moquer. Le meilleur moyen de les aider, c'est de les informer, encore et encore. La réflexion viendra. N'oubliez pas que vous aussi, vous êtes le con d'un autre.
Smartphone+GNU/Linux=Librem5
Hors ligne
#7 Le 21/11/2020, à 20:54
- Nuliel
Re : développement de pilotes sous linux
Merci Bigcake.
Tu as tout à fait raison, je pense aussi que les empreintes digitales vont fuiter (si ce n'est pas déjà fait) un jour.
Dans mon cas, je ne pense pas que Broadcom ait donné les specs, sachant que c'est à la fois un lecteur d'empreinte et un lecteur rfid si j'ai bien compris.
Je pensais récupérer les endpoints via un sniffer usb en fait.
Tu as fait un pilote il y a combien de temps? C'est juste pour savoir si même après de gros changements au niveau noyau, LDD est toujours utilisable.
Merci pour toutes ces infos!
L'identifiant que j'ai est 0a5c:5834, une puce broadcom appelée Dell ControlVault, et pour le nfc, https://github.com/jacekkow/controlvault2-nfc-enable permet de l'utiliser
Dernière modification par Nuliel (Le 21/11/2020, à 21:12)
Hors ligne
#8 Le 22/11/2020, à 01:55
- moko138
Re : développement de pilotes sous linux
http://www.linux-usb.org/usb.ids connaît déjà :
0a5c:
5801 BCM5880 Secure Applications Processor with fingerprint swipe sensor
5802 BCM5880 Secure Applications Processor with fingerprint touch sensor
5803 BCM5880 Secure Applications Processor with secure keyboard
5804 BCM5880 Secure Applications Processor with fingerprint swipe sensor
dont mon petit doigt me dit que le pilote ne doit pas être très différent de celui que tu vas élaborer.
%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel : À la découverte de dcraw
Hors ligne
#9 Le 22/11/2020, à 13:43
- Nuliel
Re : développement de pilotes sous linux
Malheureusement, il n'y a pas de pilote pour ces id là, ce n'est qu'une liste d'id de périphériques usb, pas de périphériques forcément supportés sous linux
La liste des périphériques supportés est là: https://fprint.freedesktop.org/supported-devices.html
Dernière modification par Nuliel (Le 22/11/2020, à 13:44)
Hors ligne
#10 Le 07/02/2021, à 16:13
- Nuliel
Re : développement de pilotes sous linux
Hello,
Juste un petit message pour préciser que j'ai commencé hier à regarder tout cela de plus près, là je me base sur https://www.apriorit.com/dev-blog/195-s … r-linux-os et la page de fprint.
Hors ligne
#11 Le 13/02/2021, à 15:44
- LeoMajor
Re : développement de pilotes sous linux
bonjour,
nfc est rattaché aux cartes à puce, indirectement. et sous nunux, c'est Ludovic Rousseau (smartcard/nfc), qui s'en occupe.
libccid est particulièrement important
à adapter
aptitude search '(libccid|pcscd|libnfc) ~ramd64' -F%p | xargs echo "sudo apt install "
sudo apt install libccid libnfc-bin libnfc-dev libnfc-examples libnfc-pn53x-examples libnfc5 libnfc5-dbg pcscd
https...://ccid.apdu.fr/ccid/shouldwork.html#0x0A5C0x5834
USB descriptor: readers/Broadcom_5880_0x5834.txt
Features: Multi interface reader, interface 0: Contacted SmartCard
In CCID release: 1.4.25
pcsc_scan
devrait renvoyer un truc du genre https...://ccid.apdu.fr/ccid/readers/Broadcom_5880_0x5834.txt
a/ tu as la piste aussi de /etc/nfc/libnfc.conf pour configurer l'usb
b/ avec ou sans pam_nfc ?
c/ https:....//ludovicrousseau.blogspot.com/2016/08/broadcom-ccid-readers.html
difficile de dire sans faire les tests et sans avoir le matériel sous les yeux.
Hors ligne
#12 Le 13/02/2021, à 16:43
- Nuliel
Re : développement de pilotes sous linux
Merci pour ta réponse.
Honnêtement je n'ai pas trop regardé comment fonctionne la partie NFC, en fait je me suis principalement intéressé à la partie lecteur d'empreinte digitale vu que c'est cette partie qui ne fonctionne pas.
D'ailleurs quelques nouvelles: en fait le vrai problème c'est de comprendre comment fonctionne ce lecteur d'empreinte digitale. Cela veut dire en fait de faire de la rétro ingénierie dessus et sur le pilote afin de comprendre comment ils discutent (ce qui implique généralement pas mal de crypto).
Par ailleurs le pilote sera en fait en usermode et non kernelmode. Mais ça apparemment c'est facile, c'est la rétro-ingénierie qui est vraiment dure.
Pour en revenir au NFC, ce pc est actuellement sous debian unstable, d'où les unstable un peu partout.
nuliel@nuliel-desktop:~$ apt search "(libccid|pcscd|libnfc)"
En train de trier... Fait
Recherche en texte intégral... Fait
libacsccid1/unstable 1.1.8-1 amd64
pilote PS/SC pour le lecteur de carte à puce USB CCID d'ACS
libasedrive-serial/unstable 3.7-8 amd64
pilote PC/SC pour les lecteurs de carte à puce série Athena ASEDrive IIIe
libasedrive-usb/unstable 3.7-8 amd64
pilote PC/SC pour les lecteurs de carte à puce série Athena ASEDrive IIIe
libccid/unstable 1.4.34-1 amd64
pilote PC/SC pour le lecteur de cartes à puce USB CCID
libgempc410/unstable 1.0.8-6 amd64
PC/SC driver for the GemPC 410, 412, 413 and 415 smart card readers
libgempc430/unstable 1.0.8-6 amd64
PC/SC driver for the GemPC 430, 432, 435 smart card readers
libmrtd-dev/unstable 0.1.6-3+b1 amd64
Development files for libmrtd0
libmrtd0/unstable 0.1.6-3+b1 amd64
MRTD - Machine-readable travel document library
libnfc-bin/unstable 1.8.0-2 amd64
Near Field Communication (NFC) binaries
libnfc-dev/unstable 1.8.0-2 amd64
Near Field Communication (NFC) library (development files)
libnfc-examples/unstable 1.8.0-2 amd64
Near Field Communication (NFC) examples
libnfc-pn53x-examples/unstable 1.8.0-2 amd64
Near Field Communication (NFC) examples for PN53x chips only
libnfc6/unstable 1.8.0-2 amd64
Near Field Communication (NFC) library
mfcuk/unstable 0.3.8+git20180720-2 amd64
MiFare Classic Universal toolKit
mrtdreader/unstable 0.1.6-3+b1 amd64
Reader for machine-readable travel documents (MRTDs / passports)
pcscd/unstable 1.9.0-1 amd64
intergiciel pour accéder à une carte à puce utilisant PC/SC – coté démon
ruby-nfc/unstable 3.1.2-2 amd64
ruby wrapper for the libnfc
nuliel@nuliel-desktop:~$
J'ai du coup passé
sudo apt install libccid libnfc-bin libnfc-dev libnfc-examples libnfc-pn53x-examples libnfc6 pcscd
Par contre la commande pcsc_scan n'existe pas sur mon système. Je crois que mon téléphone a une fonction NFC, je vais voir pour essayer de faire reconnaître le NFC de mon téléphone par le pc. Il y a un tas de commandes nfc:
nfc-anticol nfc-emulate-tag nfc-mfultralight
nfc-barcode nfc-emulate-uid nfc-poll
nfc-dep-initiator nfc-jewel nfc-read-forum-tag3
nfc-dep-target nfc-list nfc-relay
nfc-emulate-forum-tag2 nfc-mfclassic nfc-relay-picc
nfc-emulate-forum-tag4 nfc-mfsetuid nfc-scan-device
J'essaierai ça avec mon téléphone
Dernière modification par Nuliel (Le 13/02/2021, à 16:44)
Hors ligne
#13 Le 14/02/2021, à 17:28
- LeoMajor
Re : développement de pilotes sous linux
~$ apt-file search /pcsc_scan
pcsc-tools: /usr/bin/pcsc_scan
pcsc-tools: /usr/share/man/man1/pcsc_scan.1.gz
apt-file search, list, si le paquet n'est pas installé; dpkg -S, -L, si le paquet est installé
(sudo apt-file update)
Hors ligne
#14 Le 02/03/2021, à 10:50
- Nuliel
Re : développement de pilotes sous linux
Quelques retours sur mon avancement:
- je ne peux visiblement pas faire fonctionner le NFC de mon téléphone, vu que je l'ai reflashé avec LineageOS et que le NFC n'est visiblement pas compatible (ou je n'ai pas su le faire marcher). Je n'ai donc plus de périphérique avec du NFC pour tester le lecteur NFC du pc.
- j'ai voulu installer win10 dans une vm virtualbox, le résultat, c'est que virtualbox n'arrive pas à lier mon lecteur d'empreinte digitale à la vm, windows me sort une grosse quantité d'erreurs de lecture/écriture
- j'ai essayé sur vmware, c'est encore pire, là je ne peux même pas lier le lecteur d'empreinte à la vm
-> bref faut que je réinstalle un win10 sur un disque complètement libre sans casser l'une de mes installs
Je n'avais pas vu ton retour, je vais regarder ton lien.
Edit: honte à moi, j'avais pas installé le paquet pcsc-tools, du coup j'ai accès à la commande pcsc_scan
Ca bloque sur "Waiting for the first reader...". Je pense que ton lien me sera très utile.
Dernière modification par Nuliel (Le 02/03/2021, à 11:00)
Hors ligne
#15 Le 03/03/2021, à 16:34
- Nuliel
Re : développement de pilotes sous linux
Eh bien j'ai la même remarque de la part du logiciel de diagnostic USH que j'ai essayé sur FreeDOS en safe mode.
L'idéal serait que je refasse une install de win10 sur un disque dur et que je teste depuis cette install mon pc portable contenant le lecteur d'empreinte digitale.
Hors ligne