Buscar

Compilando um kernel linux e realizando chamada de sistema

Prévia do material em texto

Nome : Rubio Torres Castro Viana
Titulo: Compilando um Kernel
Compilac¸a˜o do Kernel com implementac¸a˜o da chamada de sistema
1 OBJETIVO
Compilar um kernel adicionando uma chamada de sistema.
2 PARAˆ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 dependeˆncias atrave´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 EXECUC¸A˜O
Primeiramente foi baixado o Kernel no terminal atravez da linnha de co´digo:
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-3.0.41.tar.xz
Apo´s isso o conteudo e´ 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 criac¸a˜o da system call, adicionamos uma pasta ”hello”contendo dois arquivos, hello.c, que tera´ o
co´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 definic¸a˜o em systemcalls.h no direto´rio:
cd include/linux/
gedit syscalls.h
Adicionaremos: asmlinkage long sys hello(void);
Figura 5: Adicionar system call
Uma chamada simples na˜o utiliza os outros comandos que iremos adicionar, mas foi encontrado em pesquisas
que e´ comum adicionar mesmo nas mais simples aplicac¸o˜es. Vamos para o direto´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 ficara´:
define NR syscalls 348
Figura 6: Adicionar system call
Agora vamos atualizar a tabela de cahama de sistemas para isso vamos ao direto´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
Apo´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 configurac¸o˜es do kernel
Pronto, agora compilamos o kernel com o codigo:
sudo time make -j2
O time e´ para mostrar o tempo percorrido, o make para compilar e o -j2 para compilar usando 2 nucleos.
Figura 10: Tempo de compilac¸a˜o do kernel
6

Continue navegando