No Linux, o MMIO é possível a partir do espaço do usuário usando mmap on /dev/mem . Por exemplo, o servidor X faz
fd = open("/dev/mem", O_RDWR);
if (ioBase == NULL) {
ioBase = (volatile unsigned char *) mmap(0, 0x20000,
PROT_READ | PROT_WRITE,
MAP_SHARED, fd, ioBase_phys);
}
close(fd);
em alguns casos. Isso está saindo de moda e o kernel controla rigorosamente o que pode ser feito usando esse tipo de acesso: acessar /dev/mem requer CAP_SYS_RAWIO , e os kernels de distribuição hoje em dia tendem a ser construídos com STRICT_DEVMEM e IO_STRICT_DEVMEM que restringem o acesso via /dev/mem a alguns intervalos na memória, seja necessário para DOSEMU ou X, ou mapeado para dispositivos e de outra forma não utilizado ( ie fornecendo MMIO para um dispositivo que não é manipulado por um driver).