Usando o comando dmesg podemos então checar a mensagem da chamada de sistema implementada
O procedimento abaixo foi testado no Ubuntu, mas funciona em outras distribuições Linux, talvez seja necessário algumas pequenas alterações e pesquisas online sobre o procedimento.
1º passo - Baixar a versão do Ubuntu 16.04.7 para utilizar na sua máquina virtual (VM). Aqui está um link com a versão que baixamos: https://releases.ubuntu.com/16.04/ubuntu-16.04.7-desktop-amd64.iso
2º passo - Instalar GCC com uma chamada no terminal ou então instalar o build-essential, que também contém o GCC e outros pacotes necessários para compilar. Comando:
[sudo apt install build-essential libncurses-dev libssl-dev libelf-dev bison flex -y]
3º passo - Consultar a versão do kernel utilizando o “uname -r” e baixar a versão do kernel 5.17.4 que é superior a versão 4.15.0 com o comando wget. Comando:
[wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.17.4.tar.xz]
4º passo - Descompactar o Kernel diretamente no diretório /usr/src/linux-4.17.4/ e criar uma nova chamada de sistema dentro do diretório de mesmo nome no kernel utilizando um arquivo hello.c
Em seguida criar um Makefile no diretório hello.
5º passo - Agora adicionamos hello/ ao Makefile do Kernel.
6º passo - Adicionar a nova chamada do sistema na tabela de chamada de sistema a partir da linha 548 e em seguida adicionar após a última linha do arquivo syscall a linha de comando asmlinkage.
7º passo - Agora antes de compilar é necessário criar o arquivo .config , com o comando “sudo make menuconfig”. Aparecerá algumas opções; deixe como Default, Save e Exit. Em seguida é necessário remover do arquivo .config presente em /usr/src/linux-4.17.4/ alguns certificados confiáveis para evitar erros durante a compilação, saiba mais clicando aqui.
8º passo - Use o comando “sudo make” para então compilar o Kernel. Note que o comando “nproc” fornece o número de núcleos disponíveis em sua máquina, então caso possua mais de um núcleo use o comando “sudo make -jn” onde n é o número de núcleos disponíveis para poder reduzir o tempo de compilação. Após algumas horas compilando, conseguimos ter êxito e então utilizamos o comando “sudo make modules_install install” para instalar o Kernel em nosso sistema.
9º passo - Após instalado, note que foi criado arquivos dentro do diretório /boot/ e o nome do arquivo executável que corresponde ao kernel é "vmlinuz-4.17.4"
Utilizando o comando “update-grub” garantimos que o grub seja atualizado com a versão do Kernel instalada. Depois reinicie a máquina virtual e após o sistema iniciar, confira a versão do kernel para visualizar se atualizou.
Para testar a chamada do sistema, crie o seguinte arquivo .c e o compilamos com gcc.
Em seguida rodamos o arquivo compilado ./a.out
10º passo - Usando o comando dmesg podemos então checar a mensagem da chamada que fizemos. A chamada de sistema implementada foi então executada em model kernel.
Resumindo, o kernel precisará ser recompilado toda vez que uma nova chamada de sistema for adicionada.
COMENTÁRIOS