Módulo de kernel “Hello World”

Módulo de kernel “Hello World”
Este é o artigo para a pessoa que está apenas começando com os módulos do kernel Linux. Empregaremos o código de exemplo de amostra para este módulo e o makefile a ser usado para compilar o módulo do kernel. Mais tarde, seguiremos as etapas para executar o módulo do kernel e para visualizar a saída do módulo "Hello World".

Módulo “Hello World”:

Este é o módulo simples do kernel, que, quando inserido no kernel Linux, imprimirá a mensagem como "Hello World". E ao removê -lo imprimirá a mensagem como “Bye Bye World!”. Estas são as duas funções que apoiaremos no módulo do kernel “Hello World”.

Código de exemplo de exemplo para o módulo do kernel:

#incluir
#incluir
#incluir
Module_license ("GPL");
Module_Description ("Hello World!");
estático int __init hello_init (vazio)

printk (kern_info "Hello World \ n");
retornar 0;

estático vazio __exit hello_exit (vazio)

printk (kern_info "Bye Bye World \ n");

module_init (hello_init);
module_exit (hello_exit);

Exemplo de makefile para compilar o módulo do kernel:

Obj-m = Hello-World.o
todos:
make -c/lib/módulos/$ (shell uname -r)/build/m = $ (pwd) módulos
limpar:
make -c/lib/módulos/$ (shell uname -r)/build m = $ (pwd) limpo

Etapas para compilar o módulo do kernel:

Copie o snippet de código acima para o mesmo diretório no host de construção, como mostrado abaixo:

Sushilrathore-2: ~/Hello-World $ LS
Olá Mundo.c makefile
Sushilrathore-2: ~/Hello-World $

Execute o comando make como mostrado abaixo e veremos os logs como abaixo:

Sushilrathore-2: ~/Hello-World $ Make
Make -c/lib/módulos/4.15.0-163-genérico/build/m =/home/cienauser/hello-world módulos
Faça [1]: Inserindo o diretório '/usr/src/linux-headers-4.15.0-163-Generic '
CC [M]/Home/Cienauser/Hello-World/Hello-World.o
Módulos de construção, estágio 2.
Módulos MODPOST 1
CC/Home/Cienauser/Hello-World/Hello-World.mod.o
LD [M]/Home/Cienauser/Hello-World/Hello-World.Ko
Faça [1]: Deixando o Diretório '/usr/src/linux-headers-4.15.0-163-Generic '
Sushilrathore-2: ~/Hello-World $

A partir dos logs acima, podemos ver que executamos o comando make e criaremos alguns arquivos criados no mesmo diretório em que temos C e Makefile. "Olá Mundo.ko ”é o arquivo que deveríamos estar olhando. Este é o arquivo de objeto do kernel. Este é o módulo que vamos inserir no kernel Linux.

Etapas para adicionar o módulo Hello-World ao kernel Linux:

O comando insmod pode ser usado para inserir o módulo do kernel no kernel Linux. A seguir, é apresentado o log que mostra o processo de usar o insmod.

Sushilrathore-2: ~/Hello-World $ sudo Insmod Hello-World.Ko
Sushilrathore-2: ~/Hello-World $

Etapas para ver a mensagem impressa por Hello-World:

"DMESG" é o comando pode ser usado para ver a saída do módulo Hello World Kernel. A seguir, é apresentado o log que mostra o processo de usar o comando DMESG.

Sushilrathore-2: ~/Hello-World $ sudo dmesg | grep -i olá
[10500712.434672] Hello World
Sushilrathore-2: ~/Hello-World $

Acima está o processo de adicionar o módulo do kernel dinamicamente. É compilado fora da imagem do kernel e, em tempo de execução, é adicionado à imagem do kernel. Dessa forma, enquanto o kernel está funcionando, podemos expandir a funcionalidade do kernel.

O Linux fornece essa maneira de estender as funções do kernel sem derrubar o sistema. O usuário deve ter muito cuidado ao escrever esses módulos. Ao descarregar o módulo do kernel, o usuário deve liberar cuidadosamente todo o recurso que foi alocado quando o módulo foi carregado.

Hello World Module também pode ser adicionado como parte da imagem do kernel. Se o usuário quiser adicionar o aplicativo Hello World como parte da imagem do kernel.

As etapas a seguir podem ser seguidas para alcançá -lo:

  1. Identifique o caminho na árvore do kernel, onde isso precisa ser adicionado.
  2. Modifique o kconfig para introduzir o novo módulo.
  3. Modifique o makefile para adicionar o novo módulo.
  4. Atualize o arquivo de configuração se o módulo for adicionado com base em algum arquivo de configuração.

Como compilar o módulo que foi adicionado nessas 4 etapas.

O kernel makefile define os "módulos" como alvo de construção que pode ser usado para construir todos os módulos no kernel Linux. Uma vez que o usuário emite os "Make Modules", nosso Hello World/Novo Módulo também é compilado e obtemos o .arquivo ko do módulo.

Essa maneira de compilação é fácil quando precisamos construir o kernel completo e nosso módulo que queremos adicionar no sistema como módulo carregável.

Conclusão

Discutimos o simples módulo Hello World Kernel e diferentes maneiras de compilar o módulo.

Também discutimos as maneiras de adicionar o módulo ao kernel Linux. Também nos referimos ao código de exemplo e makefile para a compilação. Além disso, demonstramos os conceitos com os registros experimentais.