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.
Respostas:
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.
fonte
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.
cat
pode ler a partir deles.Dispositivos de acesso aleatório, como armazenamento flash e discos rígidos, são manipulados por dispositivos de bloco.
dd
pode 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 .
fonte
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
fonte