inb
, outb
e amigos não são destinados à comunicação do kernel, eles são usados para ler e gravar em portas IO específicas da plataforma.
O uso típico desses recursos seria interações diretas com as portas seriais ou paralelas (e, portanto, com os dispositivos conectados), sem percorrer todo o caminho e criar drivers de dispositivo de kernel específicos.
Os servidores X também podem usá-los para comunicação de baixo nível com o hardware de vídeo (ou possivelmente dispositivo de entrada).
Para usar essas chamadas do userspace, duas coisas são necessárias:
- O processo de chamada deve ter CAP_SYS_RAWIO recurso (este geralmente significa que ele precisa ser executado como root).
- O processo de chamada deve solicitar permissão para usar as portas desejadas, com o
ioperm
ouiopl
chamadas do sistema.
Mini-HOWTO de programação de porta Linux I / O irá guiá-lo o essencial, e há um programa de exemplo simples no final * .
Observe que os programas que usam isso se comunicam diretamente com qualquer hardware (ou firmware) atrás dessas portas. O kernel não valida nem interfere com essas chamadas. Então usá-los mal poderia causar problemas sérios. Manuseie com cuidado.
* Você precisará #include <stdlib.h>
e substituir <asm/io.h>
por <sys/io.h>
para compilar.