Вы находитесь на странице: 1из 31

Kernel Linux

Prof. Humberto Caetano Humberto.ccs@gmail.com

Observaes Sobre o Material

Este material derivado de diversos trabalhos livremente disponveis na Internet

2012

Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux

2.31

Material para Estudo

http://www.tldp.org Sistemas Operacionais Modernos, Tanenbaum Sites na Internet

2012

Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux

3.31

Tipos de Kernel

Monoltico

O Kernel Monoltico executa cada servio bsico do sistema como gerenciamento de memria, manipulao de interrupes e comunicao I/O, sistemas de arquivos, etc. no espao do kernel. A incluso de todos os servios bsicos no espao do kernel tem 3 grandes inconvenientes: o tamanho do kernel, falta de extensibilidade e difcil manuteno. Os Kernels Monolticos exigem recompilao e reboot no sistema antes de elespoderem adicionar novos recursos. Linux, Unix, FreeBSD, DOS
Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux 4.31

2012

Tipos de Kernel

Microkernel

O conceito de Microkernel de reduzir o kernel a comunicaes de processos bsicos econtrole de I/O, e deixar os outros servios de sistemas situados no user-space (espao dousurio) em forma de processos normais(chamados de servers) Existe um server para cada problema de gerenciamento de memria, um server faz gerenciamento de processos, e outrogerencia drivers, e assim por diante. Microkernels oferecem uma maior flexibilidade, pois voc pode adicionar vriosmdulos de suport sem realizar o reboot Mdulos infectados,ou Trojan modules, apresentam um grande risco de segurana. Se o kernel carrega tal mdulo,ele roda com todo o controle do sistema e privilgios do kernel em si. OpenSolaris, Hurd, Minix
Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux 5.31

2012

Tipos de Kernel

Kernel Hbrido

A Microsoft introduziu o kernel para seu Windows NT, no incio da dcada de 1990. Foi planejado para ser um microkernel, mas por falta de desempenho, a Microsoft decidiu colocar um monte de servios do sistema de volta ao espao do kernel, incluindo, entre outros, os drivers de dispositivo e pilhas de comunicao. Isso encheu o kernel e tornou-o maior do que a maioria dos kernels monolticos existentes naquela poca. Windows
Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux 6.31

2012

Tipos de Kernel

ExoKernel

Um ExoKernel elimina a noo que um sistema operacional deveria prover abstrao para as aplicaes. Ao invs disso ele se preocupa, basicamente, em multiplexar de forma segura o acesso puro ao hardware. Xen

2012

Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux

7.31

Arquitetura do Sistema

2012

Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux

8.31

Caractersticas do Kernel

1. Permite o carregamento dinmico dos mdulos do kernel. Embora o mesmo seja monoltico, capaz de carregar e descarregar dinamicamente o cdigo do kernel. 2. Tem suporte do multiprocessador simtrico (SMP). 3. O Kernel Linux antecipado (preemptive). capaz de antecipar uma tarefa, caso ela esteja sendo executada no kernel. 4. O Kernel Linux no tem drivers no user space, e sim Kernel Loadable Modules que rodam no Kernel. 5. O Kernel Linux no pode utilizar aritmtica de ponto flutuante.

2012

Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux

9.31

Caractersticas do Kernel

6. A memria do Kernel Linux no paginvel. Cada byte de memria consumido um byte a menos na memria fsica. 7. O Kernel Linux executa operaes em segundo plano atravs das threads - processos-padres que existem unicamente no kernel space e no trocam de contexto no user space, porm, so programveis e so preemptive (antecipados) como processos normais. 8. Quando um processo ou uma tarefa termina, o Kernel Linux libera os recursos e notifica os outros processos e tarefas que estavam associados a eles. 9. O Kernel Linux livre, em todos os sentidos da palavra.
Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux 10.31

2012

Kernel do Linux

2012

Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux

11.31

Mdulos

Para verificarmos as informaes de um mdulo do Kernel utilizamos o comando:


