GNU/Linux >> Tutoriales Linux >  >> Linux

¿Se puede acceder al hardware directamente desde el espacio del usuario?

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.


Linux
  1. pila de kernel y pila de espacio de usuario

  2. Eliminar espacios en blanco de los nombres de archivo en Linux

  3. No puedo demandar al usuario jenkins después de instalar Jenkins

  4. ¿Cómo puedo excluir un directorio del comando ls?

  5. No puedo desbloquear la cuenta de usuario de Linux

Mi historia de Linux:de usuario de Linux a colaborador

¿Cómo eliminar Swap Space de Centos 7.x?

Cómo evitar que un proceso escriba archivos

¿Cómo puedo evitar que mi controlador wifi se vuelva catatónico?

¿Puedo detectar información RAID de hardware desde el interior de Linux?

¿Qué se puede aprender sobre un usuario a partir de un intento fallido de SSH?