Criando um driver linux

Iremos abordar neste artigo, como criar um device driver em linux.

Pré requisitos

Instale os seguintes pacotes:

sudo apt-get install linux-headers-generic

apt-get install linux-headers-`uname -r`

Instale o gcc:

sudo apt-get install gcc

sudo apt-get install build-essential

apt-get install linux-virtual

GIT do Projeto

https://github.com/marcelomaurin/devicedriver_sample

Compilando o projeto

Abaixo o vídeo explicativo do tópico que será abordado aqui:

Agora vamos ao nosso código, crie um programa hello.c, conforme o código abaixo:

/*
 *  hello.c - The simplest kernel module.
 */
#include <linux/init.h>
#include <linux/module.h>	/* Needed by all modules */
#include <linux/kernel.h>	/* Needed for KERN_INFO */

static int hello_init(void)
{
	printk(KERN_INFO "Hello world 1.\n");

	/*
	 * A non 0 return means init_module failed; module can't be loaded.
	 */
	return 0;
}

static void hello_exit(void)
{
	printk(KERN_INFO "Goodbye world 1.\n");
}

module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("MARCELO MAURIN MARTINS");

Agora crie o Makefile:

obj-m += hello.o

all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Carregando o Módulo do Kernel

Para carregar o módulo é necessário primeiro entender alguns comandos:

lsmod

Lista os módulos carregados do kernel.

Exemplo de lsmod

insmod

Carrega um módulo no kernel.

Carrega o módulo na memória

dmesg

Mostra mensagens do sistema

Retorno do modulo carregado em dmesg

rmmod

Remove um modulo da memória do kernel

Remove um módulo do kernel
Lista mensagens do kernel

Referências

Este artigo esta sendo baseado em vários artigos, o principal é esse:

https://tldp.org/LDP/lkmpg/2.6/html/x181.html

How to Write a Hello World Program in Linux Device driver

Linux Device Driver – Alessandro Rubini