# modinfo vfat
filename: author: description: license: alias: depends: intree: vermagic: Y 3.10.0 SMP mod_unload modversions 686
Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux 12.31

/lib/modules/3.10.0/kernel/fs/fat/vfat.ko Gordon Chaffee VFAT filesystem support GPL fs-vfat fat

2012

Mdulos

Para carregarmos um mdulo podemos usar o comando insmod. Mas o insmod s funciona corretamente se voc carregar todos os mdulos que tem dependncias.
# insmod /lib/modules/3.10.0/kernel/fs/fat/vfat.ko
insmod: error inserting '/lib/modules/3.10.0/kernel/fs/fat/vfat.ko': -1 Unknown symbol in module

2012

Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux

13.31

Mdulos

Para carregarmos um mdulo e suas dependncias podemos utilizar o comando modprobe.


# modprobe vfat

Uma outra vantagem do modprobe que ele capaz de carregar o mdulo sem a necessidade de digitarmos o caminho completo ao arquivo do mdulo.
Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux 14.31

2012

Mdulos

Todos os mdulos do kernel atual esto localizados em:

/lib/modules/`uname -r`

Para listarmos os mdulos carregados atualmente usamos o lsmod:


# lsmod | grep vfat
vfat fat 6605 0 37434 1 vfat
Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux 15.31

2012

Mdulos

Para removermos mdulos do sistema usamos o rmmod:


# rmmod vfat # lsmod | grep vfat

2012

Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux

16.31

Kernel do Linux e Shell

# uname -r 2.6.32-5-686 A.B.C-D # uname -a Linux debian 2.6.32-5-686 #1 SMP Fri May 10 08:33:48 UTC 2013 i686 GNU/Linux

2012

Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux

17.31

Kernel do Linux e Shell

A - Version :: Nmero principal. a verso principal. B - Patchlevel :: Indica mudanas importantes no funcionamento do kernel do Linux. o nmero de reviso principal. At a verso 2.4 se esse nmero fosse mpar, indicava um kernel experimental, se fosse par, ento era um kernel considerado estvel (de produo). Da verso 2.6 em diante no se usa mais essa distino. Agora so usadas RC (Release Candidate). Ento, a verso 3.8.3, uma verso estvel, a verso 3.9-rc2 uma verso de desenvolvimento. A verso 2.6.34.14 era uma verso estvel, a verso 2.6.34-rc5 era uma verso em desenvolvimento. C - Sublevel :: Sua evoluo indica o suporte a novos dispositivos, bem como correo de bugs e pequenos melhoramentos no sistema. o nmero de reviso secundrio. D - Extraversion :: Usado quando desejamos diferenciar duas compilaes de um kernel de mesma verso, a fim de constiturem mdulos separados. So as correes urgentes.
Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux 18.31

2012

Linux: Monoltico mas modular

O Linux implementa um kernel monoltico. Porm ele implementa ideias do mundo Mikrokernel:

Projeto modular Ser preemptvel Carregamento de mdulos dinmicamente

O Linux tenta obter o melhor dos dois mundos


Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux 19.31

2012

Obtendo o Kernel do Linux

possvel obter o kernel do Linux atravs de duas formas bsicas:

Baixando o arquivo tar.gz disponvel em kernel.org ou atravs da sua distribuio Baixando uma verso atravs do git.

2012

Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux

20.31

Obtendo o Kernel do Linux

Para efeitos acadmicos iremos utilizar o kernel 3.9.8:


# wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.9.8.tar.gz

Agora podemos descompactar o arquivo e envi-lo ao diretrio correto de compilao:


# tar zxvf linux-3.9.8.tar.gz # mv linux-3.9.8 /usr/src/ # ln -s /usr/src/linux-3.9.8 /usr/src/linux

2012

Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux

21.31

Preparando a compilao

Linux Debian
# apt-get install build-essential ncurses-dev kernel-package

Linux CentOS
# yum groupinstall "Development Tools" ncurses-devel bc

2012

Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux

22.31

Preparando a compilao

