Post on 18-Dec-2014
description
Desenvolvimento Desenvolvimento do Kernel Linuxdo Kernel Linux
Versões 2.6.XVersões 2.6.X
http://www.tchelinux.orghttp://www.tchelinux.org
Douglas Schilling LandgrafDouglas Schilling LandgrafEmail: Email: dougsland@tchelinux.orgdougsland@tchelinux.org
OpenOffice Template by: Chih-Hao Tsai
30/09/07
● Sobre o palestranteSobre o palestrante● Sobre a palestraSobre a palestra
Kernel LinuxKernel Linux
30/09/07
Dicas Iniciais: Dicas Iniciais:
- Kernel não é algo místico :)- Kernel não é algo místico :)
- Máquina exclusiva para desenvolvimento (VM pode?)- Máquina exclusiva para desenvolvimento (VM pode?)
- Precisa saber inglês ?- Precisa saber inglês ?
- Desenvolvimento - Desenvolvimento não é igual ao “dia-dia”não é igual ao “dia-dia”
- - CrashsCrashs repentinos ? repentinos ?
- Kernel, uma coleção de rotinas ?- Kernel, uma coleção de rotinas ?
- Cliente de email- Cliente de email
Kernel Linux Kernel Linux
30/09/07
Licença:Licença: ● GPL ( versão 2 ) GPL ( versão 2 )
http://www.gnu.org/copyleft/gpl.htmlhttp://www.gnu.org/copyleft/gpl.html
Como funciona?Como funciona?● Podemos Podemos baixarbaixar o software e o software e alteraralterar, desde que publiquemos este software , desde que publiquemos este software
com ascom as licenças originais, incluindo licenças originais, incluindo a disponibilização do a disponibilização do código fontecódigo fonte..
Kernel LinuxKernel Linux
30/09/07
Como ajudar ?Como ajudar ?
- Você é - Você é desenvolvedordesenvolvedor ? ?
- Você - Você NÃONÃO tem medo de crashs ? tem medo de crashs ?
- Você sabe - Você sabe inglêsinglês ? ?
- Gosta de - Gosta de traduzirtraduzir ? ?
Kernel Linux Kernel Linux
30/09/07
Kernel Linux Kernel Linux
Onde começar ? TODO List ?Onde começar ? TODO List ?
http://www.http://www.kernelkernel.org.org
http://kernelhttp://kerneljanitorsjanitors.org.orghttp://kernelnewbies.org/KernelJanitors/http://kernelnewbies.org/KernelJanitors/TodoTodohttp://kernelnewbies.org/http://kernelnewbies.org/KernelMentorsKernelMentors
http://www.kernelhttp://www.kernelnewbiesnewbies.org.orghttp://http://br.br.kernelnewbies.org/kernelnewbies.org/
30/09/07
Definição:Definição:
● É no kernel que estão É no kernel que estão definidas funções para operação comdefinidas funções para operação com periféricosperiféricos (mouse, discos, impressoras, interface serial/interface paralela, usb etc.), (mouse, discos, impressoras, interface serial/interface paralela, usb etc.), gerenciamento de memória, entre outros. gerenciamento de memória, entre outros.
● Coleção de rotinasColeção de rotinas que oferecem, recursos para programas tradicionais. que oferecem, recursos para programas tradicionais.
Kernel LinuxKernel Linux
30/09/07
Kernel LinuxKernel Linux
Aplicativo 1Aplicativo 1 Aplicativo 2Aplicativo 2
System Call Interface (open, close, brk (malloc), etc)System Call Interface (open, close, brk (malloc), etc)
Kernel SubsystemsKernel Subsystems
Device DriversDevice Drivers
User-Space User-Space
Kernel-SpaceKernel-Space
HardwareHardware
30/09/07
Onde obter o código fonte ? Onde obter o código fonte ?
Kernel Linux Kernel Linux
httphttp://www.kernel.org://www.kernel.orgftpftp://ftp.kernel.org/pub://ftp.kernel.org/pubrsyncrsync://rsync.kernel.org/pub/://rsync.kernel.org/pub/
Alguns dados: Alguns dados:
~=~= 9.0009.000 arquivos C arquivos C ~= ~= 10.00010.000 headers headers~= ~= 800800 arquivos assembly arquivos assembly
DADOS: Professional Linux Programming 2007
30/09/07
Diretórios: Diretórios:
arch/arch/ Código específico de arquitetura (i386, mk68..)Código específico de arquitetura (i386, mk68..)
block/block/ Dispositivos de bloco (e.x: HDs)Dispositivos de bloco (e.x: HDs)
crypto/crypto/ API de criptografiaAPI de criptografia
Documentation/Documentation/ DocumentaçãoDocumentação
drivers/drivers/ Device DriversDevice Drivers
fs/fs/ File systemsFile systems
include/include/ HeadersHeaders
init/init/ Kernel bootKernel boot
ipc/ipc/ Interprocess communicationInterprocess communication
kernel/kernel/ Core do KernelCore do Kernel
Kernel Linux Kernel Linux
30/09/07
Diretórios: Diretórios:
lib/lib/ Bibliotecas Bibliotecas
mm/mm/ Gerenciamento de MemóriaGerenciamento de Memória
net/net/ Sistema de Rede Sistema de Rede
scripts/scripts/ Scripts de configuração Scripts de configuração
security/security/ Subsistema de segurança (SELinux) Subsistema de segurança (SELinux)
sound/sound/ Susbsistema de som (ALSA/OSS)Susbsistema de som (ALSA/OSS)
usr/usr/ initramfsinitramfs
Kernel LinuxKernel Linux
30/09/07
Design: Monolítico versus MicroKernelDesign: Monolítico versus MicroKernel
● Monolítico:Monolítico:● Criado em meados de 1980Criado em meados de 1980● Um grande e único processo (imenso)Um grande e único processo (imenso)● Comunicação trivial (todos rodam em um único processo)Comunicação trivial (todos rodam em um único processo)
● MicroKernel:MicroKernel:● Separado em dois processos (“servers” / user-space)Separado em dois processos (“servers” / user-space)● Comunicação via IPC (interprocess communication)Comunicação via IPC (interprocess communication)● ModularidadeModularidade
Kernel LinuxKernel Linux
30/09/07
Exemplo:Exemplo:
KernelKernel
Kernel
Softwares
Kernel
Monolítico MicroKernel
IPC
SoftwaresServers
IPC = Interprocess Communication
30/09/07
● Executa em um Executa em um único processoúnico processo● Kernel Linux é Kernel Linux é monolítico monolítico ● ImplementaImplementa recursos do microkernelrecursos do microkernel design design● Capacidade de Capacidade de carregar dinamicamente móduloscarregar dinamicamente módulos● Suporte a Suporte a processadores SMPprocessadores SMP (symmetrical multiprocessor) (symmetrical multiprocessor)● Sistema de acesso ao dispositivos (Sistema de acesso ao dispositivos (sysfssysfs))
Kernel LinuxKernel Linux
Linux Design:Linux Design:
30/09/07
Versões: Versões:
Kernel Linux Kernel Linux
Estáveis:Estáveis:● Correções de bugsCorreções de bugs● Novos driversNovos drivers
Desenvolvimento:Desenvolvimento:● Alterações frequentes e drásticasAlterações frequentes e drásticas● Desenvolvedores testam novas soluçõesDesenvolvedores testam novas soluções
30/09/07
Versões:Versões:
Kernel Linux Kernel Linux
2.6.02.6.0
Versão principal éVersão principal é 2 2
Versão secundária é Versão secundária é 66 (estável)(estável)
Release éRelease é 0 0
No passado como eram as versões ?No passado como eram as versões ?
Números pares = versões estáveis Números pares = versões estáveis Ex.: (Ex.: (2.0, 2.42.0, 2.4))
Números ímpares = versões de desenvolvimento Números ímpares = versões de desenvolvimento Ex.: ( Ex.: (1.3, 2.31.3, 2.3))
Ex.: linux-2.6.20.3.tar.bz2Ex.: linux-2.6.20.3.tar.bz2
30/09/07
Versões:Versões:
● Hoje Hoje só temossó temos a versão 2.6.X a versão 2.6.X● Decisão tomada no Linux Kernel Developers Summit ( Decisão tomada no Linux Kernel Developers Summit ( 20042004 ) )● Todas novas implementações são enviadas para o Todas novas implementações são enviadas para o Andrew Morton Andrew Morton
(Árvore -mm)(Árvore -mm)● Após Após tornar-se estável tornar-se estável o patch entra na versão principal.o patch entra na versão principal.● Versão 2.7Versão 2.7 ~= ~= Árvore Árvore -mm -mm
Kernel LinuxKernel Linux
E hoje como funciona ?E hoje como funciona ?
30/09/07
Kernel Linux Kernel Linux
CodingStyle: CodingStyle:
IdentaçãoIdentação 1 TAB = 8 caracteres (!= 8 espaços)1 TAB = 8 caracteres (!= 8 espaços)ColunasColunas 80 80
if if (teste)(teste) { {blah();blah();
} else {} else { bleh();bleh();}}
if (foo)if (foo)bar();bar();
$ linux/Documentation/CodingStyle $ linux/Documentation/CodingStyle
30/09/07
Kernel Linux Kernel Linux
CodingStyle: CodingStyle:
Funções:Funções:1, 2 páginas?1, 2 páginas?< 10 variáveis locais ?< 10 variáveis locais ?
Comentários:Comentários:/*/*
* Olá, Eu sou um comentário!* Olá, Eu sou um comentário! */ */
Outros:Outros: typedef, structs, etc. typedef, structs, etc.
30/09/07
Kernel Linux Kernel Linux
CodingStyle: CodingStyle:
Ferramenta indentFerramenta indent::
$$ indent indent -kr -i8 -ts8 -sob -180 -ss -bs -ps1 <arquivo> -kr -i8 -ts8 -sob -180 -ss -bs -ps1 <arquivo>
ou ou
$$ scripts/Lindent scripts/Lindent
30/09/07
Kernel Linux Kernel Linux
Kbuild (compilação): Kbuild (compilação):
Kbuild Kbuild é um framework para escrever Makefiles simples para tarefas é um framework para escrever Makefiles simples para tarefas complicadas. :)complicadas. :)
- Economiza nosso tempo - Economiza nosso tempo - Comportamento similar em todas as plataformas suportadas- Comportamento similar em todas as plataformas suportadas - Internamente ele se basea em complexos templates- Internamente ele se basea em complexos templates - Atualmente poucas pessoas realmente sabem como ele funciona- Atualmente poucas pessoas realmente sabem como ele funciona
30/09/07
Kernel Linux Kernel Linux
Kbuild (exemplo): Kbuild (exemplo):
Módulos externosMódulos externos
make -C <path> M=`pwd`make -C <path> M=`pwd`
Módulos (Kernel que esta em execução)Módulos (Kernel que esta em execução)
make -C /lib/modules/`uname -r`/build M=`pwd`make -C /lib/modules/`uname -r`/build M=`pwd`
30/09/07
Kernel Linux Kernel Linux
Compilando/Carregando/Listando/Descarregando: Compilando/Carregando/Listando/Descarregando:
$ linux/drivers/net>$ linux/drivers/net> vi hello.c vi hello.c $ linux/drivers/net>$ linux/drivers/net> vi Makefile vi Makefile
Atenção aos WARNINGSAtenção aos WARNINGS
$$ insmod insmod ./hello.ko ./hello.ko $ $ modprobemodprobe hello.ko (procura por dependências) hello.ko (procura por dependências)
$$ lsmod lsmod (lista os módulos carregados em memória)(lista os módulos carregados em memória)
$ $ modinfomodinfo ./hello.ko ./hello.ko$ $ modprobe -rmodprobe -r hello hello$ $ rmmodrmmod hello.ko hello.ko
30/09/07
Kernel Linux Kernel Linux
hello.chello.c
#include <linux/init.h>#include <linux/init.h>#include <linux/module.h>#include <linux/module.h>
static int __init hello_init(void)static int __init hello_init(void){{ printk(KERN_ALERT "hello!\n");printk(KERN_ALERT "hello!\n"); return 0;return 0;}}
30/09/07
Kernel Linux Kernel Linux
hello.c hello.c
static void __exit hello_exit(void)static void __exit hello_exit(void){{ printk(KERN_ALERT "Goodbye\n");printk(KERN_ALERT "Goodbye\n");}}
MODULE_LICENSE("GPL");MODULE_LICENSE("GPL");MODULE_AUTHOR("Douglas Landgaf <dougslan@tchelinux.org>");MODULE_AUTHOR("Douglas Landgaf <dougslan@tchelinux.org>");MODULE_DESCRIPTION("Um modulo hello world!");MODULE_DESCRIPTION("Um modulo hello world!");
module_init(hello_init);module_init(hello_init);module_exit(hello_exit);module_exit(hello_exit);
Onde esta o main() ? :)Onde esta o main() ? :)
30/09/07
Kernel Linux Kernel Linux
hello.c hello.c
E para adicionar parâmetros ?E para adicionar parâmetros ?
module_param(io, int, 0);module_param(io, int, 0);MODULE_PARM_DESC(io, "Informa o io do modulo! ");MODULE_PARM_DESC(io, "Informa o io do modulo! ");
$ insmod ./hello io=0x300$ insmod ./hello io=0x300
30/09/07
Kernel Linux Kernel Linux
hello.c hello.c
Exportando SímbolosExportando Símbolos
O kernel tem centenas de funções e estruturas globaisO kernel tem centenas de funções e estruturas globaisResponsável: /boot/System.map-versao-kernelResponsável: /boot/System.map-versao-kernel
/proc/kallsyms /proc/kallsyms
Module.symvers – informa os símbolos visiveisModule.symvers – informa os símbolos visiveis
shell>shell> cat /lib/modules/`uname -r`/build/Module.symvers | wc -l cat /lib/modules/`uname -r`/build/Module.symvers | wc -l
EXPORT_SYMBOL(funcao);EXPORT_SYMBOL(funcao);EXPORT_SYMBOL_GPL(funcao);EXPORT_SYMBOL_GPL(funcao);
30/09/07
Kernel Linux Kernel Linux
hello.c hello.c
Como adicionar uma entrada no /proc ? Como adicionar uma entrada no /proc ?
create_proc_read_entry()create_proc_read_entry()remove_proc_entry()remove_proc_entry()
30/09/07
Kernel Linux Kernel Linux
hello.c hello.c
Como adicionar uma entrada no /dev e /sys ? Como adicionar uma entrada no /dev e /sys ?
KERNELKERNEL =”hello” executa o resto das regras quando =”hello” executa o resto das regras quando aparecer hello /sysaparecer hello /sys
SYMLINK +=SYMLINK += (append) adicionar hello_world na lista de (append) adicionar hello_world na lista de símbolos que devem ser criadossímbolos que devem ser criados
MODE = 0444MODE = 0444 – permite (dono, group e outros lerem) – permite (dono, group e outros lerem)
30/09/07
Kernel Linux Kernel Linux
Interfaces com o KernelInterfaces com o Kernel
Externas:Externas:
- System Calls- System Calls - Interface entre (userspace) e o Kernel- Interface entre (userspace) e o Kernel - Solicitações de acesso via system calls- Solicitações de acesso via system calls - /proc e /sys- /proc e /sys
Internas:Internas:
- Símbolos exportados pelos módulos (EXPORT_SYMBOL)- Símbolos exportados pelos módulos (EXPORT_SYMBOL) - Ex.: printk – chamadas pública - Ex.: printk – chamadas pública
30/09/07
Kernel Linux Kernel Linux
System Calls (trace)System Calls (trace)
- Faz o trace das chamadas de sistemas (system calls)- Faz o trace das chamadas de sistemas (system calls)- ptrace() - ptrace()
$ $ strace lsstrace ls$$ strace -o saida.txt kradio strace -o saida.txt kradio
((programaprograma) -> () -> (openopen) GLIBC /lib/libc.so.6 -> () GLIBC /lib/libc.so.6 -> (sys_opensys_open))
30/09/07
Kernel Linux Kernel Linux
Sistema de log - TimestampsSistema de log - Timestamps
Kernel hackingKernel hacking [*] Show timing information on printks[*] Show timing information on printks
Magic SysRq Keys
Tecla SysRq pode atribuir funções durante a execução ou Tecla SysRq pode atribuir funções durante a execução ou travamento.travamento.
1.1. Alt + SysRq Alt + SysRq + + RR – takes the keyboard out of raw mode. – takes the keyboard out of raw mode. 2. 2. Alt + SysRqAlt + SysRq + + E E – terminates all processes (except init). – terminates all processes (except init). 3. 3. Alt + SysRqAlt + SysRq + + II – kills all processes (except init). – kills all processes (except init). 4. 4. Alt + SysRqAlt + SysRq + + SS – synchronizes the disk. – synchronizes the disk. 5. 5. Alt + SysRqAlt + SysRq + + UU – remounts all filesystems read-only. – remounts all filesystems read-only. 6. 6. Alt + SysRqAlt + SysRq + + BB – reboots the machine. – reboots the machine.
30/09/07
Kernel Linux Kernel Linux
Sistema de log - printk(): Sistema de log - printk():
Sistema de log via /proc/kmsgSistema de log via /proc/kmsgKlog -> /proc/kmsg -> syslogdKlog -> /proc/kmsg -> syslogd
printk() ~= printf()printk() ~= printf()
30/09/07
Kernel Linux Kernel Linux
Sistema de log - printk(): Sistema de log - printk():
printk(KERN_WARNING “mensagem de warning!\n”);printk(KERN_WARNING “mensagem de warning!\n”);printk(KERN_DEBUG “mensagem de debug!\n”);printk(KERN_DEBUG “mensagem de debug!\n”);printk(<1> “mensagem de alerta!!\n”);printk(<1> “mensagem de alerta!!\n”); <linux/kernel.h> valores das MACROS {0,1,2,3, ... 7}<linux/kernel.h> valores das MACROS {0,1,2,3, ... 7}
Prioridade: 0 -> 7Prioridade: 0 -> 7
30/09/07
Kernel Linux Kernel Linux
Ferramentas: Ferramentas:
diff diff Ferramenta para comparar arquivos Ferramenta para comparar arquivospatchpatch Ferramenta para aplicar patchs Ferramenta para aplicar patchs quiltquilt Scripts para manutenção de patchs Scripts para manutenção de patchs vimdiffvimdiff Feramenta para comparar arquivosFeramenta para comparar arquivosqemuqemu EmuladorEmuladorgitgit Controle de fontes/versõesControle de fontes/versõeshghg MercurialMercurialctagsctags Tags no código fonteTags no código fontecscopecscope Navega no código fonteNavega no código fonteketchupketchup Ferramenta para atualização do kernelFerramenta para atualização do kernel
30/09/07
Kernel Linux Kernel Linux
git / gitk: git / gitk: Autor:Autor: Linus Torvalds. Linus Torvalds.Mantenedor:Mantenedor: Junio Hamano Junio Hamano
Clonando árvore do Linus:Clonando árvore do Linus:$ git clone $ git clone
Manter árvore atualizada:Manter árvore atualizada:$ git pull$ git pull
Fazer um Commit:Fazer um Commit:$ git commit$ git commit
Log: Log: $ git log$ git log $ git init-db / $git add . / git commit / git remove / git diff$ git init-db / $git add . / git commit / git remove / git diff $ git branch teste / $git checkout teste $ git branch teste / $git checkout teste
30/09/07
Kernel Linux Kernel Linux
Ctags: Ctags:
$ $ make tagsmake tags
$ vi $ vi .vimrc.vimrcset tags=/usr/src/linux/tagsset tags=/usr/src/linux/tags
:ta:ta printk printk$ vim -t printk$ vim -t printkCTRL + ]CTRL + ]CTRL + tCTRL + t
http://ctags.sourceforge.net.http://ctags.sourceforge.net.
30/09/07
Kernel Linux Kernel Linux
Ferramentas Diff e Patch: Ferramentas Diff e Patch:
$$ diff -ruN linux-x.y.z/ linux/ > meu-patch.diff diff -ruN linux-x.y.z/ linux/ > meu-patch.diff
-r -r RecursivoRecursivo-u-u Formato compreensivoFormato compreensivo-N-N Incluir arquivos novosIncluir arquivos novos
$$ patch -p1 < ../meu-patch.diff patch -p1 < ../meu-patch.diff (diretório abaixo) (diretório abaixo)
-p1-p1 Indica qual ponto da árvore ele vai aplicar o patchIndica qual ponto da árvore ele vai aplicar o patchlinux/drivers/net/arquivo.clinux/drivers/net/arquivo.c
30/09/07
Kernel Linux Kernel Linux
Ferramentas Diff e Patch (exemplo): Ferramentas Diff e Patch (exemplo):
--- linux-2.6.20.3.orig/--- linux-2.6.20.3.orig/drivers/net/ni65.cdrivers/net/ni65.c+++ linux-2.6.20.3/+++ linux-2.6.20.3/drivers/net/ni65.cdrivers/net/ni65.c@@ -295,7 +295,7 @@ static void ni65_set_performance(struct@@ -295,7 +295,7 @@ static void ni65_set_performance(struct */*/ static int ni65_open(struct net_device *dev)static int ni65_open(struct net_device *dev) {{- struct priv *p = (struct priv *) dev->priv;- struct priv *p = (struct priv *) dev->priv;+ struct priv *p = dev->priv;+ struct priv *p = dev->priv;
30/09/07
Kernel Linux Kernel Linux
Ferramenta Quilt: Ferramenta Quilt:
$ $ mkdir patchesmkdir patches$ $ quilt quilt newnew nome-do-patch.diff nome-do-patch.diff$ $ quilt quilt addadd nome_do_arquivo nome_do_arquivo$ $ quilt quilt refreshrefresh$ $ quilt quilt toptop$ $ quilt quilt diffdiff$ $ quilt quilt pop [-f] [-a]pop [-f] [-a]$ $ quilt quilt push [-f] [-a]push [-f] [-a]$ $ quilt quilt removeremove
http://savannah.nongnu.org/projects/quilt/
30/09/07
Kernel Linux Kernel Linux
Assinaturas em patches: Assinaturas em patches:
Signed-off-by:Signed-off-by: Douglas Landgraf <dougsland@gmail.com> Douglas Landgraf <dougsland@gmail.com>
Reviewed-by:Reviewed-by: Análise / Teste Análise / Teste
Acked-by:Acked-by: OK, sem problemas OK, sem problemas
Signed-off-by:Signed-off-by: Assinatura Assinatura
Reviewed-by:Reviewed-by: Douglas Landgraf <dougsland@gmail.com> Douglas Landgraf <dougsland@gmail.com>
Acked-by:Acked-by: Douglas Landgraf <dougsland@gmail.com> Douglas Landgraf <dougsland@gmail.com>
30/09/07
Kernel Linux Kernel Linux
Enviando um patch: Enviando um patch:
Você testouVocê testou ? ?
Escolheu a Escolheu a lista certalista certa? ?
Assunto:Assunto: [PATCH] arquivo.c O que ele faz [PATCH] arquivo.c O que ele faz
Mensagem: Mensagem: O que o patch faz com detalhes O que o patch faz com detalhes
O patch esta conforme o O patch esta conforme o CodingStyleCodingStyle??
Assinatura:Assinatura: Signed-off-by: Autor <email> Signed-off-by: Autor <email>
Mensagem em Mensagem em TEXTO PUROTEXTO PURO ( SEM HTML )( SEM HTML )
SEM anexosSEM anexos, patchs , patchs INLINEINLINE
No No máximo um patch por emailmáximo um patch por email ( Depende de outro patch?) ( Depende de outro patch?)
30/09/07
Kernel Linux Kernel Linux
Enviando um patch (exemplo): Enviando um patch (exemplo):
To:To: kerneljanitors@.... kerneljanitors@....
Subject:Subject: [PATCH] ni65.c: cleanup not needed casts [PATCH] ni65.c: cleanup not needed casts
Mensagem: Mensagem: Removed all unnecessary casts.Removed all unnecessary casts.Signed-off-by:Signed-off-by: Douglas Schilling Landgraf <dougsland@gmail.com> Douglas Schilling Landgraf <dougsland@gmail.com>--- linux-2.6.20.3.orig/drivers/net/ni65.c--- linux-2.6.20.3.orig/drivers/net/ni65.c+++ linux-2.6.20.3/drivers/net/ni65.c+++ linux-2.6.20.3/drivers/net/ni65.c@@ -295,7 +295,7 @@ static void ni65_set_performance(struct@@ -295,7 +295,7 @@ static void ni65_set_performance(struct */*/ static int ni65_open(struct net_device *dev)static int ni65_open(struct net_device *dev)
30/09/07
Instalando o código fonte: Instalando o código fonte:
Diretório padrão:Diretório padrão:
/usr/src/linux/usr/src/linux (Devemos usar esse path ?) (Devemos usar esse path ?)
Descompactando:Descompactando:$$ tar xvjf linux-x-y-z.tar.bz2tar xvjf linux-x-y-z.tar.bz2
linux-x.y.z/Documentation/device-mapper/linear.txtlinux-x.y.z/Documentation/device-mapper/linear.txt linux-x.y.z/Documentation/device-mapper/snapshot.txtlinux-x.y.z/Documentation/device-mapper/snapshot.txt
.config - O que é ? .config - O que é ? $ /proc/config.gz$ /proc/config.gz $ /boot/config-2-6-x-y-z$ /boot/config-2-6-x-y-z
Kernel Linux Kernel Linux
30/09/07
Compilando: Compilando:
$$ make help make help ajudaajuda
$$ make mrproper make mrproper Remover todos os arquivos + .config + backup Remover todos os arquivos + .config + backup
$$ make config make config modo texto modo texto
$$ make menuconfig make menuconfig modo texto (ncurses) modo texto (ncurses)
$ $ make xconfigmake xconfig modo gráfico (Xwindows)modo gráfico (Xwindows)
$ $ make gconfigmake gconfig modo gráfico (GTK+)modo gráfico (GTK+)
Kernel LinuxKernel Linux
30/09/07
Compilando (opções): Compilando (opções):
[ * ][ * ] - Habilitado (built-in) - Habilitado (built-in) [ ] - Não[ ] - Não esta habilitado esta habilitado
[ M ][ M ] - Habilitado (Módulo) - Habilitado (Módulo)
$ $ makemake Compilando o Kernel Compilando o Kernel
$ $ make modules_installmake modules_install Instalando os módulos Instalando os módulos
ou ou
$$ make modules_install make modules_install INSTALL_MOD_PATH=/tmpINSTALL_MOD_PATH=/tmp
$$ depmod -a 2.6.x.y depmod -a 2.6.x.y Disponibilizar módulos Disponibilizar módulos
para modprobepara modprobe
Kernel LinuxKernel Linux
30/09/07
Compilando (Cross-Compilation): Compilando (Cross-Compilation):
Exemplo 1:Exemplo 1:
$>$> export export CROSS_COMPILECROSS_COMPILE=”powerpc-cross-compile-aqui”=”powerpc-cross-compile-aqui”
$>$> ARCHARCH=powerpc make menuconfig=powerpc make menuconfig
$> ARCH$> ARCH=powerpc make=powerpc make
Exemplo 2:Exemplo 2:
$> $> make make ARCHARCH=x86_64 defconfig=x86_64 defconfig
$>$> make make ARCHARCH=arm =arm CROSS_COMPILECROSS_COMPILE=/usr/local/bin/arm-linux-=/usr/local/bin/arm-linux-
Kernel LinuxKernel Linux
30/09/07
Compilando: Compilando:
# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.6.X# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.6.X
vmlinuz = Kernel Linux Compactadovmlinuz = Kernel Linux Compactado
# cp /usr/src/linux/.config /boot/config-2.6.X# cp /usr/src/linux/.config /boot/config-2.6.X
Copiar o .config para /boot (backup)Copiar o .config para /boot (backup)
Kernel LinuxKernel Linux
30/09/07
Compilando: Compilando:
# cp /usr/src/linux/System.map /boot/System.map-2.6.X# cp /usr/src/linux/System.map /boot/System.map-2.6.X
System.map contém:System.map contém:
* Tabela de símbolos exportados (usados na depuração)* Tabela de símbolos exportados (usados na depuração)
* A ferramenta* A ferramenta top top utiliza essa tabela utiliza essa tabela
Kernel LinuxKernel Linux
30/09/07
Compilando: Compilando:
Será necessário criar uma imagem inicial para que o kernel carregue Será necessário criar uma imagem inicial para que o kernel carregue alguns módulos básicos (IDE, SCSI, RAID) antes de acessar o alguns módulos básicos (IDE, SCSI, RAID) antes de acessar o filesystem.filesystem.
## mkinitrd -k /boot/vmlinuz-2.6.X -i /boot/initrd-2.6.Xmkinitrd -k /boot/vmlinuz-2.6.X -i /boot/initrd-2.6.X
ouou# # mkinitrd /boot/initrd-2.6.X.img 2.6.Xmkinitrd /boot/initrd-2.6.X.img 2.6.X
Kernel LinuxKernel Linux
30/09/07
$$ vi /boot/grub/menu.list vi /boot/grub/menu.list
title Kernel-2.6.X-defaulttitle Kernel-2.6.X-default root (hd0,5)root (hd0,5)
kernel /boot/vmlinuz-2.6.X-default root=/dev/hda6 kernel /boot/vmlinuz-2.6.X-default root=/dev/hda6 vga=0x314 resume=/dev/hda5 splash=silent showoptsvga=0x314 resume=/dev/hda5 splash=silent showopts
initrd /boot/initrd-2.6.X-defaultinitrd /boot/initrd-2.6.X-default
Kernel Linux Kernel Linux
Compilando (Grub boot loader): Compilando (Grub boot loader):
30/09/07
$$ vi /etc/lilo/lilo.confvi /etc/lilo/lilo.conf
image=/boot/vmlinuz-2.6.X-defaultimage=/boot/vmlinuz-2.6.X-default
label=2.6.Xlabel=2.6.Xroot=/dev/hda3root=/dev/hda3read-onlyread-only
$$ /sbin/lilo/sbin/lilo Grava as configuraçõesGrava as configurações$ $ rebootreboot Reiniciando o sistemaReiniciando o sistema$ $ uname -auname -a Exibe o kernel atualExibe o kernel atual
Kernel Linux Kernel Linux
Compilando (LILO boot loader): Compilando (LILO boot loader):
30/09/07
Kernel Linux Kernel Linux
Documentação: Documentação:
linux-2.6.X/Documentationlinux-2.6.X/Documentation
Linux Kernel Development 2Linux Kernel Development 2rd rd Edition Edition (Robert Love) (Robert Love) ISBN: 0-672327201ISBN: 0-672327201
Linux Device Drivers 3Linux Device Drivers 3rdrd Edition Edition (Cobert, Rubini, Kroah-Hartman) (Cobert, Rubini, Kroah-Hartman)ISBN: 0-596-00590-3ISBN: 0-596-00590-3Versão Online (free)Versão Online (free): : http://kroah.com/lkn/http://kroah.com/lkn/Linux Weekly NewsLinux Weekly Newshttp://www.lwn.nethttp://www.lwn.net
GoogleGooglehttp://www.google.comhttp://www.google.com
30/09/07
Dúvidas ?Dúvidas ?Sugestões?Sugestões?
http://tchelinux.orghttp://tchelinux.orghttp://dougsland.livejournal.comhttp://dougsland.livejournal.com
Douglas Schilling LandgrafDouglas Schilling LandgrafEmail: Email: dougsland@tchelinux.orgdougsland@tchelinux.org