+ All Categories
Home > Documents > Kernel Código Fontesiep.ifpe.edu.br/anderson/arquivos/so_kernel_source_aula... · 2016-02-23 · 2...

Kernel Código Fontesiep.ifpe.edu.br/anderson/arquivos/so_kernel_source_aula... · 2016-02-23 · 2...

Date post: 21-Dec-2018
Category:
Upload: haphuc
View: 213 times
Download: 0 times
Share this document with a friend
26
1 Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm Sistemas Operacionais II Kernel Código Fonte Anderson L. S. Moreira [email protected] © Copyright 2004-2009, Free Electrons. Creative Commons BY-SA 3.0 license Latest update: 30 de Mar de 2010, http://dase.ifpe.edu.br/~alsm Adaptation by: Anderson L. S. Moreira [email protected]
Transcript

1Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Sistemas Operacionais II

KernelCódigo Fonte

Anderson L. S. [email protected]

© Copyright 2004-2009, Free Electrons.Creative Commons BY-SA 3.0 licenseLatest update: 30 de Mar de 2010, http://dase.ifpe.edu.br/~alsmAdaptation by: Anderson L. S. Moreira [email protected]

2Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Desenvolvimento de Drivers para Linux

Código do Linux e drivers de dispositivos

3Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Versão do Kernel

As APIs cobertas nos slidessão compatíveis com os fontes do Linux 2.6.33.Outros recursos são de patchs aplicados ao Linux.

4Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Linguagem de Programação

Implementado em C igual a todo sistema UNIX.(C foi criado para implementar o primeiro sistema UNIX)Também se usa um pouco de Assembly:

Exceções da inicialização da CPU e máquinaBibliotecas de rotinas críticas.

Não usa C++, veja em http://www.tux.org/lkml/#s15-3Todo o código compilado com gcc, o GNU C Compiler

Muitas extensões do gcc-specific foram usadas no fonte do kernel, qualquer compilador padrão ANSI C não irá compilar o kernel;Uns poucos compiladores alternativos funcionam (Intel e Marvell)Veja http://gcc.gnu.org/onlinedocs/gcc-4.3.3/gcc/C-Extensions.html

5Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Sem Biblioteca de C

O kernel tem de ser do tipo standalone e não pode usar o espaço de usuário.Espaço de usuário é implementado no topo dos serviços do kernel, não o oposto.O fonte do kernel tem de suportar suas próprias implementações de bibliotecas(string utilities, criptografia, descompressão...)Não se pode usar as bibliotecas padrões do C no fonte do kernel.(printf(), memset(), malloc()...).Tem de usar os cabeçalhos de C do kernel.

O kernel tem funções similares de C, como printk(), memset(), kmalloc() ...

6Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Portabilidade

O fonte do kernel do Linux foi projetado para ser portável;

Todo fonte fora do diretório arch/ deverá ser portável;

O kernel provê macros e funções para abstrair detalhes específicos da arquitetura

Endianness(cpu_to_be32, cpu_to_le32, be32_to_cpu, le32_to_cpu)Acesso a memória de E/SSe necessário, barreiras de memória para garantir ordenamento;DMA API para nivelar e invalidar caches.

7Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Não computa FPU

Nunca use números FPU no fonte do kernel. Seu código poderá rodar em um processador sem uma unidade de co-processador (como o arm).Algumas configurações opcionais para uso de FPU

Podem ser emulados em operações de ponto flutuante em aplicações de espaço de usuário, gatilhos e exceções no kernelÉ recomendável por motivos de performance.

8Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

API interna do Linux instável (1)

A API interna do kernel para implementar o fonte do kernel pode passar por mudanças entre duas versões da 2.6.x. Um dispositivo standalone compilado para uma determinada versão pode não compilar ou funcionar em uma nova versão.Veja Documentation/stable_api_nonsense.txtpara saber porque.

A API externa deverá não mudar (system calls, /proc, /sys), como também pode quebrar determinados programas. Novos recursos podem ser adicionados, mas os desenvolvedores do kernel uma compatibilidade com versões antigas, por um ou mais anos.

