






























Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Este documento fornece uma introdução ao desenvolvimento do kernel linux, abordando assuntos como a obtenção do código-fonte, licença, definição, design, exemplos de implementação, versões e diretórios importantes. Além disso, é fornecida informação sobre o estilo de codificação, compilação, carregamento e listagem de módulos, além de ferramentas úteis para o desenvolvimento.
Tipologia: Resumos
Compartilhado em 06/10/2021
2 documentos
1 / 38
Esta página não é visível na pré-visualização
Não perca as partes importantes!































Versões 2.6.X
Versões 2.6.X
http://www.tchelinux.org
http://www.tchelinux.org
Palestrante: Douglas Schilling Landgraf
Email: [email protected]
●
●
●
http
http ://www.kernel.org
://www.kernel.org
ftp
ftp ://ftp.kernel.org/pub
://ftp.kernel.org/pub
rsync
rsync ://rsync.kernel.org/pub/
://rsync.kernel.org/pub/
●
GPL ( versão 2 )
GPL ( versão 2 )
http://www.gnu.org/copyleft/gpl.html
http://www.gnu.org/copyleft/gpl.html
●
Podemos
Podemos
baixar
baixar
o software e
o software e
alterar
alterar
, desde que publiquemos este
, desde que publiquemos este
software com as
software com as licenças originais, incluindo
licenças originais, incluindo a disponibilização do
a disponibilização do
código fonte
código fonte
.
Kernel
Aplicativo 1 Aplicativo 1 Aplicativo 2 Aplicativo 2 System Call Interface (open, close, brk (malloc), etc.) System Call Interface (open, close, brk (malloc), etc.) Kernel Subsystems Kernel Subsystems Device Drivers Device Drivers User-Space User-Space Kernel-Space Kernel-Space Hardware Hardware
Design: Monolítico versus MicroKernel
● Monolítico: Monolítico: ● Criado em meados de 1980 Criado 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) ● Modularidade Modularidade
Kernel
●
Executa em um
Executa em um único processo
único processo
●
Kernel Linux é
Kernel Linux é monolítico
monolítico
●
Implementa
Implementa
recursos do microkernel
recursos do microkernel
design
design
●
Capacidade de
Capacidade de
carregar dinamicamente módulos
carregar dinamicamente módulos
●
Suporte a
Suporte a processadores SMP
processadores SMP (symmetrical multiprocessor)
(symmetrical multiprocessor)
●
Sistema de acesso ao dispositivos (
Sistema de acesso ao dispositivos (
sysfs
sysfs
)
Estáveis:
Estáveis:
●
Correções de bugs
Correções de bugs
●
Novos drivers
Novos drivers
Desenvolvimento:
Desenvolvimento:
●
Alterações frequentes e drásticas
Alterações frequentes e drásticas
●
Desenvolvedores testam novas soluções
Desenvolvedores testam novas soluções
●
Hoje
Hoje só temos
só 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 ( 2004
●
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.
Versão 2. ~=
Árvore
Árvore mm
mm
arch/
arch/ Código específico de arquitetura
Código específico de arquitetura
crypto/
crypto/
API de criptografia
API de criptografia
Documentation/
Documentation/ Documentação
Documentação
drivers/
drivers/ Device Drivers
Device Drivers
fs/
fs/
File systems
File systems
include/
include/
Headers
Headers
init/
init/ Kernel boot
Kernel boot
ipc/
ipc/ Interprocess communication
Interprocess communication
kernel/
kernel/
Core do Kernel
Core do Kernel
Identação
Identação
1 TAB = 8 caracteres (!= 8 espaços)
1 TAB = 8 caracteres (!= 8 espaços)
Colunas
Colunas 80
if
if (teste)
(teste) {
blah();
blah();
} else {
} else {
bleh();
bleh();
if(foo)
if(foo)
bar();
bar();
$ linux/Documentation/CodingStyle
$ linux/Documentation/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.
$ linux/drivers/net>
$ linux/drivers/net> vi hello.c
vi hello.c
$ linux/drivers/net>
$ linux/drivers/net>
vi Makefile
vi Makefile
obj m += hello.o
obj m += hello.o
$ linux/drivers/net>
$ linux/drivers/net> make C /usr/src/linux SUBDIRS=$PWD modules
make C /usr/src/linux SUBDIRS=$PWD modules
Atenção aos WARNINGS
Atenção aos WARNINGS
insmod
insmod ./modulo.ko
./modulo.ko
lsmod
lsmod
modprobe
modprobe modulo.ko (procura por dependências)
modulo.ko (procura por dependências)
rmmod
rmmod modulo.ko
modulo.ko
#include <linux/init.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
static int hello_init(void)
printk(KERN_ALERT "hello!\n");
printk(KERN_ALERT "hello!\n");
return 0;
return 0;