10.5.07

Curso de drivers para Windows

Como alguns de vocês puderam ler em um outro post, fui convidado pela Universidade Gama Filho a ministrar um curso de desenvolvimento em Kernel Mode para Windows. Já foram fechados os detalhes do curso que darei e já estariam produzindo o material para a divulgação, mas enquanto este post era escrito, fui notificado de que ocorreu um atraso na produção deste material e que estaria disponível a partir do dia 21 de maio. Já dei uma olhada no Folder que eles estão produzindo, e pelo que vi, resolveram resumir a descrição do curso que darei. Por esta razão, vou colocar a versão completa da descrição aqui. Segue o arquivo que enviei para a universidade.

 
Objetivo:
==========
Este curso é destinado aos desenvolvedores ou estudantes que precisam entender
os conceitos fundamentais sobre implementação de drivers para Windows. Este
curso não abordará implementações específicas de drivers, tais como impressoras,
vídeo, SCSI, NDIS, USB, 1394 ou UMDF. O objetivo deste curso é preparar os
alunos que querem entender, testar, complementar ou construir drivers para
Windows empregando os conceitos gerais envolvidos durante o processo.
 
 
Pré-requisitos:
==================
Conhecimento da linguagem C
Básico de API Windows
Básico de Sistemas Operacionais
 
 
Tópicos abordados:
=====================
Visão geral da arquitetura do Sistema
        Processos e Threads     
        Memória Virtual e Paginação
        Kernel Mode x User Mode
        Subsistemas e API nativa
        IoManager
        Pilha de Drivers e Plug-and-Play
        Object Manager
                Terminal Server
        Camada de abstração de Hardware (HAL)
 
Ambiente (obtenção, instalação e utilização)
        Windows Device Driver Kit
        Microsoft Visual Studio Express
        Microsoft Windows Debuging Tools
        Símbolos
 
Escrevendo um Driver
        Escrevendo DriverEntry e DriverUnload
        Compilando o Driver
        Instalando o Driver (Legacy)
                Dependências
                Grupos
                Load Order
        Depurando o Driver
                Instalações Checked Build
                Driver Verifier
                Mapeando imagem para depuração
                Utilizando Máquinas Virtuais
                SoftIce
        Criando DeviceObject
        Symbolic Links
        I/O Request Packets
        IOCTLs e DeviceIoControl
        Implementando Dispatch Routines
                Buffered I/O
                Direct I/O
                Neither I/O
        Objetos, Handles e Ponteiros
        Contexto Arbitrário
        IRQL's, APC's, DPC's e WorkItems
        Sincronismo
                Mutex
                FastMutex
                ERESOURCE
                Spin Lock
        Eventos e Timers
        Filas Personalizadas
 
Interações com Hardware
        Port I/O
        Interrupções e ISR's
        DMA
 
Escrevendo Filtros
        Escrevendo a rotina AddDevice
        Filtros para drivers Legacy
        Repassando IRPs
        Stack Locations
        Completion Routines
        Tratamento de IRPs Pendentes
        Cancelamento de IRPs
        Criando IRPs para outros Drivers
 
Tipos de Drivers
        Legacy drivers
        WDM Drivers
        Minidrivers
        Miniports
        Miniclass
 
Instalações
        Criando um arquivo .INF
        O uso da SetupApi
 
Referências
        Web sites
        Grupos de discussão
        Livros
 

Até o momento em que este post foi escrito, o atendimento da universidade não estava apto a fornecer detalhes sobre o curso, tais como data de inscrição, conteúdo ou mesmo calendário. Mas posso lhes adiantar o que estou sabendo até agora.

O curso terá duração de 40 horas, sendo distribuídas em 10 aulas de 4 horas cada. As aulas serão dadas aos sábados das 13:00 às 17:00. Até onde sei, o preço será de R$ 1.800,00.

O curso está marcado para ter sua primeira turma iniciando dia 26 de maio. Serão necessários no mínimo 5 alunos para formar uma turma, mas pela quantidade de pessoas que já entraram em contato buscando detalhes (mesmo sem divulgação), minha preocupação passa a ser o limite superior de 10 alunos. Resolvemos limitar a turma em 10 alunos para que houvesse um melhor aproveitamento do conteúdo.

Concordo que 40 horas é pouco para aprender tudo que é necessário para desenvolver drivers, mas já será um excelente ponto de partida para ter seu primeiro contato. Se você é do tipo de pessoa que precisa aprender absolutamente tudo para começar a desenvolver, então já vou lhe adiantando que este curso não é para você. Os maiores desenvolvedores de Kernel que eu conheço (de Blog, mas conheço), e que trabalham com isso a anos e anos, dizem que nunca sabem tudo. Para se ter uma idéia, alguns desenvolvedores focam apenas determinados assuntos dentro do Kernel. Um trabalha a 10 anos só com drivers de disco, um outro trabalha a 7 anos somente com drivers de rede. Tony Mason, por exemplo, trabalha a 18 anos só com File System Drivers. Agora pergunta pra eles se eles sabem tudo. E eu que, por uma época, me sentia mal por tentar me focar somente em trabalhos de Kernel e recusava trabalhos em User Mode. As vezes, em rodas de amigos, ouvia comentários de como fazer isso ou aquilo em .Net, e eu viajando na maionese. Eu mal sabia que dentro do assunto Kernel ainda existia uma infinidade de detalhes e especializações. Será possível aprender tudo?

Estou preparando o conteúdo de forma que os alunos possam ter pequenas experiências práticas, tais como escrever e compilar um driver "Hello World", instalá-los em máquinas virtuais e depurá-los. Não tem jeito, tem que colocar a mão na massa. Conectar duas máquinas reais com um cabo serial e fazer Debug de Kernel. Gerar e analizar Crash Dumps. Penso que temos que tirar o máximo proveito do fato de estarmos juntos em uma sala aula, e realizar algumas experiências que os livros tentam descrever somente com palavras e figuras. É esta vontade de pôr as coisas em prática que contribuíram para que eu adquirisse o kit de treinamento à venda na OSR Online. O kit que estarei levando para o curso, e que aparece na foto acima, é basicamente uma placa PCI de I/O Digital. Meu objetivo é fazer com que drivers de alunos possam controlar este dispositivo.

Bom, à medida que eu for recebendo notícias, irei repassando a vocês.
Até mais.

2 Comments:

At 17/9/07 15:45, Anonymous Anonymous said...

quando teremos novas turmas para este curso?

 
At 7/3/08 10:38, Blogger Fernando Roberto da Silva said...

Olá,

Várias pessoas me perguntam o mesmo. Estou estudando um novo local para o curso que atenderá a um grupo aberto.

Atualmente o curso é dado à turmas fechadas em empresas interessadas no assunto.

Pelo andamento das coisas, devo ter uma turma aberta perto de junho ou julho. Mas qualquer novidade será postada aqui neste blog.

[]s.

 

Post a Comment

<< Home

web stats script