Sempre que um desenvolvedor muda uma API interna, Este deve atualizar todo o código do kernel que usa essa determinada função.

Funciona perfeitamente para o código na árvore do kernel.Referencia da API: http://lwn.net/Articles/2.6-kernel-api/

Recursos removidos: Documentation/feature-removal-schedule.txt

9Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

API interna do Linux instável (2)

Exemplo USB

Linux tem atualizado a API interna para USB pelo menos 3x (ajustes, segurança, suporte a dispositivos de alta velocidade) e atualmente tem o barramento USB mais veloz (comparado a outros sistemas)

Windows XP também teve de reescrever os códigos do USB 3 vezes. Mas por causa do fonte-fechado, binários de dispositivos não puderam ser atualizados, tiveram de manter um retrocompatibilidade com versões antigas. Isso é muito custoso (desenvolvimento, segurança, estabilidade, performance).

Veja “Myths, Lies, and Truths about the Linux Kernel”, de Greg K.H., para detalhes sobre o prcesso de desenvolvimento do kernel: http://kroah.com/log/linux/ols_2006_keynote.html

10Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Restrições da memória do Kernel

Quem pode cuidar do kernel?

Sem proteção de memóriaAcessando locais de memória ilegal no kernel (sempre fatal).

Tamanho de pilha fixo (8 or 4 KB)Ao contrário no espaço de usuário não tem como aumentar.

Memória do kernel não pode executar swap out (por mesmas razões).

Processode usuário

KernelLocalilegal

memória

Tentativade acessar

Exception(MMU)

SIGSEGV, kill

Gerenciador do espaço de usuárioUsado para implementar:- proteção de memória- crescimento da pilha- troca de memória com disco (swap out)- demanda de paginação

11Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Drivers de Dispositivos no Espaço de usuário (1)

É possível implementar drivers de dispositivos no espaço de usuário!Tais drivers apenas precisam acessar os dispositivos através de mínimos e genéricos kernel drivers.Exemplos

Drivers para impressoras e scanner(Porta paralela / USB drivers)X drivers: drivers do kernel de baixo nível + espaço de usuário X drivers.Drivers de espaço de usuário baseados em UIO,framework introduzido em 2.6.23

12Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Drivers de Dispositivos no Espaço de usuário (1)

VantagensNão precisa de grandes habilidades com o fonte do kernel. Fácil de executar reuso entre dispositivos.Drivers podem ser escritos em qualquer linguagem, até Perl!Drivers podem ser mantidos proprietários.Código de driver podem ser mortos e debugados. Não interrompe o kernel.Podem executar troca com disco (swap out) (código do kernel não pode).Pode usar computação FPU.Menos complexidade que o kernel.

InconvenientesMenos simplicidade para acessar interrupções.Aumenta a latência do que no modo kernel.

Veja http://www.celinux.org/elc08_presentations/uio080417celfelc08.pdf.

13Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Linux Kernel

Linux sources

14Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Localização dos fontes do Kernel

A versão oficial dos fontes, como o lançado por Linus Torvalds está disponível em http://www.kernel.org

Essa versão segue a o modelo de desenvolvimento do kernelContudo, pode não conter a versão de desenvolvimento mais recente de uma determinada área.

Muitas sub-comunidades do kernel contém as versões mais estáveis

Comunidade de arquitetura (ARM, MIPS, PowerPC, etc.), Comunidade de drivers de dispositivos (I2C, SPI, USB, PCI, network, etc.), outras comunidades (real-time, etc.)Geralmente não lançam versões oficiais, apenas árvores de desenvolvimento são disponíveis

15Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Estrutura dos fontes do Linux (1)

