Day: December 30, 2008

Early debug via USB

Ha’ varias decadas uma das principais formas de debug (ou de log) dos computadores e’ feita atraves da porta serial. Desde mainframes a placas embarcadas com microcontroladores de 8 bits, todos usam a porta serial para esta finalidade.
Mas um dia a serial podera’ deixar de existir, ou pelo menos nao sera’ tao usada quanto e’ hoje. Observe que a maioria dos notebooks atualmente nao possuem portas seriais (nem paralelas), uma vez que o padrao USB tomou conta de tudo.

Teoricamente e’ possivel usar um conversor USB Serial e continuar tendo acesso as mensagens de inicializacao do sistema, porem o stack de inicializacao da porta USB e’ muito grande e seria muito dificil inicializa-lo antes de conseguir ver as mensagens de erro. Felizmente isto mudou com o padrao EHCI (USB 2.0), eles adicionaram um recurso opcional chamado de Debug Port. Entao voce nao precisa inicializar a USB para conseguir transmitir alguns bytes via USB:
http://www.coreboot.org/EHCI_Debug_Port

Ha’ mais de dois anos Eric Biederman (sim o cara do kexec) enviou para a LKML um patch para adicionar suporte a early debug usando a Debug port existente em alguns controladores USB 2.0:
http://lkml.org/lkml/2006/12/4/7

Na epoca, como o proprio autor supos, o patch foi rejeitado, pois precisava de melhorias para ser aplicado ao kernel do Linux, felizmente agora Yinghai Lu fez algumas melhorias neste patch e ele foi aplicado ao kernel 2.6.28:
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5c05917e7fe313a187ad6ebb94c1c6cf42862a0b

A experiencia que podemos tirar disto e’ que se um determinado recurso e’ interessante para alguem, cedo ou tarde ele sera’ adicionado ao kernel do Linux. No final do dia o kernel do Linux nao sera’ apenas um sistema operacional com milhares de drivers para quase todos os dispositivos existentes, mas sera’ tambem o sistema operacional com o maior numero de recursos diferentes e inusitados.

Foi assim que surgiu o suporte a processadores sem MMU*, netconsole, Kexec, early debug via Firewire, early debug via USB, e outras infinidades de recursos que so’ o kernel do Linux tem.

Como diria Caetano: “Tudo era apenas uma brincadeira. E foi crescendo, crescendo,…” rs

* Nem mesmo o WinCE roda em microprocessadores sem MMU!