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:
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.