Duvida sobre o linux

Discussão sobre linux para plataformas Intel x86 ou x64 (PC)

Moderadores: 51, guest2003, Renie, gpenga

Duvida sobre o linux

Mensagempor jvanderleym » 22 Mar 2009 00:23

Boa noite, colegas.
Na epoca do bom e velho DOS o acesso as portas era via hardware e não via software como no windows, que o sistema é empreendido, muito ruim, no passado conseguia ler na porta paralela a cada 20 microsegundos fixos, hoje entre 250 a 400 microsegundos. Minha pergunta é o linux trabalha a nivel de hardware como o DOS no passado ou como o windows. Pois estou pretendendo desenvolver um sistema de captura para usar no desktop. Caso o linux tenha o processamento a nivel de hardware, excelente.

Agradeço pela atenção.
jvanderleym
Bit
 
Mensagens: 43
Registrado em: 15 Mai 2007 20:51

Mensagempor Wagner de Queiroz » 22 Mar 2009 10:10

Na boa, esquece isso. use um microcontrolador vagabundo para ler ou controlar seus sinais, e depois mande via serial para o computador usando o sistema que voce quiser.

O problema maior dos computadores é a praga da multitarefa que nao existia no MSDOS, No DOS como em teoria rodava um unico processo por vez, vc podia ter precisao nas leituras ou entrega de sinais pq o processador era seu, todo seu (em tese por causa dos TSRs).

Hoje em dia com a multitarefa nos processadores e nos computadores, vc nao pode desperdicar tempo num processo que fica a cada 20ms fazendo alguma coisa, o sistema nao pode te dar sempre isso pois outros processos estao concorrendo fatias de tempo do processador.

Minha sugestao é voce escolher um microcontrolador que fica encarregado de ler e controlar seus dados e depois enviar para o PC o resultado.

A porta paralela é um problema sério nos dias de hoje e esta em desuso. a USB por exemplo voce pode ler e gravar dados a cada 1ms. procure um chip FTDI ou um microcontrolador com USB se ainda quiser ficar lendo e recebendo dados tao rapidos pelo processador.
Seja Livre, Use Linux
Avatar do usuário
Wagner de Queiroz
Word
 
Mensagens: 872
Registrado em: 11 Out 2006 13:38
Localização: Barueri-SP

Mensagempor enigmabox » 22 Mar 2009 18:47

jvanderleym,

No windows NT/2000/XP, vc não pode acessar a porta diretamente como no windows 95/98. A tarefa de acessar a I/O fica a cargo do Kernel, o programa acessa a porta via kernel do windows.
No Linux até que daria para acessar com baixo tempo, mais seria trabalhoso. Teria que fazer um driver modular que seria parte do kernel, para acessar a porta, mais ainda ficaria com o tempo de acesso determinado pelo kernel. Se vc conhece como compilar e modificar o kernel dá pra experimentar abaixar o tempo do ciclo das tasks.
O linux acessa a porta como o windows, isto é o programa que vc faz neste ambiente tb acessa a porta pelo kernel do linux.
O melhor é fazer como a Wagner sugeriu. Use um microcontrolador, com um cache de memoria e envie os dados via serial ou USB para o PC. Assim fica mais facil.
Continuando com o windows, vc pode usar placas da National que fazem captura de dados com velocidade, mas vai sair caro.
enigmabox
 

Mensagempor Wagner de Queiroz » 22 Mar 2009 22:08

Se voce ainda é escravo do Windows, voce pode usar a USB.


Eu sei que a porta USB tem leituras a cada 1ms. Voce pode fazer captura de dados por um PIC ligado a USB e envia-las para o PC.

Bom, dizem que é rapido. mas ainda nao testei ainda. Mas se USB pode enviar e receber audio para e do PC, alem de ser tambem osciloscopio, pode ser uma alternativa atual e atrativa.

Eu estou longe do Linux e gostaria de voltar e talvez desenvolver alguma coisa no linux, mas estou sem tempo.

Poderia descrever melhor que tipo de projeto tem em mente?

Asssim, quem sabe possamos fazer alguma coisa.
Seja Livre, Use Linux
Avatar do usuário
Wagner de Queiroz
Word
 
Mensagens: 872
Registrado em: 11 Out 2006 13:38
Localização: Barueri-SP

Mensagempor Jorge_Francisco » 22 Mar 2009 22:17