Como ponto de partida, vamos copiar a configurao atual do kernel do nosso Linux.
# cp /boot/config-`uname -r` /usr/src/linux/.config

Agora podemos iniciar a configurao detalhada da compilao


# cd /usr/src/linux # make menuconfig

Lembrando que podemos utilizar os comandos make config, make menuconfig e make xconfig para criarmos o arquivo .config que ser utilizado na compilao

2012

Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux

23.31

Compilando

Antes de compilarmos o kernel importante limparmos as compilaes anteriores.


# make clean

Para compilarmos o kernel basta utilizarmos o comando make


# make

2012

Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux

24.31

Preparando a compilao

Vcios old schoool.


# make modules # make modules_install

Para que possamos iniciar o Linux corretamente, precisamos criar o arquivo de drivers de dispositivos.
# ls /lib/modules/ # cp .config /boot/config-3.9.8

No debian
# mkinitramfs -o /boot/initrd.img-3.9.8 3.9.8

No CentOS
# mkinitrd /boot/initramfs-3.9.8.img 3.9.8
Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux 25.31

2012

Preparando a inicializao

Debian
# cp arch/i386/boot/bzImage /boot/vmlinuz-3.9.8 # update-grub
Generating grub.cfg ... Found linux image: /boot/vmlinuz-3.9.8 Found initrd image: /boot/initrd.img-3.9.8 Found linux image: /boot/vmlinuz-2.6.32-5-686 Found initrd image: /boot/initrd.img-2.6.32-5-686

CentOS
# cp arch/i386/boot/bzImage /boot/vmlinuz-3.9.8

Agora temos que editar o arquivo /boot/grub/menu.lst e adicionar a entrada para o novo kernel.
Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux 26.31

2012

Aplicando patch ao Kernel

Uma forma de trabalharmos na atualizao do Kernel aplicando patches de correo ao mesmo ao invs de efetuar o download de uma verso completa.
# wget https://www.kernel.org/pub/linux/kernel/v3.x/patch-3.10.bz2 # wget https://www.kernel.org/pub/linux/kernel/v3.x/patch-3.9.8.bz2

Agora temos que copiar a pasta do kernel para aplicarmos o patch.


# cp -r /usr/src/linux-3.9.8 /usr/src/linux-3.10

2012

Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux

27.31

Aplicando patch ao Kernel

Para aplicarmos o patch ao kernel utilizamos os seguintes comandos:

Primeiro descompactamos o arquivo de patch


# bunzip2 patch-3.9.8.bz2 # bunzip2 patch-3.10.bz2

J existe um patch implantado no kernel que estvamos utilizando, ento temos que remov-lo.
# cd /usr/src/linux-3.10 # patch -R -p1 < /root/patch-3.9.8

Agora basta aplicar o novo patch


# patch -p1 < /root/patch-3.10
Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux 28.31

2012

Aplicando patch ao Kernel

Para finalizar, podemos compilar o novo kernel. Vamos copiar o arquivo .config da compilao anterior para facilitar o processo.
# cp /usr/src/linux-3.9.8/.config /usr/src/linux-3.10/

2012

Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux

29.31

Gerando Pacotes do Kernel Compilado

possvel gerarmos pacotes do kernel compilado para que possamos instalar nosso trabalho em outras mquinas da rede. # cd /usr/src/linux-3.10

Debian # mkdir Documentation/lguest # echo all: >> Documentation/lguest/Makefile # fakeroot make-kpkg --initrd kernel-image kernel_headers

CentOS # make rpm

2012

Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux

30.31

Gerando Pacotes do Kernel Compilado

Agora podemos instalar os pacotes compilados em qualquer mquina da rede.

Debian # cd /usr/src # dpkg -i linux*.deb

CentOS # cd /root/rpmbuild/RPMS/i386 # rpm -Uvh kernel-* # mkinitrd /boot/initramfs-3.10.0.img 3.10.0

2012

Humberto Caetano @CST Ps-Graduao: Adm de Redes Linux

31.31

Вам также может понравиться