O hardware pode ser acessado diretamente do espaço do usuário?

5

No trabalho, temos alguns dispositivos embarcados controlados pelo software DOS. Fui encarregado da responsabilidade de avaliar o uso do Linux como um sistema operacional de substituição para DOS em uma próxima geração de hardware. Eu não sou um especialista em linux e 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. Do meu entendimento, se você deseja acessar o hardware diretamente, você teria que escrever um driver personalizado. O que eu 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 é não, mas eu gostaria de pedir a opinião daqueles com conhecimento muito maior que o meu.

    
por mathematician1975 13.07.2012 / 19:17

2 respostas

1

Seu palpite está correto. O kernel é o único software que pode enviar solicitações de hardware. Isso não é válido apenas para o Linux. Praticamente nenhum sistema operacional mais novo 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 xatlantis parece ser uma fonte recente (importante!) E boa.

    
por 13.07.2012 / 19:36
3

Sim, mas raramente é útil. Em sistemas x86 de 32 bits, você pode usar a chamada do sistema ioperm(2) para configurar o processo atual para permitir que ele execute diretamente a E / S da porta. Eu acredito que isso não funciona em sistemas de 64 bits. Você também pode fazer lseek/read/write combinações contra /dev/port e eu acho que isso também não é muito portátil. Consulte o link para mais detalhes. Ambas as abordagens são muito mais lentas e menos flexíveis do que gravar um driver de dispositivo ( /dev/port mais lento de todos). Nenhum desses mecanismos de espaço de usuário permite lidar com interrupções ou qualquer coisa assim, é claro. Se o desempenho for um problema, você acabará escrevendo um driver de dispositivo.

    
por 14.07.2012 / 01:29