Escolar Documentos
Profissional Documentos
Cultura Documentos
Atilla Graciano
Igor Siguinolfi
Tamiris Fonseca
Tiago Paixao
Vincius Souza
Itabira
09/04/16
Resumo
O Kernel do Linux nada mais do que seu ncleo, sua base, seu crebro, o qual pode
promover o desenvolvimento e a execuo de vrios softwares, alm disso gerencia processos,
o hardware e distribui os recursos para o sistema. Com base nesses dados, foi criado o
trabalho pratico, que constitui em criar uma nova chamada de sistema para o Kernel, que
dispara a mensagem Hello world.
Palavras chave: Chamada de sistema, Kernel, Linux.
Sumrio
1
INTRODUO
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MTODOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CONCLUSO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
REFERNCIAS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1 Introduo
Para que no ocorram problemas nos quais uma determinada aplicao interfira
em uma rea da memria que est designada para outra aplicao ou do prprio ncleo do
sistema. Mas tal proteo acaba gerando um novo tipo de problema, que se resume a como
permitir que uma aplicao chame rotinas as quais no tem privilgio de acesso? Este
problema foi facilmente resolvido com a utilizao de interrupes. Uma instruo especial
foi criada para permitir o acionamento de uma interrupo de forma a no depender de
eventos de qualquer origem. Assim que executada a instruo comuta o processador para
um nvel que possui o privilgio e a partir da o processo ocorre de forma semelhante ao
tratamento de interrupo. Atualmente existem instrues mais especficas que permitem
essa comutao entre estados privilegiados ou no, mas junto com elas so implementados
nos atuais processadores de forma juntamente com registradores especficos para tais
determinadas operaes. Este tipo de procedimento denominado como chamada de
sistema .As chamadas de sistema so utilizadas para toda e qualquer chamadas de sistema
para todas as operaes que necessitam de acesso a recursos de baixo nvel, ou abstraes
lgicas. A API de um determinado sistema definida diretamente pelo grupo de chamadas
oferecidas por um determinado ncleo. Para aplicaes em modo usurio as chamadas de
sistema so oferecidas atravs de uma system library que executa a preparao de todos
os parmetros, invocao e interrupo de software e retorno aplicao dos resultados
obtidos. essencial para o entendimento do funcionamento de sistemas operacionais o
estudo e anlise das chamadas de sistema, e esta oportunidade oferecida diretamente
por este projeto em si.
2 Mtodos
Primeiramente foi feita a instalao de dependncias com o seguinte comando no
terminal:
sudo apt-get install git-core libncurses5 libncurses5-dev libelf-dev
asciidocbinutils-dev linux-source qt3-dev-tools libqt3-mt-dev
libncurses5 libncurses5-dev fakeroot build-essential crash kexec-tools
makedumpfile kernel-wedge kernel-package
Logo aps foi feito o download do kernel do Linux pelo link:
http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.2.17.tar.bz2.
O arquivo foi extrado.
tar -xjvf linux-3.2.17.tar.bz2
cd linux-3.2.17/
J no diretrio do kernel foi criado um diretrio com o nome hello e os arquivos
hello.c e Makefile.
mkdir hello
gedit hello.c
gedit Makefile
O seguinte cdigo foi adicionado ao arquivo hello.c:
#include <linux/kernel.h>
asmlinkage longsys_hello(void)
{
printk("Hello world\n");
return0;
}
O arquivo foi adicionado no Makefile
obj-y := hello.o
Logo aps foi adicionada na tabela de chamadas, a chama de sistema. Para isso o
arquivo arch/x86/kernel/syscall_table_32.S foi aberto e foi adicionada a seguinte linha:
.longsys_hello
Captulo 2. Mtodos
<stdio.h>
<linux/kernel.h>
<sys/syscall.h>
<unistd.h>
Captulo 2. Mtodos
longhello_syscall(void)
{
returnsyscall(__NR_hello);
}
intmain(intargc, char*argv[])
{
longinta = hello_syscall();
printf("System call returned %ld\n", a);
return0;
}
Captulo 2. Mtodos
Captulo 2. Mtodos
Captulo 2. Mtodos
{
int count = 0;
longint a = hello_syscall();
signal(SIGINT, sigint);
while(1){
printf("System call returned %ld\n", a);
count = count + 1;
sleep(3);
if(flag == 1){
printf("Hello World times: %d",count);
printf("\n");
return 0;
}
}
}
Figura 4 Comando dmesg para ver log kernel, chamada helloworld fim do log
Onde o termo signal(SIGINT,sigint) a chamada do comando CTRL+C para
finalizar o cdigo (Figura 5). Desse modo, com a utilizao do cdigo modificado a chamada
helloworld ser apresentada no log do kernel a cada 3 segundos devido a funo while que
possui dentro de sua estrutura de loop o comando sleep(3).Caso o comando CTRL+C
seja utilizado o programa iria terminar o loop e retornar com a contagem de helloworlds
apresentados no log do kernel, sendo necessrio a utilizao do comando dmesg para
verificar diretamente no log as chamadas hellworld.Para se efetuar o teste da insero sem
falhas do comando respectivo a chamada de sistema teste, o comando abaixo foi necessrio:
cat /proc/kallsyms | grephello.
Captulo 2. Mtodos
10
11
3 Concluso
Atravs do uso do Kernel do Linux para fazer chamadas no sistema, foi possvel
entender melhor como o ncleo do sistema operacional funciona, como funcionam suas
chamadas, seu gerenciamento de processos e os sinais. Alm disso, o trabalho propiciou
melhor interao com o LINUX descobrindo-se e aplicando-se novas ferramentas.
12
Referncias
ARCHLinux.Missing bz Image after kernel compilation. Disponvel em:
<https://bbs.archlinux.org/viewtopic.php?id=79851>. Acesso em: 02 abr. 2016.
MITCHELL, Michael J.. Compile Linux Kernel on Ubuntu. Disponvel em:
<http://mitchtech.net/compile-linux-kernel-on-ubuntu-12-04-lts-detailed/>. Acesso em:
02 abr. 2016.
RAJ, Arvind S.. Adding hello world system call to Linux. Disponvel em:
<httphttps://arvindsraj.wordpress.com/2012/10/05/adding-hello-world-system-call-tolinux/>. Acesso em: 02 abr. 2016.
StackOverflow. Adding new System Call to Linux Kernel 3.13 on 64 bit
system. Disponvel em: <http://mitchtech.net/compile-linux-kernel-on-ubuntu-12-04-ltsdetailed/>. Acesso em: 02 abr. 2016.
Ubuntu Documentation. Kernel/Compile. Disponvel em:
<https://help.ubuntu.com/community/Kernel/Compile>. Acesso em: 02 abr.
2016.