Escolar Documentos
Profissional Documentos
Cultura Documentos
1 OBJETIVO
Compilar um kernel adicionando uma chamada de sistema.
2 PARÂMETROS
Foi optado pelo uso do Lubuntu 14.04 que vem com o Kernel 4.4.0
Assim, foi optado pelo kernel 3.0.41 para adicionar a chamada e substituir o kernel antigo.
Deve-se instalar algumas dependências através de:
sudo apt-get install gcc
sudo apt-get install libncurses5-dev
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install libssl-dev
sudo apt-get install libelf-dev
sudo apt-get install make sudo apt-get update
sudo apt-get upgrade
3 EXECUÇÃO
Primeiramente foi baixado o Kernel no terminal atravez da linnha de código:
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-3.0.41.tar.xz
Após isso o conteudo é extraido para a pasta usr/scr/ onde esta o outro kernel:
sudo tar -xvf linux-3.0.41.tar.xz -C/usr/src/
Depois nos localizamos na pasta destino:
cd /usr/src/linux-3.0.41/
Iniciando a criação da system call, adicionamos uma pasta ”hello”contendo dois arquivos, hello.c, que terá o
código da system call e seu Makefile:
1
Figura 2: Criar hello.c
Apos isso voltamos a pasta do kernel para editar seu Makefile e adicionar o Hello World:
cd ..
gedit makefile
Encontrar e mudar:
core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/
Para:
core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ hello/
2
Figura 4: Editar Makefile do kernel
Uma chamada simples não utiliza os outros comandos que iremos adicionar, mas foi encontrado em pesquisas
que é comum adicionar mesmo nas mais simples aplicações. Vamos para o diretório arch/x86/include/asm/
adicio nar ao arquivo unistd 32.h o codigo:
3
define NR hello 350
embaixo de:
define NR setns 346
e acrescentar 1 unidade em:
define NR syscalls 347
que ficará:
define NR syscalls 348
Agora vamos atualizar a tabela de cahama de sistemas para isso vamos ao diretório arch/x86/kernel/ e
editaremos o arquivo syscall table 32.S:
gedit arch/x86/kernel/syscall table 32.S
Adicionar na lina:
.long sys hello
4
Figura 7: Adicionar system call
Após isso podemos escolher entre usar o .config antigo executando o codigo:
sudo make oldconfig
Ou criar um novo como foi usado aqui, executando:
5
Figura 9: Selecionar configurações do kernel