Ir para conteúdo

Dúvida Driver Kernel Módulo Linux


octavio rainha

Posts Recomendados

Há um tempo comprei um daqueles controles genéricos usb para computador e fiquei interessado em saber como  funcionava a comunicaçao do controle com o computador, resolvi que a melhor maneira de ver na prática seria escrever um driver. Sou novo no kernel linux, e a pouca documentaçao q achei pelo q eu vi parece datada (tanto pq alguns codigos de exemplos nem dá pra dar insmod sem erros). A pergunta, tem alguma doumentaçao mais moderna ou algo que eu nao deveria deixar de ver sobre driver e modulos linux, para conseguir escrever meu primeiro driver pra valer?

Tbm tenho interesse em saber um pouco mais sobre kernel e syscalls(tem a ver com os modulos né).

Os livros que eu estou lendo no momento( e penando um pouco tentando entender oq é novo e nao se usa mais  e atualizar os exemplos que nao rodam mais).

http://tldp.org/LDP/lkmpg/2.6/html/index.html  (daqueles exemplos classicos de documentaçao sobre algo em computaçao, alguem que sabe mto resolve escrever um livro em html).

https://lwn.net/Kernel/LDD3/  (sei que é uma boa fonte mas tmb sei que esta datado, e pelo q pesquisei nao existe pretensao em escrever a quarta ediçao).

Link para o comentário
Compartilhar em outros sites

Em 27/09/2019 em 18:39, Fernando Mercês disse:

Em que ponto você está, Octavio? Já rolou um "hello, world"? O que não tá funcionando? Não conheço nada super atualizado, mas podemos de repente fazer algo e até gerar um artigo, mantendo-o atualizado, sei lá.

Abraço!

Um  "hello world"ja rolou sim , tive quase nenhum problema em atualizar  as "novas boas práticas" de programaçao de  modulo tipo  declarar o fops e usar module_init e exit ao invés de init e cleanup_module em uns drivers (básicos) pra device de caracter (tipo o chardev.c de exemplo aqui   http://tldp.org/LDP/lkmpg/2.6/html/x569.html  e os exemplos mais pra trás no livro tbm). As minhas dúvidas e oq eu to tentando entender acho que sao   um pouco mais "estruturais" do tipo, entender melhor como funciona o "filp" (o struct file pra representar um device no kernel) na prática, entender a diferença entre .read e o .open do "fops " (eles nao deveriam ser a  mesma coisa?!), como o kernel sabe que é pra chamar a .read quando eu leio de um device file?,   acho que os diretorios do file system do linux tbm pq nao acho que entendi   o próposito de escrever um módulo que cria um file em /proc e esse foi um dos exemplos que eu nao consegui atualizar e fazer com q o "Make" funcionasse  sem erros (o exemplo procfs1.c aqui http://tldp.org/LDP/lkmpg/2.6/html/x710.html).

Acho interessante a ideia de um artigo pq pelo menos oq eu achei alem de estar datado está em ingles.

Link para o comentário
Compartilhar em outros sites

Em 28/09/2019 em 19:41, octavio rainha disse:

nao acho que entendi   o próposito de escrever um módulo que cria um file em /proc

O /proc é um sistema de arquivos virtual para os usuários consultarem informações do kernel e também dar instruções a ele, sem a necessidade de reiniciar o sistema. Por exemplo, dá pra habilitar roteamento (/proc/sys/net/ipv4/ip_forwarding) ou consultar informações do processador (/proc/cpuinfo), processos em execução, etc. Como programar um módulo é como se fosse extender o kernel, é bem útil que tal módulo escreva no procfs e também leia parâmetros de lá. ;)

Tentei compilar rapidinho num kernel 5.x e também não rolou, mas não consigo parar agora para verificar. De fato, tem um trabalho a ser feito aí!

Abraço!

Link para o comentário
Compartilhar em outros sites

Em 28/09/2019 em 20:07, fredericopissarra disse:

A coisa não mudou muito da versão 2.6 para cá, mas a documentação é MUITO grande, prepare-se:

https://www.kernel.org/doc/html/latest/driver-api/index.html

É.. acho que eu preciso de um pouco mais de preparo, mas obrigado pelo link mesmo assim.

Link para o comentário
Compartilhar em outros sites

Em 30/09/2019 em 11:48, Fernando Mercês disse:

O /proc é um sistema de arquivos virtual para os usuários consultarem informações do kernel e também dar instruções a ele, sem a necessidade de reiniciar o sistema. Por exemplo, dá pra habilitar roteamento (/proc/sys/net/ipv4/ip_forwarding) ou consultar informações do processador (/proc/cpuinfo), processos em execução, etc. Como programar um módulo é como se fosse extender o kernel, é bem útil que tal módulo escreva no procfs e também leia parâmetros de lá. ?

Tentei compilar rapidinho num kernel 5.x e também não rolou, mas não consigo parar agora para verificar. De fato, tem um trabalho a ser feito aí!

Abraço!

Interessante, sabia da parte de log do kernel no procfs mas nao q dava pra dar instruçoes por ele.

Fiquei interessado em  consertar e atualizar os exemplos do livro e posso postar aqui ou talvez ate em um topico novo( talvez até mandar pra quem publicou o livro). Valeu, Mercês.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...