Na USB 2.0 no modo HID pode-se receber pacotes de 64 bytes a cada 1 ms ou 64KB/s. Já no modo ping-pong pode-se receber 384KB/s.
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor msamsoniuk » 22 Mar 2009 22:23

nao precisa ser via kernel, em uma aplicacao normal vc pode usar a paralela diretamente no linux:

#define DATA 0x378
#define STATUS (DATA+1)
#define CONTROL (DATA+2)

ioperm(DATA,8,1);

e entao vc tem controle da porta. basta usar:

value = inb(STATUS);
outb(value,DATA);
outb(value,CONTROL);

para ler valores do registro de status e escrever nos registros de dados e controle. eu consigo ateh 500KB/s de taxa de transferencia, mas, como o wagner disse, as transferencias aparecem como bursts durante os time-slices que a task esta rodando. se vc roda qq outro programa ao mesmo tempo, vc vai ter bursts a 500KB/s se alternando com espacos vazios a uma cadencia de 50Hz, pq qdo outra task esta rodando a interface fica morta...

isso vem do fato que a porta paralela eh sempre controlada por software. uma solucao para isso seria utilizar um canal de DMA, daih sim, independente da multitarefa, o fluxo de dados permanece constante.

de fato, isso eh o que diferencia a usb e ethernet da paralela e serial no PC: DMA... apesar q eu acho a interface USB o maior fake da historia, deve ter sido projetada por um faxineiro na intel, se eh que tem algum engenheiro lah que seja mais inteligente que um faxineiro.

se vc utilizar DMA, a paralela vai ser tao boa quanto qq outra interface, tirando as limitacoes de performance da porta: mesmo com DMA acho que o limite eh algo em torno de 2MB/s, pq no fundo tem q manter compatibilidade com a centronics original q nao passava de portas TTL normais (duas 74374 para saida e uma 74244 para entrada).

novamente, como o wager falou, a melhor solucao seria usar um mcu ligado via usb, serial ou ethernet, daih realmente nao tem drama.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor enigmabox » 23 Mar 2009 08:13

Tome cuidado se tiver mais perifericos ligados a USB. Se estiverem em funcionamento simultaneo, mesmo ligado por portas diferentes, pode haver atraso na comunicação dos dados. Ja tive problemas com alguns perifericos como Gravador de DVD externo e Scanner, que em funcionamento dava uma pequena congelada no mouse USB.
Melhor opção é um MCU com RAM de buffer. Assim vc não perde nada e pode determinar o tempo de aquisição.
Já fiz um osciloscopio via porta paralela, usando o windows98 e um ADC0808. Digo que funcionou bem sem interrupções. Mas não tentei passar o software para as versões win2000 e XP. Acho que não daria certo.
Bom tb seria fazer uma placa PCI32, com acesso DMA, mas quem se habilita???hehe
enigmabox
 

Mensagempor xultz » 23 Mar 2009 08:29

Só complementando o comentário do Marcelo, para usar o ioperm, o programa tem que rodar pelo root ou através de sudo, o kernel não dá permissão ioperm prá usuário. Dependendo do tipo do programa que se deseja desenvolver, isso pode ser chato.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor msamsoniuk » 23 Mar 2009 17:29

eu nunca boto muita feh em USB nao... para segurar a barra de um IO cavalar, o negocio eh partir direto para fast-ethernet :)
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor mastk » 24 Mar 2009 12:44

Só complementando o comentário do Marcelo, para usar o ioperm, o programa tem que rodar pelo root ou através de sudo, o kernel não dá permissão ioperm prá usuário. Dependendo do tipo do programa que se deseja desenvolver, isso pode ser chato.


Aproveitando a deixa, pergunta basica, ha maneira de permenecer como super usuario sempre? tipo, eh um saco ter que abrir um gerenciador de arquivos como super usuario tudo vez que quero fazer coisas simples como mover um arquivo.

eu nunca boto muita feh em USB nao... para segurar a barra de um IO cavalar, o negocio eh partir direto para fast-ethernet Smile


Mcus de 8 bits, corram do tio marcelo, ele eh do mal.
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Mensagempor msamsoniuk » 24 Mar 2009 14:58

eu logo em todas as minhas maquinas como root direto, afinal eu sou o dono... soh entro como usuario nas maquinas que nao sao minhas hehehe

mastk escreveu:
Só complementando o comentário do Marcelo, para usar o ioperm, o programa tem que rodar pelo root ou através de sudo, o kernel não dá permissão ioperm prá usuário. Dependendo do tipo do programa que se deseja desenvolver, isso pode ser chato.


