![O hardware pode ser acessado diretamente do espaço do usuário?](https://rvso.com/image/23938/O%20hardware%20pode%20ser%20acessado%20diretamente%20do%20espa%C3%A7o%20do%20usu%C3%A1rio%3F.png)
No trabalho temos alguns dispositivos embarcados controlados por software DOS. Recebi a responsabilidade de avaliar o uso do Linux como um sistema operacional substituto para o DOS em uma próxima geração de hardware. Minha pesquisa me leva à conclusão de que o DOS é simplesmente um tipo totalmente diferente de sistema operacional que permite fazer coisas potencialmente perigosas se você quiser. Pelo que entendi, se você deseja acessar o hardware diretamente, você terá que escrever um driver personalizado. O que preciso saber para satisfazer a curiosidade do meu chefe é o seguinte:é possível acessar o hardware diretamente do espaço do usuário??
Meu palpite é que não, mas gostaria de solicitar a opinião de quem tem um conhecimento muito superior ao meu.
Responder1
Sim, mas raramente é útil. Em sistemas x86 de 32 bits, você pode usar a ioperm(2)
chamada do sistema para configurar o processo atual para permitir que ele execute E/S de porta diretamente. Acredito que isso não funciona em sistemas de 64 bits. Você também pode fazer lseek/read/write
combinações /dev/port
e acho que isso também não é muito portátil. Verhttp://tldp.org/HOWTO/IO-Port-Programming-2.htmlpara mais alguns detalhes. Ambas as abordagens são muito mais lentas e menos flexíveis do que escrever um driver de dispositivo ( /dev/port
a mais lenta de todas). Nenhum desses mecanismos de espaço de usuário permite lidar com interrupções ou algo parecido, é claro. Se o desempenho for um problema, você acabará escrevendo um driver de dispositivo.
Responder2
Seu palpite está correto. O kernel é o único software que pode enviar solicitações de hardware. Isso não se aplica apenas ao Linux. Praticamente nenhum sistema operacional mais recente que o DOS permite acessar o hardware diretamente, porque, como você também suspeita, é bastante perigoso.
No entanto, não há problema em escrever seu próprio driver e há muita documentação disponível. Por exemplo,este tutorial no xatlantisparece uma fonte recente (isso é importante!) e boa.
Responder3
Definitivamente é possível acessar o hardware do espaço do usuário. Especialmente se os registros de hardware estiverem mapeados na memória. Veja, por exemplo,UIO.