Oui, mais c'est rarement utile. Sur les systèmes x86 32 bits, vous pouvez utiliser le ioperm(2)
appel système pour configurer le processus actuel afin de lui permettre d'effectuer directement des E/S de port. Je crois que cela ne fonctionne pas sur les systèmes 64 bits. Vous pouvez également faire lseek/read/write
combinaisons contre /dev/port
et je pense que ce n'est pas non plus très portable. Voir http://tldp.org/HOWTO/IO-Port-Programming-2.html pour plus de détails. Ces deux approches sont bien sûr beaucoup plus lentes et moins flexibles que l'écriture d'un pilote de périphérique (/dev/port
le plus lent de tous). Aucun de ces mécanismes de l'espace utilisateur ne vous permet de gérer les interruptions ou quoi que ce soit de ce genre, bien sûr. Si les performances sont un problème, vous finirez par écrire un pilote de périphérique.
Votre supposition est correcte. Le noyau est le seul logiciel capable d'envoyer des requêtes matérielles. Cela ne vaut pas seulement pour Linux. Pratiquement aucun système d'exploitation plus récent que DOS ne vous permet d'accéder directement au matériel, car, comme vous le soupçonnez également, c'est assez dangereux.
Cependant, l'écriture de votre propre pilote ne pose aucun problème et une documentation abondante est disponible. Par exemple, ce tutoriel sur xatlantis semble être une source récente (c'est important !) et de bonne qualité.