Linux Kernel
Iniciando no desenvolvimento do Linux Kernel
Francisco Alecrim
Tópicos
O que é o Linux? Quem criou? Quem faz?
Código Fonte do kernel Linux
Compilando/Compilando/Instalando seu kernel
Meus primeiros códigos do kernel
hello kernel world, procfs, built-in
Quero ser um kernel developer!
kernel newbies , kernel janitors, kernel mentors
Qual o tamanho do problema?
Facilitando navegação: ctags e cscope
O que é o Linux?
Quem criou?
Linus Torvalds
1991
Universidade na Finlandia
GPLv2
Quem faz?
Mais de 3000 pessoas
Mais de 250 empresas
Código Fonte do Linux
Site :
http://www.kernel.org
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
$ git branch
Santa trindade?
Configure
$ make defconfig #configure
$ make menuconfig #configure
Make
$ make
Make Install
$ ls arch/x86/boot/bzImage # este é o seu kernel
QEMU ajuda a testar seu kernel
Um pouco de QEMU antes de colocar seu kernel :
$ qemu-img create debian.raw 2G
$ sudo losetup -f
$ sudo losetup /dev/loop0 debian.raw
$ sudo mkdir -p mnt
$ sudo mount /dev/loop0 mnt
$ sudo qemu -net tap -net nic -boot d -cdrom debian-testing-i386-CD-1.iso -hda
debian.img #INSTALL
QEMU ajuda a testar seu kernel
Testando seu kernel :
KERNEL=linux-2.6/arch/x86/boot/bzImage
ROOTFS=debian.img
CDROM=debian-testing-i386-CD-1.iso
sudo qemu cdrom $CDROM hda $ROOTFS kernel $KERNEL net tap net nic
-append "root=/dev/sda1 console=ttyS0" -nographic
Meus primeiros códigos de kernel
Demonstrações e dúvidas
hello-1.c
hello-4.c
procfs1.c
Built-in procfs1.c
Quero ser um kernel developer!
Site:
http://kernelnewbies.org/
* Kernel Newbie
* Kernel Janitors
Quero meu código na árvore do Linus!
Coding style: checkpatch.pl
1 - Indentação de 8 characteres
2 - Linhas podem possuir apenas 80 colunas
3 - Localização de Chaves - Localizacao das chaves deve ser na ultima coluna do primeira linha e na primeira coluna da ultima linha
4 - Nomes de variaveis - LOCAIS devem ser curtas e simples GLOBAIS devem ser bem descritas, evitando contrações
5 - Evita typedefs - Evite utilizar typedefs para ponteiros e estruturas, tornando o código mais complicado.
6 - Funtions devem ser curtas e claras.
6.1 - Dimensões (80x24) 6.2 - Não mais do que 5-10 variáveis. 6.3 - Sem isto, você provavelmente está fazendo algo errado.
7 - Centralizar saída de funções.
Coding style: checkpatch.pl
11 - Estruturas de dados – no garbage colector
12 – Macros - Macros devem ser escritas em letras MAIUSCULAS. 13 - Printing messages - Cuidados com erros de escrita nas mensagens.
14 - Alocando memoria - O kernel possui diversas formas de alocação de memória. A forma mais recomendada de passar o tamanho memória que deve ser alocado é: p = kmalloc(sizeof(*p), …);
15 - Funções inline - Neste tópico ele desistimula a utilização de funções inline. 16 - Funções retornam valores ou nomes - 0 = sucesso -Exxx = falhou :P
17 - Não re-invente macros
Submetendo patches
1 - Criando e enviando suas mudanças git format-patch -1
2 - Descreva o suas alterações
Seja simples e objetivo, descrevendo os detalhes tecnicos. 3 - Separe as alterações
Se você deseja fazer uma correção em um driver A e depois
uma outra alterção em um driver B. Separe em 2 patches para ficar mais organizado. 4 - Verifique o estilo
Submetendo patches
6 - Copie a lista- CC a mailing list.
7 - No MIME, no links, no compression, no attachments. Just plain text.
8 - Limite de tamanho - Se o seu patch é maior que 40kb, é melhor deixar ele na web e mandar a URL. 9 - Kernel version - Mandar a versao do kernel, caso não seja a current.
10 - Não perca a coragem, re-envie. 11 - Inclua PATCH no subject. 12 - Assine seus patches.
13 - Acked-by para o revisor. 14 - O formato canonical