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
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
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.
Nuliel a écrit 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.
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
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.
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
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.
3 mois plus tard
6 jours plus tard
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.
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
dell E7240 and an E6530 ?
~$ 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)
16 jours plus tard
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.
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.