Existem recursos para aprender a escrever drivers?

26

Tenho uma experiência decente no design de hardware e sistemas embarcados em geral, mas nunca escrevi um driver para um sistema operacional.

Gostaria de saber se existem bons guias, de preferência online, embora bons livros me interessem, que me darão um bom começo sobre o que preciso saber para projetar e implementar drivers para um sistema operacional.

Provavelmente, haverá pessoas atirando em mim e, embora eu adorasse ver um bom guia, não importa em que sistema operacional ele se baseia, eu gostaria de ver um guia baseado em Windows, principalmente devido ao fato de que a maioria das pessoas Eu venderia um produto teria janelas.

Informe-me se houver alguma informação extra que eu possa adicionar para tornar isso mais claro.

Kortuk
fonte
11
Ótima pergunta, eu também estou interessado neste.
Hedgehog
Eu aceitei a resposta mais ampla. Para obter informações sobre cada sistema operacional, gostei da resposta. A resposta de Joby foi excelente, específica para Linux. Tive dificuldade para decidir.
Kortuk

Respostas:

10

A maior parte da minha experiência recente na criação de drivers de sistemas operacionais reais tem sido com o Linux, e a melhor referência da IMO é o Linux Device Drivers, 3ª Edição, de Jonathan Corbet, Alessandro Rubini e Greg Kroah-Hartman (2005), que já foi mencionado. Está disponível na Amazon , Safari Books On-Line e também como download gratuito .

Mais alguns livros sobre o mesmo assunto são Essential Linux Device Drivers , de Sreekrishnan Venkateswaran (2008) (também disponível no Safari Books Online ) e Writing Linux Device Drivers: um guia com exercícios (volume 3) do Dr. Jerry Cooperstein (2009).

Para os drivers de dispositivos Windows, o último livro sobre o assunto (publicado há duas semanas) parece ser o Windows 7 Device Driver , de Ronald D. Reeves, Ph.D. (2010). Também está disponível no Safari Books Online .

Um livro antigo, que abrangeria o Windows XP, é: Programação do Microsoft Windows Driver Model, Segunda Edição , de Walter Oney (2002). Também está disponível no Safari Books Online .

Outro livro, que parece estar esgotado, mas disponível no Safari Books Online, é Developing Drivers with the Windows Driver Foundation , de Penny Orwick e Guy Smith (2007). Suponho que cobriria o Windows Vista.

Finalmente, a Microsoft tem ponteiros para muitos blogs, etc., discutindo o desenvolvimento de drivers.

tcrosley
fonte
Obrigado, eu sugiro que você tenha feito seu post também ter um link para "Drivers de dispositivo Linux". Caso contrário, muito completo.
Kortuk
11

Um bom driver encapsula os recursos do hardware e os disponibiliza para os SO / aplicativos de maneira natural.

A melhor maneira de fazer isso depende muito de qual sistema operacional você está alvejando e que tipo de hardware o driver é.

Minha experiência é toda com Linux e pequenos OSen personalizados em tempo real.

Para Linux, eu recomendo a leitura de drivers de dispositivo Linux . É uma boa introdução aos diferentes tipos de drivers Linux e às abstrações que o sistema operacional fornece para eles.

Dispositivos como portas seriais em que os dados são lidos seqüencialmente são geralmente manipulados por drivers de dispositivo de caracteres com um nó de dispositivo no espaço do usuário para os aplicativos lerem. catpode ler a partir deles.

Dispositivos de acesso aleatório, como armazenamento flash e discos rígidos, são manipulados por dispositivos de bloco. ddpode acessar estes. Para um bom exemplo, dê uma olhada no sistema MTD Linux .

Os drivers que praticam manobras de baixo nível com o hardware quase certamente precisam ser implementados no espaço do kernel. Você pode optar por criar um módulo do kernel carregável em tempo de execução ou colocar seu código estaticamente no kernel do linux.

Os drivers criados com base nos drivers genéricos existentes, como USB, podem ser gravados no espaço do usuário. Usando, por exemplo, libusb .

Toby Jaffey
fonte
4
Drivers de dispositivo Linux é um bom livro. Infelizmente, essas coisas são altamente específicas do sistema operacional. Provavelmente, o Linux é mais fácil de escrever, porque já existem muitos drivers na árvore de origem para referência. Se você escreveu código incorporado para acionar os periféricos de um microprocessador, provavelmente possui uma compreensão decente dos fundamentos do driver de dispositivo.
markrages
Sim, estou removendo meus comentários. minha culpa.
Kortuk
11
Como as marcas mencionadas mencionaram, a coragem de um driver, que controla o hardware real, será a mesma, independentemente de você possuir um sistema operacional ou não. As principais diferenças ao escrever drivers são: 1) as interfaces precisam se encaixar em um modelo padrão (por exemplo, abrir, fechar, ler, escrever, ioctl) para o sistema operacional e 2) o método no qual o driver é instalado e ativado.
tcrosley
11
@ Crosley, se você tiver muitas informações sobre esses detalhes, eu adoraria ver uma resposta sobre isso.
Kortuk
3

Não tenho experiência nesta edição, mas vou dar meus dois centavos.

Você pode começar aqui http://www.osr.com/index.html ou aqui https://www.osronline.com/index.cfm

Aqui no Brasil, temos um bom blog sobre esse assunto. Está escrito em português e inglês. Infelizmente, a maioria dos artigos está em português.

Há uma postagem em português sobre livros neste blog: http://translate.google.com.br/translate?hl=pt-BR&ie=UTF-8&sl=pt&tl=pt&u=http://driverentry.com.br/ blog /% 3Fp% 3D825 & twu = 1

Espero ter ajudado um pouco

Daniel Grillo
fonte
Isso ajudará muito se eu fizer a pergunta: "Onde eu aprendo português online a tempo de aprender a escrever drivers?" Obrigado por ajudar.
Kortuk
2
Não se preocupe em aprender português. Os links sobre o desenvolvimento de unidades que passei estão em inglês. Até o DriveEntry também está escrito em inglês. Infelizmente, o post sobre livros está em português, mas os livros estão em inglês. E o que mais importa são os livros, não o post.
Daniel Grillo