Академический Документы
Профессиональный Документы
Культура Документы
Montando o ambiente
Criando m odulos
Estruturas de Dados
30 de Janeiro de 2013
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Sobre o palestrante
Titula c ao: Graduado em Ci encia da Computa c ao pela UFAL Mestre em Ci encia da Computa c ao pela UFCG Doutorando em Engenharia El etrica pela UFCG Email: ivo.calado@ee.ufcg.edu.br ivo.augusto@ifalpalmeira.edu.br ou Site: https://sites.google.com/a/ee.ufcg.edu.br/ivocalado/
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Contato com Linux desde 2004 Utiliza o Linux como principal SO desde 2006 Contribui com o Kernel Linux a partir do desenvolvimento de algoritmos de controle de congestionamento no protocolo DCCP
CCID-4 e CCID-5
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Qual a experi encia com sistemas operacionais? ... E com o Linux? Apenas usu ario dom estico ou um pouco mais? Quem j a fu cou e/ou compilou o kernel? Qual o conhecimento sobre a linguagem de programa c ao C, Redes de computadores, Estruturas de Dados e Sistemas Operacionais
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Objetivo do curso
Mostrar o que e e como o Kernel Linux est a organizado Apresentar uma vis ao geral sobre a programa c ao para o Kernel Linux
Quais as etapas necess arias para para implementa c ao de m odulos? Que ferramentas auxiliam no processo de cria c ao e submiss ao de patches?
Muita m ao na massa! :)
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Agenda I
1
Introdu c ao O que e um sistema operacional? Linux Caracter sticas do Kernel Linux Diferen cas entre desenvolvimento para Kernel e User space Montando o ambiente Obtendo e Compilando o Kernel Linux A Ferramenta de Ger encia de C odigo Git Criando e aplicando patches com o Git Criando m odulos O m odulo Hello World Um pouco mais sobre m odulos
Ivo Calado IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Agenda II
4
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Linux
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Linux
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Linux
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Linux
Versionamento
Durante muito tempo foi utilizado a nota c ao baseada em 3 n umeros + 1 adicional
Segundo um dos mantenedores do Linux, Willy Tarreau, a nota c ao parece muito mais um endere co IP que um n umero de vers ao
13 / 89 Programa c ao para o Kernel Linux (Parte 1) Ivo Calado IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Linux
Versionamento
Em vista da situa c ao apresentada, e tamb em para comemorar os 20 anos do Linux, Linus Torvalds decidiu alterar a forma como as vers oes denidas
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Micro Kernels
Possui como mais conhecido defensor Andrew Tanenbaum Implementado como v arios processos Diferentes bin arios e espa cos de endere camento. Comunica c ao via IPC (lento) Faz uso extensivo do conceito de servidores, onde apenas poucos servi cos devem rodar em modo privilegiado Desvantagens: teoricamente robusto por em complexo de se desenvolver Exemplos: Minix e Symbian
16 / 89 Programa c ao para o Kernel Linux (Parte 1) Ivo Calado IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Unico espa co de endere camento Unico processo executante Mais f acil de implementar, comunica c ao r apida e facilidade de utiliza c ao (fun c oes s ao globais) Desvantagem: Mais suscet vel a crashes Exemplos: BSD, Windows, Linux*
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
O Linux e considerado um Kernel monol tico. Por em ele implementa diversas ideias do mundo Micro Kernel: Projeto modular Ser preempt vel Possibilita o carregamento de m odulos bin arios dinamicamente Ou seja, o projeto do Linux e baseado no melhor dos dois mundos
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Muitas pessoas tem uma vis ao que o desenvolvimento para Kernel Linux e bastante dif cil Todavia, grande parte dessa diculdade reside no fato das diferen cas existentes no modo de programa c ao entre Kernel space e User space Algumas diferen cas s ao obvias (o kernel pode fazer qualquer coisa! :))...
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Muitas pessoas tem uma vis ao que o desenvolvimento para Kernel Linux e bastante dif cil Todavia, grande parte dessa diculdade reside no fato das diferen cas existentes no modo de programa c ao entre Kernel space e User space Algumas diferen cas s ao obvias (o kernel pode fazer qualquer coisa! :))... outras nem t ao obvias Vamos ver algumas das principais diferen cas...
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Quais as consequencias? Fun c oes como printf e scanf, malloc, calloc n ao est ao dispon veis
20 / 89 Programa c ao para o Kernel Linux (Parte 1) Ivo Calado IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Existem basicamente duas formas de se obter o Kernel Linux: Baixando um tarball da u ltima vers ao do kernel dispon vel em kernel.org ou via pacotes de distribui c oes Baixando uma vers ao de desenvolvimento via git
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ap os a instala c ao, deve ser descompactado e criado um link ligando o diret orio do kernel para /usr/src/linux
t a r x v f l i n u x s o u r c e 2 . 6 . 3 8 . t a r . bz2 l n s l i n u x s o u r c e 2 . 6 . 3 8 / u s r / s r c / l i n u x
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
A pr oxima etapa e a c opia do arquivo de congura c ao para o diret orio base do kernel
% cp / b o o t / c o n f i g uname r / u s r / s r c / l i n u x / . c o n f i g
Por m, deve-se entrar no diret orio do c odigo do kernel e executar o menu para visualiza c ao das op c oes
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Menu de congura c ao
Vamos fu car um pouco... :)
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Compila c ao :)
Limpar diret orio antes da compila c ao
makekpkg c l e a n
Compilando
f a k e r o o t makekpkg i n i t r d append to v e r s i o n= custom k e r n e l i m a g e k e r n e l h e a d e r s
Caso fosse realizada a compila c ao gen erica s o seria necess ario a execu c ao do comando make
29 / 89 Programa c ao para o Kernel Linux (Parte 1) Ivo Calado IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Instalando
Por m, basta instalar os arquivos *.deb que foram armazenados na pasta /usr/src
dpkg i . deb
Esse comando realiza as seguintes tarefas Instalar a imagem Instalar os headers do kernel Congurar o grub para dual-boot
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Composta por 5 blocos Includes Documenta c ao Scripts Exemplos (samples ) Implementa c oes (net, arch, init, block, crypt etc)
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ap os a inicializa c ao do reposit orio precisamos apenas adicionar os arquivos via o comando git add
g i t add f i l e 1 [ f i l e 2 ] [ f i l e 3 ] [ f i l e 4 ] . . . g i t commit a
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Vamos praticar um pouco!? Inicializem um projeto e realizem diversas altera c oes fazendo uso das op c oes dispon veis acima
37 / 89 Programa c ao para o Kernel Linux (Parte 1) Ivo Calado IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
At e agora, vimos como criar, modicar e manipular o reposit orio de diversas maneiras Por em, como obtemos um c odigo de outra pessoa? Devemos fazer uso do comando git clone
g i t c l o n e g i t : / / eden f e e d . e r g . abdn . ac . uk / d c c p e x p my dccp
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
O primeiro comando ir a gerar uma u nica sa da enquanto que o segundo cria v arios arquivos de sa da (um para cada commit)
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Este comando ir a listar todos os problemas de estilo existentes no c odigo Antes de ser submetido todos os problemas devem ser resolvidos
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Estrutura do patch
O patch gerado e dividida em 5 partes distintas: Cabe calho do email Descri c ao do patch Assinaturas Sum ario das altera c oes Patch propriamente dito
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Assinaturas
A assinatura tem por objetivo possibilitar um rastreio da autoria das altera c oes realizadas Em geral, o c odigo e revisto por diversos desenvolvedores at e chegar na arvore do kernel Tamb em serve como uma declara c ao, por parte do autor, de que est a disponibilizando o c odigo como open-source Uma forma de eternizar o autor! :) Signed-o-by: Autor 1 <random@developer.example.org> Outras entradas poss veis: Ack-by e Cc, Reported-by e Tested-by
42 / 89 Programa c ao para o Kernel Linux (Parte 1) Ivo Calado IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Antes de realizar o envio do patch e recomend avel tentar aplicar o patch em uma arvore limpa de modo a vericar se algum erro inesperado ir a acontecer A ideia e tentar reproduzir o procedimento de quem ir a aplicar o patch ` a arvore
g i t a p p l y s t a t . p a t c h # Sum a rio de m o d i f i c a c oes g i t a p p l y c h e c k . p a t c h # Checagem p o r e r r o s g i t am s i g n o f f . p a t c h # A p l i c a c a o do p a t c h
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Regras b asicas: email sem formata c ao e sem anexos! O c odigo ir a no corpo do email
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Regras b asicas: email sem formata c ao e sem anexos! O c odigo ir a no corpo do email Dica nal: se poss vel, envie o patch para que outras pessoas dar uma olhada antes do envio propriamente dito!
45 / 89 Programa c ao para o Kernel Linux (Parte 1) Ivo Calado IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Finalmente chegou a hora de rodarmos o nosso primeiro m odulo O mais simples dos m odulos deve oferecer duas funcionalidades b asicas: Carregamente e descarregamento do m odulo
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
As macros module init e module exit s ao respons aveis por indicar quais fun c oes ir ao carregar e descarregar o m odulo No exemplo apresentado, o m odulo exibe apenas uma mensagem na abertura e no descarregamento do m odulo!
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Compilando
A forma de compilar m odulos do Kernel e um pouco diferente da compila c ao normal de uma aplica c ao C O primeiro passo e contruir o arquivo Makele Nosso arquivo Makele
o b j m := h e l l o . o
ou
o b j m := module . o module o b j s := f i l e 1 . o f i l e 2 . o
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Executando
Inser c ao, remo c ao, listagem...
insmod h e l l o . ko # I n s e r e modulo lsmod # L i s t a modulos rmmod h e l l o # Remove modulo
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Executando
Inser c ao, remo c ao, listagem...
insmod h e l l o . ko # I n s e r e modulo lsmod # L i s t a modulos rmmod h e l l o # Remove modulo
Onde s ao exibidas as mensagens provenientes do Kernel? Mensagens impressas via fun c ao printk tem dois direcionamentos /var/log/messages dmesg
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Fun c oes init e exit servem apenas para aloca c ao de recursos e registro de servi cos atrav es de callbacks. Um bom exemplo e o registro de novos protocolos de transporte M odulos apenas provem servi cos. N ao s ao entidades ativas! Por ser um n ucleo preempt vel o m odulo deve suportar concorr encia (race conditions )
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Licensiamento de m odulos
M odulos podem ser registrados sob diferentes licensas utilizando a macro MODULE LICENSE: GPL GPL v2 GPL and additional rights Dual BSD/GPL Dual MPL/GPL Proprietary Um m odulo e considerado propriet ario at e segunda ordem
56 / 89 Programa c ao para o Kernel Linux (Parte 1) Ivo Calado IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Muitas vezes precisamos passas congura c oes espec cas ao m odulo que vai ser inicializado Exemplos: Ativa c ao ou desativa c ao do debug Congura c oes espec cas de protocolos Congur oes de m odulos de dispositivos etc Para esta tarefas duas fun c oes est ao associadas: module param (ou module param array) e MODULE PARM DESC
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Par ametro: vari avel a ser utilizada (deve ser static) Tipo: Tipo da vari avel a ser exportada (bool, charp, int, long, short etc) Caso seja informado um n umero maior de valores do que o tamanho do vetor e lan cado um erro e a inicializa c ao do m odulo e abortada
60 / 89 Programa c ao para o Kernel Linux (Parte 1) Ivo Calado IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
O terceiro par ametro tem por objetivo denir como o valor exportado ser a vis vel ap os a inicializa c ao Os valores dos par ametros ser ao disponibilizados em /sys/module/<nome modulo>/parameters Os seguintes valores de permiss oes s ao poss veis 0 => o valor n ao ser a disponibilizados S IRUGO => Somente leitura S IRUGO|S IWUSR => Leitura e escrita
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
kmalloc
kmalloc (ex-kmalloc-01)
Bastante semelhante a malloc e free Possibilita a aloca c ao de blocos de mem oria com base no argumento size Uma peculiaridade e o fornecimento de ags que serve para controlar como o bloco de mem oria ser a alocado
#i n c l u d e < l i n u x / s l a b . h> void kmalloc ( s i z e t size , i n t f l a g s ) ; k f r e e ( v o i d )
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
kmalloc
Em espa co de usu ario a aloca c ao e orientada ` a heap (abstra c ao de um bloco cont nuo) Em espa co de n ucleo, a aloca c ao e orientada a p aginas de mem oria (mem oria segmentar) kmalloc faz aloca c ao blocos de p aginas, ou seja, o tamanho alocado pode ser ligeiramente MAIOR que o tamanho solicitado!
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
kmalloc
Dene como o bloco de mem oria ser a alocado levando em considera c ao as p aginas de mem orias atualmente dispon veis GFP ATOMIC GFP KERNEL GFP USE Mais 11 tipos! Por em GFP ATOMIC e GFP KERNEL s ao utilizadas em quase todos os casos de maneira segura
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
slab cache
slab cache
A abordagem utilizando kmalloc e voltada para cria c ao de objetos individuais Por em, e se fossemos criar diversos objetos do mesmo tipo ao longo do ciclo de vida de um m odulo?...
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
slab cache
slab cache
A abordagem utilizando kmalloc e voltada para cria c ao de objetos individuais Por em, e se fossemos criar diversos objetos do mesmo tipo ao amos de nos longo do ciclo de vida de um m odulo?... ter preocupar em congurar o tamanho para cada novo objeto Exemplo: um objeto sk bu e criado todas as vezes que um pacote de dados e recebido ou enviado Qual seria uma poss vel solu c ao?
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
slab cache
slab cache
A abordagem utilizando kmalloc e voltada para cria c ao de objetos individuais Por em, e se fossemos criar diversos objetos do mesmo tipo ao amos de nos longo do ciclo de vida de um m odulo?... ter preocupar em congurar o tamanho para cada novo objeto Exemplo: um objeto sk bu e criado todas as vezes que um pacote de dados e recebido ou enviado Qual seria uma poss vel solu c ao? Criar um procedimento que encapsule a cria c ao de objetos Para esta funcionalidade, o kernel prov e o Slab
67 / 89 Programa c ao para o Kernel Linux (Parte 1) Ivo Calado IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
slab cache
Arquitetura Slab
Cria um pool de blocos de mem oria Otimizado para criar objetos do mesmo tipo
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
slab cache
Rotinas associadas
S ao denidas quatro fun c oes associadas ` a aloca c ao/desaloca c ao de blocos de mem oria utilizando Slab kmem cache create kmem cache alloc kmem cache free kmem cache destroy
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
slab cache
name: Nome da estrutura (sem espa cos em branco) oset: Deslocalmento desde o come co da p agina de mem oria. Usado para alinhamentos espec cos (normalmente zero) ags: Controla como a aloca c ao ser a realizada (normalmente usa-se o valor SLAB HWCACHE ALIGN) constructor: utilizados para contru c ao personalizada de objetos complexos ( e aceito NULL)
70 / 89 Programa c ao para o Kernel Linux (Parte 1) Ivo Calado IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
slab cache
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Conceitos
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Conceitos
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Conceitos
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Conceitos
Listas simples
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Conceitos
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Conceitos
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Linked list
A implementa c ao do Kernel
Em geral, as implementa c oes de listas ligadas s ao feitas tornando a carga u til um elemento da lista
struct my struct { u n s i g n e d l o n g param1 ; unsigned long para2 ; b o o l param3 ; s t r u c t my struct next ; s t r u c t my struct prev ; };
Ao inv es disso, a implementa c ao do kernel adiciona a lista ligada ` a estrutura de carga u til
78 / 89 Programa c ao para o Kernel Linux (Parte 1) Ivo Calado IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Linked list
A implementa c ao do Kernel
struct my struct { u n s i g n e d l o n g param1 ; u n s i g n e d l o n g param2 ; b o o l param3 ; struct list head l i s t ; };
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Linked list
1 2 3
Denir a estrutura de carga u til Atribuir os valores do primeiro elemento da lista Invocar a macro INIT LIST HEAD para inicializar a lista
Por que e necess aria a exist encia de uma macro para inicializa c ao da lista?
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Linked list
1 2 3
Denir a estrutura de carga u til Atribuir os valores do primeiro elemento da lista Invocar a macro INIT LIST HEAD para inicializar a lista
Por que e necess aria a exist encia de uma macro para inicializa c ao da lista? Porque e necess aria a aloca c ao da mem oria para o primeiro elemento list head
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Linked list
Se estiv essemos trabalhando com elementos est aticos criar amos da seguinte maneira
struct . param1 . param2 . list = };
81 / 89 Programa c ao para o Kernel Linux (Parte 1)
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Linked list
Na estrutura criada n ao e feita nenhuma diferencia c ao entre qual elemento e a cabe ca da lista Por em, muitas vezes queremos manter esse registro Podemos fazer isso a partir da macro LIST HEAD
s t a t i c LIST HEAD ( head ) ;
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Linked list
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Linked list
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Linked list
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Linked list
Trata-se de uma macro que consegue obter o endere co da estrutura externa a partir de um elemento interno Faz uso do deslocamento (oset ) apresentado pelo elemento interno em rela c ao ` a estrutura externa
#d e f i n e l i s t e n t r y ( p t r , t y p e , member ) ( { \ c o n s t t y p e o f ( ( ( t y p e ) 0 )>member ) m p t r = ( p t r ) ; \ ( t y p e ) ( ( c h a r ) m p t r o f f s e t o f ( t y p e , member ) ) ; } )
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Linked list
Percorrendo a lista
O Kernel disponibiliza um conjunto de macros que possibilitam a itera c ao na lista de maneira bastante simples list for each, list for each entry, list for each entry reverse
s t r u c t l i s t h e a d p ; struct my struct f ; l i s t f o r e a c h ( p , &head ) { / f a p o n t a p a r a a c a r g a u t i l d o s e l e m e n t o s / f = l i s t e n t r y (p , s t r u c t my struct , l i s t ) ; }
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Linked list
Iremos trabalhar nesta atividade no processo de cria c ao e utiliza c ao de listas ligadas Em um dos m odulos criados na se c ao 1 adicione rotinas que criem, populem, iterem e realizem dele c ao sobre uma lista A estrutura deve ser denida em um arquivo .h bem como as rotinas do m odulo Tempo da atividade: 10 - 15 minutos
Ivo Calado
IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Linked list
Bibliograa I
Jeremy Andrews. Linux: Documenting how patches reach the kernel. http://kerneltrap.org/node/3180, Maio 2004. The Git Community Book. The git community book. http://book.git-scm.com/index.html, Outubro 2011. Ariejan de Vroom. How to create and apply a patch with git. http://ariejan.net/2009/10/26/ how-to-create-and-apply-a-patch-with-git/, Outubro 2009.
88 / 89 Programa c ao para o Kernel Linux (Parte 1) Ivo Calado IFAL
Introdu c ao
Montando o ambiente
Criando m odulos
Estruturas de Dados
Linked list
Bibliograa II
Ivo Calado
IFAL