arch/<arch> Código de arquitetura específicaarch/<arch>/<mach> Código específico de Máquina / Placablock/ Núcleo da camada de blocoCOPYING Condições de copia (GNU GPL)CREDITS Principais contribuidorescrypto/ Bibliotecas de criptografiaDocumentation/ Documentação. Não perca isso!drivers/ Todos os drivers exceto de som (usb, pci...)fs/ Filesystems (fs/ext3/, etc.)include/ Cabeçalhos do kernelinclude/asm-<arch> Cabeçalhos de arquitetura e máquinainclude/linux Cabeçalhos do núcleo do kernelinit/ Inicialização do Linux (incluindo main.c)

16Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Estrutura dos fontes do Linux (2)

ipc/ Comunicação de ProcessosKbuild Parte do sistema de construção do kernelkernel/ Linux kernel core (pequeno!)lib/ Bibliotecas de rotina (zlib, crc32...)MAINTAINERS Mantedores de cada parte do kernel. Útil!Makefile Top Linux makefile (setado para arquitetura)mm/ Memory management code (pequeno!)net/ Código de suporte de rede (não drivers)README Instruções de montagemREPORTING-BUGS Instruções para reportar bugssamples/ Código exemplo (markers, kprobes, kobjects)scripts/ Scripts para uso interno ou externosecurity/ Implementações de segurança (SELinux...)sound/ Códigos e Drivers de somusr/ Código para gerar um arquivo initramfs cpio.

17Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Acessando o desenvolvimento do código (1)

Útil se está envolvido com o desenvolvimento do códigoou se encontrou um bug no código.

Fontes de desenvolvimento do Kernel são gerenciados com git:http://kernel.org/pub/software/scm/git/

Navegar na árvore de Linus' git (if you just need to check a few files):http://www.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=tree

Pode usar diretamente git no desktop

Debian / Ubuntu: instalar pacote git-core

18Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Acessando o desenvolvimento do código (2)

Escolha uma árvore de desenvolvimento git em http://git.kernel.org/Clone essa árvore.Exemplo (Linus,usa uma versão estável Linux):git-clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

Atualize a árvore (Linus exemplo):cd linux-2.6git pull

Veja outros materiais de git:http://free-electrons.com/docs/git/

19Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Linux device drivers

Ferramentas de gerenciamento

20Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Cscope

Permite procurar código por:- todas referencias a um símbolo- definições globais- funções chamada por uma função- funções chamando uma função- text string- expressões regulares- um arquivo- arquivos incluindo um arquivo

http://cscope.sourceforge.net/

Ferramenta para navegar em código fonte(principalmente C, mas outras C++ ou Java)

Suporta grandes projeto como kernel do LinuxMenos de 1 min. Para indexar o Linux 2.6.17 (rápido!)

Pode usar editores como o vim e emacs.

Nos fontes do kernel do linux, execute com: cscope -Rk (man cscope para ajuda)

21Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Cscope screenshot

22Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

LXR: Linux Cross Reference

http://sourceforge.net/projects/lxr

Ferramenta para indexar fontes e navegar em código

Web server baseMuito fácil e rápido de usar

Procura por identificador ou um texto

Fácil de encontrar declaração, implementação ou uso de símbolos

Suporta C e C++

Suporta projetos como o Linux kernel(264 M na versão 2.6.26).

Leva um tempo e paciência para configurar (configuration, indexing, server configuration).

Indexando uma nova versão é rápido:~ 20 minutos com LXR 0.3.1.

Servidor pronto http://lxr.free-electrons.com Outros podem ser encontrados em:http://free-electrons.com/community/kernel/lxr/

23Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

LXR screenshot

24Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Practical lab – Kernel sources

Familiaridade com os fontesUso de uma ferramenta de configuração

25Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

Bibliografia

Sistemas operacionais, Romulo Oliveira, 2009;Arquitetura de Sistemas Operacionais, Francis Machado, 2008;Embedded Linux Experts – http://free-electrons.com

26Anderson Moreira. [email protected], Sistemas Operacionais II. http//dase.ifpe.edu.br/~alsm

No próximo episódio de SO II !!!

Explicação sobre o projeto;Divisão de tarefas;Início prático dos trabalhos.


Recommended