Aproveitando a deixa, pergunta basica, ha maneira de permenecer como super usuario sempre? tipo, eh um saco ter que abrir um gerenciador de arquivos como super usuario tudo vez que quero fazer coisas simples como mover um arquivo.

eu nunca boto muita feh em USB nao... para segurar a barra de um IO cavalar, o negocio eh partir direto para fast-ethernet Smile


Mcus de 8 bits, corram do tio marcelo, ele eh do mal.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor xultz » 24 Mar 2009 15:04

Mastk, é possível sim, mas é mais ou menos como deixar as portas da tua casa sempre destrancadas, porque é um saco usar a chave toda vez.
Porém, assim como você não tranca as portas de dentro de tua casa sempre que está lá dentro, você deve ter pastas de usuário para arquivos do usuário, e pastas root para arquivos do sistema. Se você fica fuçando em arquivos do sistema o tempo todo, o que é estranho, daí loga direto como root e rode tudo como root. Mas o melhor é mesmo manter as coisas organizadas, e cada um no seu quadrado...
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor polesapart » 26 Mar 2009 19:15

xultz escreveu:Só complementando o comentário do Marcelo, para usar o ioperm, o programa tem que rodar pelo root ou através de sudo, o kernel não dá permissão ioperm prá usuário. Dependendo do tipo do programa que se deseja desenvolver, isso pode ser chato.



Ou chown root binario && chmod u+s binario

Mas a menos que o programa faça o que tenha que fazer e abra mão dos privilégios de root depois (posso postar uns trechos de código pra fazer isto se alguém quiser), isto costuma ser tão ruim quanto escrever a senha de root num post-it e colar no monitor de uma escola publica :)
Avatar do usuário
polesapart
Byte
 
Mensagens: 477
Registrado em: 19 Nov 2007 12:56
Localização: Curitiba

Mensagempor msamsoniuk » 26 Mar 2009 22:19

opa! chmod +s realmente eh bem inseguro! :)

eu recomendaria vc pode criar um processo tipo parallel_server rodando no inittab como root e acessar ele atraves de mensagens ipc ou sockets, usando um parallel_cliente que roda como usuario nao-privilegiado.

note que *eu* rodar as coisas como root na minha maquina nao quer dizer que tudo ou todos rodam como root! eu sou eu, os outros sao os outros e cada um fica no seu quadrado! hahaha :)

polesapart escreveu:
xultz escreveu:Só complementando o comentário do Marcelo, para usar o ioperm, o programa tem que rodar pelo root ou através de sudo, o kernel não dá permissão ioperm prá usuário. Dependendo do tipo do programa que se deseja desenvolver, isso pode ser chato.



Ou chown root binario && chmod u+s binario

Mas a menos que o programa faça o que tenha que fazer e abra mão dos privilégios de root depois (posso postar uns trechos de código pra fazer isto se alguém quiser), isto costuma ser tão ruim quanto escrever a senha de root num post-it e colar no monitor de uma escola publica :)
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor polesapart » 26 Mar 2009 23:16

Marcelo Samsoniuk escreveu:opa! chmod +s realmente eh bem inseguro! :)

eu recomendaria vc pode criar um processo tipo parallel_server rodando no inittab como root e acessar ele atraves de mensagens ipc ou sockets, usando um parallel_cliente que roda como usuario nao-privilegiado.



Isto poderia não daria muito certo se o cara realmente quer baixa latência e se o programa dele for meio interativo (precisar trocar muitas mensagens entre os processos). Mesmo que o processo fazendo ioperm e i/o esteja rodando com prioridade de tempo real, cada troca de mensagens entre os processos pode ficar numa média em torno de 1,x ms. Claro que se ele enviar uma mensagem grande e o processo de alta prioridade consumir direto enviando byte a byte (e/ou recebendo) diretão eliminaria em grande parte o problema da latência, embora não fosse muito estável.

A verdade é que pra maioria dos casos comuns isto funciona perfeitamente, mas pra essas necessidades bizarras o linux realmente não se comporta como um microkernel de um rtos :D

Eu gostei da sugestão anterior da thread, de usar um µC dedicado :P
Avatar do usuário
polesapart
Byte
 
Mensagens: 477
Registrado em: 19 Nov 2007 12:56
Localização: Curitiba

Próximo

Voltar para Linux ( x86 ou x64 )

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x