Post on 04-Jul-2015
Implementação UHCI para Memtest86+
Aluno: Rômulo JalesOrientador: Sérgio Campello
Departamento de Sistemas ComputacionaisUPE-POLI
Dezembro - 2009
O que é Memtest86+?
● Software Livre para teste de memória RAM para computadores de arquitetura x86 (IA-32)
● Não executa sob um sistema operacional● Também não é um sistema operacional● Auto-contido
O que é Memtest86+?
● Vantagens● Baixo Custo● Teste de stress● Monitoração e controle remoto
● Desvantagens● Não testa ao nível eletrônico● Suporte
Monitoração e controle remoto do Memtest86+● Barateamento de custos de manutenção● Via RS232
RS232
Mas cadê a porta da RS232?
USB – Universal Serial Bus
Criada para:● Substituir● Simplificar● Universalizar
as portas e padrões de comunicação
Por que usar USB no lugar da RS232?● Possibilidade de usar outras interfaces
● Bluetooth● Ethernet● Serial RS-232 (!)
● Onipresente nos computadores pessoais atuais
Sistemas USB
● Dispositivos● Até 127
● Conectores● Cabos● Hubs● Portas
● Hospedeiros● Apenas um...
Sistemas USB
USB & Memtest86+
USB & Memtest86+
● Memtest86+ não oferece USB● Mas...
● Oferece infraestrutura de acesso a hardware– Biblioteca em linguagem C
● “boota” o computador● Ler teclado● Escreve no monitor
● Implementar a pilha USB do hospedeiro!
Pilha USB do hospedeiro
Aplicação
Interface de Hardware
Hardware
Software
Hardware
Para usar a USB
1.Inicializar a interface de hardware
2.Inicializar dispositivo
3.Aplicação usar o dispositivo
Interface de Hardware do Hospedeiro
Entidade responsável pela comunicação entre um dispositivo USB e o computador
(hospedeiro).
Interface Hardware de Hospedeiro USB● UHCI – Universal Host Controller Interface
● USB 1.1● Intel & VIA● Fechado
● OHCI – Open Host Controller Interface● USB 1.1● Microsoft, HP, NI● Aberto
Interface Hardware de Hospedeiro USB● EHCI
● USB 2.0
● XHCI● USB 3.0
● WUSB● Wireless USB
E o escolhido é o... UHCI!
Por que UHCI?
● O meu computador tem UHCI.
● O QEMU implementa UHCI.
● A comunidade recomenda UHCI.
O que é realmente UHCI?
● Um hardware!● Dispositivo PCI autoconfigurável● Um controlador de Hospedeiro USB
Usando o UHCI
● Encontrar o controlador UHCI no barramento PCI
● “Resetar” o controlador UHCI● “Resetar” portas do controlador (são sempre
duas)● Instalar escalonador● Iniciar o controlador UHCI
PCI & UHCI
● Percorrer o espaço de configuração da PCI● No campo Classe: 0x0C
– Interfaces seriais● No campo sub-classe: 0x03
– USB● No campo controlador: 0x00
– UHCI● Obter o valor do campo endereço base 4
0x01 → OHCI0x20 → EHCI
Controlando o UHCI
● O endereço base (EBASE) é o inicio da região de memória do hospedeiro para o controle do UHCI.
● Desse endereço é feito o controle:●
Registrador Mnemônico Descrição
EBASE + 0x00 USBCMD Registrador de comando
EBASE + 0x02 USBSTS Registrador de estado
EBASE + 0x04 USBINTR Registrador de interrupções
EBASE + 0x06 FRNUM Número do quadro
EBASE + 0x08 FRBASEADDEndereço base da lista de
quadros
EBASE + 0x0C SOFMOD Modificador do iniciador de quadros
EBASE + 0x10 PORTSRC1 Registrador da porta 1
EBASE + 0x12 PORTSRC2 Registrador da porta 2
Escalonador
● Missão:● Gerenciar o acesso ao barramento
● O que é?● Uma fila de estruturas de dados
– TD e QH
● Coordenar os quatro tipos de transmissão USB:● Isócrona● Interrupção● Controle● Massivo
Estruturas de Dados
● TD● Contém o pacote a ser transmitido
● QH● Organiza os elementos a serem transferidos
● A prioridade é organizada pelo valor contido no campo “Próximo elemento”
Resultados
Resultados
● Comunicação entre o controlador e o dispositivo sofre timeout.● Campo de status do TD
● Possíveis causas:● Endereçamento errado?● Falha na configuração do UHCI?● Sobre-escrita de região de memória?● Implementação do UHCI do QEMU tem problemas?
Conclusões
● USB é uma boa alternativa para substituir RS232
● A implementação não é tão simples quanto aparentava ser.
Trabalhos Futuros
● Terminar a pilha USB para o Memtest86+● Drivers e aplicação
● Corrigir o erro do timeout● Verificando as hipóteses levantadas
● Implementar outros controladores● Utilizando como base o código gerado
Obrigado