Sí, pero rara vez es útil. En sistemas x86 de 32 bits, puede usar el ioperm(2)
llamada al sistema para configurar el proceso actual para permitirle realizar E/S del puerto directamente. Creo que esto no funciona en sistemas de 64 bits. También puedes hacer lseek/read/write
combinaciones contra /dev/port
y creo que esto tampoco es muy portátil. Consulte http://tldp.org/HOWTO/IO-Port-Programming-2.html para obtener más detalles. Ambos enfoques son mucho más lentos y menos flexibles que escribir un controlador de dispositivo, por supuesto (/dev/port
más lento de todos). Ninguno de estos mecanismos del espacio de usuario le permite manejar interrupciones ni nada por el estilo, por supuesto. Si el rendimiento es un problema, terminará escribiendo un controlador de dispositivo.
Tu conjetura es correcta. El kernel es el único software que puede enviar solicitudes de hardware. Eso no solo es cierto para Linux. Prácticamente ningún sistema operativo más nuevo que DOS le permite acceder al hardware directamente porque, como también sospecha, es bastante peligroso.
Sin embargo, no hay problema en escribir su propio controlador y hay mucha documentación disponible. Por ejemplo, este tutorial en xatlantis parece reciente (¡eso es importante!) y una buena fuente.