Você está na página 1de 6

Nome : Rubio Torres Castro Viana

Titulo: Compilando um Kernel

Compilação do Kernel com implementação da chamada de sistema

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:

Figura 1: Criar Pasta

1
Figura 2: Criar hello.c

Figura 3: Criar Makefile

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

Agora ”linkaremos”a sistem call adicionando sua definição em systemcalls.h no diretório:


cd include/linux/
gedit syscalls.h
Adicionaremos: asmlinkage long sys hello(void);

Figura 5: Adicionar system call

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

Figura 6: Adicionar system call

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:

Figura 8: Adicionar system call

sudo make menuconfig

5
Figura 9: Selecionar configurações do kernel

Pronto, agora compilamos o kernel com o codigo:


sudo time make -j2
O time é para mostrar o tempo percorrido, o make para compilar e o -j2 para compilar usando 2 nucleos.

Figura 10: Tempo de compilação do kernel

Você também pode gostar