1120 Alameda Orquidea, Atibaia, SP,  BRA

fernando@driverentry.com.br

Serial Killers

Não há mais dúvidas, estão mesmo acabando com as portas seriais em notebooks e desktops. Neste post vou falar sobre alguns problemas que encontramos quando é necessário depurar aquele driver que só dá problema naquela máquina que não tem portas seriais. Quais as alternativas que temos em relação a isso?

Este mês chegaram micros novos aqui na empresa. Nestas máquinas, colocamos algumas versões beta de nossos produtos. Por algum motivo, somente nas máquinas novas, um dos nossos drivers não estava funcionando como deveria. Conforme o cita o código de ética do programador, a culpa é do estagiário que fazia os testes até que se prove o contrário. Depois de algumas tentativas frustradas de descobrir o que estava acontecendo, não tive dúvidas, vamos depurar. Para não ter que deslocar a vítima até minha mesa para conectar o cabo serial, resolvi instalar o SoftIce. Mas a vida é uma caixinha de surpresas e obtivemos uma bela BSOD quando iniciamos o SoftIce. Wow!!! Isso é raro, mas acontece. Nestes casos não temos muita escolha, vamos ter que utilizar o Windbg mesmo. Os micros que chegaram são do modelo Dimension 5150 da Dell. Dê uma olhada na parte traseira do gabinete na foto ao lado e responda rapidamente: Onde está a porta serial? Pois é, não tem mesmo. Consultando o site do fabricante, verificamos que o micro dispõe de 8 portas USB, mas nada de porta paralela e nada de porta serial.

Neste momento, fizemos uma roda e falamos todos juntos: “Oh Deus, o que faremos agora?”. Alguns dos problemas que acontecem em máquinas reais são reproduzidos em máquinas virtuais, principalmente se o driver que você está desenvolvendo é um filtro ou um driver que não lide diretamente com o hardware. Para fazer um teste, instalamos a VMware em uma das máquinas novas e felizmente o problema foi reproduzido. Essa é uma daquelas ocasiões onde ficamos felizes pelo problema aparecer. Daí em diante, foi só utilizar o velho truque da porta serial virtual na máquina virtual e redirecionar os dados para um named pipe. Isso até poderia virar um post.;-)

Bom, com o debugger conectado, break-point setado, não precisou de muito tempo para encontrar o problema, gerar uma nova versão, testar, funcionar e viver feliz para sempre. Mas nem sempre a história se resolve com estes poucos passos. Algumas máquinas virtuais não dão suporte a dispositivos USB. Mesmo a VMware que oferece este recurso, ainda não dá suporte a dispositivos de interface humana (HID) como teclados e mouses USB. Isso sem falar dos problemas psico-esotéricos que envolvem race conditions e/ou uma boa ação conjunta com Murphy. O que podemos fazer nestes casos além de sentar e chorar?

Felizmente a tecnologia a serviço da humanidade previu situações como estas. Nestes casos temos tradicionalmente duas alternativas:

1) Descrever o bug que você quer eliminar em uma folha de papel. É recomendado que esta descrição tenha trechos como “Sai bug estranho sai…”. Costurar a folha de papel dentro da boca de um sapo e com o pensamento positivo na resolução do problema, atire o sapo em um rio sem que você veja onde ele caiu. Depois de sete dias, dê um “Rebuild All” em seu projeto (Um reboot antes do build é recomendado). Caso o problema persista, repita a operação. Formatar a máquina ajuda a eliminar os maus fluídos e a espantar os espíritos atormentados que assombram o seu código. Consulte uma benzedeira de software para obter melhores resultados.

2) Utilizar uma placa FireWire e fazer a conexão do Windbg utilizando um cabo IEEE 1394. Esta opção só estará disponível se a máquina a ser depurada for um Windows XP ou superior. Estas placas são espetadas em seu barramento PCI ou ainda PCMCIA. Ainda não cheguei a utilizar este tipo de conexão para depurar uma máquina, mas é seguramente bem rápido e confortável sabendo que os dados são transmitidos a uma taxa de até 400Mbps.

Não posso utilizar um daqueles famosos conversores USB para portas seriais que são vendidos na Santa Ifigênia? Mesmo que não seja necessário instalar um driver no seu sistema, estes adaptadores utilizam drivers para funcionar. Toda a pilha USB é montada para que estes dispositivos funcionem. Em uma máquina que está sendo depurada em Kernel, todo o código que trata a comunicação serial ou firewire está hard coded no loader do sistema e trabalha com endereços fixos padrões. Estes adaptadores podem ser utilizados sem problemas pela máquina que fará o Debug, mas não pelas que irão sofrer o Debug.

E se eu utilizar uma placa multi-serial PCI ? Isso vai depender de quais endereços de I/O e interrupções a placa vai oferecer. Normalmente estas placas utilizam endereços diferentes dos endereços padrões a fim de não criar nenhuma incompatibilidade com as portas que possivelmente pré-existam na máquina. Mas se a placa oferecer a opção de utilizar os endereços padrões, não haverá problemas.

O Windows Vista trará suporte a Debug de Kernel via porta USB 2.0, entretanto algumas condições serão exigidas. O cabo USB deverá ser especial para este fim, a interface USB do computador sendo depurado deverá oferecer suporte a Debug de Kernel, e por último e não menos importante, a controladora USB do computador que fará o Debug deverá ser compatível com Extended Host Controller Interface(EHCI).

