54
Desenvolvimento Desenvolvimento do Kernel Linux do Kernel Linux Versões 2.6.X Versões 2.6.X http://www.tchelinux.org http://www.tchelinux.org Douglas Schilling Landgraf Douglas Schilling Landgraf Email: Email: [email protected] [email protected] OpenOffice Template by: Chih-Hao Tsai

Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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: [email protected]@tchelinux.org

OpenOffice Template by: Chih-Hao Tsai

Page 2: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

30/09/07

● Sobre o palestranteSobre o palestrante● Sobre a palestraSobre a palestra

Kernel LinuxKernel Linux

Page 3: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 4: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 5: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 6: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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/

Page 7: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 8: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 9: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 10: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 11: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 12: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 13: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

30/09/07

Exemplo:Exemplo:

KernelKernel

Kernel

Softwares

Kernel

Monolítico MicroKernel

IPC

SoftwaresServers

IPC = Interprocess Communication

Page 14: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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:

Page 15: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 16: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 17: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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 ?

Page 18: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 19: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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.

Page 20: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 21: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 22: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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`

Page 23: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 24: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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;}}

Page 25: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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 <[email protected]>");MODULE_AUTHOR("Douglas Landgaf <[email protected]>");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() ? :)

Page 26: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 27: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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);

Page 28: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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()

Page 29: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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)

Page 30: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 31: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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))

Page 32: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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.

Page 33: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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()

Page 34: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 35: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 36: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 37: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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.

Page 38: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 39: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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;

Page 40: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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/

Page 41: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

30/09/07

Kernel Linux Kernel Linux

Assinaturas em patches: Assinaturas em patches:

Signed-off-by:Signed-off-by: Douglas Landgraf <[email protected]> Douglas Landgraf <[email protected]>

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 <[email protected]> Douglas Landgraf <[email protected]>

Acked-by:Acked-by: Douglas Landgraf <[email protected]> Douglas Landgraf <[email protected]>

Page 42: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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?)

Page 43: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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 <[email protected]> Douglas Schilling Landgraf <[email protected]>--- 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)

Page 44: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 45: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 46: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 47: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 48: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 49: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 50: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 51: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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):

Page 52: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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):

Page 53: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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

Page 54: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

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: [email protected]@tchelinux.org