Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf
-
Upload
tchelinux-slides -
Category
Technology
-
view
1.826 -
download
2
description
Transcript of Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf
![Page 1: Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/1.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/2.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/3.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/4.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/5.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/6.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/7.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/8.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/9.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/10.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/11.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/12.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/13.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/14.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/15.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/16.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/17.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/18.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/19.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/20.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/21.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/22.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/23.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/24.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/25.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/26.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/27.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/28.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/29.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/30.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/31.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/32.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/33.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/34.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/35.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/36.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/37.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/38.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/39.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/40.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/41.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/42.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/43.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/44.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/45.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/46.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/47.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/48.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/49.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/50.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/51.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/52.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/53.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022020723/549658f7ac7959092e8b509a/html5/thumbnails/54.jpg)
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