Caso você se interesse em adquirir interfaces IEEE 1394, lembre-se que você deverá ter pelo menos duas interfaces deste tipo para que haja o link entre a máquina depuradora e a máquina depurada. Embora eu tenha visto alguns comentários perdidos na Internet sobre cabos conversores USB x FireWire (para utilizar na máquina depuradora), até onde pude ver são eletricamente impossíveis de serem construídos. Isso porque todo o protocolo é diferente. Enquanto o USB é um protocolo “Master x Slave”, o FireWire é “Peer to Peer”. Seria necessário algum hardware inteligente no meio do caminho para fazer toda a tradução.

Estamos adquirindo estas interfaces FireWire para PCMCIA aqui na Open a fim de eliminar o problema de depurar notebooks de clientes que nasceram aleijados de portas seriais. Creio que em pouco tempo poderemos abrir mão do sapo e tudo mais. Farei algumas comparações com o bom e velho cabo serial e darei alguma notícia sobre este assunto.



8 Responses

  1. “… a interface USB do computador sendo depurado deverá oferecer suporte a Debug de Kernel, …”

    Isso quer dizer que existe uma limitação física das máquinas antigas? Ou seja, a plataforma tem que ter algum tipo de suporte no próprio hardware?

    1. Isso mesmo Wanderley. A controladora USB da máquina a ser depurada deve conter uma interface com endereços reservados para debug. Se você quiser saber especificamente quais são estes detalhes, dê uma olhadinha na USB2 Debug Device Functional Specification (.pdf). Sabendo este é um recurso diponível somente a partir do Windows Vista, uma máquina capaz de rodar o Vista provavelmente não é uma máquina antiga. Mais detalhes interessantes no site do fabricante do cabo USB para Debug.

  2. Fernando, boa tarde…
    como eu faço o velho truque da porta serial virtual…
    estou utilizando o Virtual PC
    e ate agora naum estou conseguindo…

    obrigado

    1. Olá Leandro,

      O velho truque da porta serial virtual está descrito neste post, mas o exemplo descrito utiliza uma máquina virtual da VmWare. Os passos são realmente muito parecidos, mas se você ainda tiver problemas em conseguir, este artigo da OSR faz o mesmo exemplo utilizando uma Virtual PC.

      Have Fun!

      1. Valew mesmo em fernando,
        agora sim consigo debugar… o processo eh bem parecido em ambas as VM’s…

  3. Fernando,
    estou implementando um projeto em que o programa que deveria rodar em um pc normal so roda na vmware. e eu preciso acoplar uma placa denominada USRP, que possui entrada USB2 e não estou conseguindo. Entretanto é esquisito pq consigo utilizar mouse usb enquanto a vmware está ativada sem nenhum problema. Me de alguma solução simples, pois tenho que tentar implementar isso até dia 20 de dezembro e sou ligeiramente ignorante quando o assunto é TI. Grata.
    Ana lúcia

    ah, me mande, e-mail por favor

  4. Olá, Seu Ferdinando.

    Pois é, um bom tempo se passou, as crianças cresceram, eu finalmente entendi o que você quis dizer com as limitações do SO para depuração com outras interfaces, e agora, estou com medo de não termos uma opção padrão (e barata) nos próximos anos, enquanto o Vista tenta se tornar um SO padrão e as portas seriais estão sendo extintas.

    O firewire, pelo que pesquisei em sites de compras, existe em grande quantidade nos laptops, o que faz a solução portátil nesse caso ser um cabo firewire 4×4 para depuração rápida e indolor. Também existe a possibilidade de se usar USB 2.0 Debug, já que máquinas novas sendo vendidas significa mais Windows Vista na casa dos vizinhos. Porém, não estou certo que exista uma porta USB de fábrica que suporte essa característica.

    Apesar da relativa facilidade com laptops, não há a mesma convenção para máquinas desktop, sendo geralmente o firewire um item (bem) opcional. Na verdade, é mais difícil achar um desktop com firewire do que (quem diria) com o famigerado RJ11, um item que, eu diria, logo logo estará no céu das interfaces pré-históricas, ao lado direito do RS-232.

    Então minha pergunta se resume à seguinte: o Sr. encontrou alguma solução viável nesse ambiente hostil que caiba na maleta do notebook quando formos visitar clientes com telas azuis estampadas no rosto?

    []s

    1. Olá seu Wanderlesma,

      Bom, meu notebook, que faz visitas a clientes, não tem portas seriais, neste caso, um conversor USB-Serial resvolve isso, sabendo que meu notebook vai ser o lado HOST deste debug. Estes conversores são leves, pequenos e relativamente baratos. Sem falar que você os encontra facilmenmte em qualquer padaria, farmácia, quitanda e até mesmo em lojas de informática.

      Quando não existe porta serial no lado a ser depurado, tanto em desktops como em notebooks, as soluções firewire conseguem resolver o problema e são bem fáceis de se colocar na mala do notebook e muito acessíveis na Sta Ifigênia.

      O único cenário que não consegui resolver ainda foi um notebook, que além de não possuir porta serial, possuia um slot para ExpressCard, assim o cartão PCMCIA/Firewire não resolveu o problema. Isso aconteceu a uns 6 meses, e na época não tinha achado essa interface no Brasil. Devo dizer que tive que depurar aquele notebook à moda antiga, mas no fim tudo deu certo.

      Ainda não tive a oportunidade de testar uma interface de debug USB. Além de ter o cabo de debug e de ser Windows Vista, a BIOS da máquina tem que oferecer suporte a essa interface. Pelo que pude ler até hoje, o único jeito de descobrir se determinada placa oferece este suporte é tentando. Então não conte com esta interface como a única maneira de fazer o debug, a BIOS da máquina TARGET pode não suportar essa funcionalidade e te deixar na mão.

      Grande abraço!

Leave a Reply

Your email address will not be published.